mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-19 19:13:11 +08:00
Fix broken unit tests
This commit is contained in:
@@ -24,14 +24,17 @@ namespace MQTTnet.Serializer
|
|||||||
|
|
||||||
public static async Task<MqttPacketHeader> ReadHeaderFromSourceAsync(Stream stream, CancellationToken cancellationToken)
|
public static async Task<MqttPacketHeader> ReadHeaderFromSourceAsync(Stream stream, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
byte[] singleByteBuf = new byte[1];
|
// Wait for the next package which starts with the header. At this point there will probably
|
||||||
var readCount = await stream.ReadAsync(singleByteBuf, 0, singleByteBuf.Length).ConfigureAwait(false);
|
// some large delay and thus the thread should be put back to the pool (await). So ReadByte()
|
||||||
|
// is not an option here.
|
||||||
|
var buffer = new byte[1];
|
||||||
|
var readCount = await stream.ReadAsync(buffer, 0, 1, cancellationToken).ConfigureAwait(false);
|
||||||
if (readCount <= 0)
|
if (readCount <= 0)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
var fixedHeader = singleByteBuf[0];
|
var fixedHeader = buffer[0];
|
||||||
var controlPacketType = (MqttControlPacketType)(fixedHeader >> 4);
|
var controlPacketType = (MqttControlPacketType)(fixedHeader >> 4);
|
||||||
var bodyLength = await ReadBodyLengthFromSourceAsync(stream, cancellationToken).ConfigureAwait(false);
|
var bodyLength = await ReadBodyLengthFromSourceAsync(stream, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
@@ -88,8 +91,7 @@ namespace MQTTnet.Serializer
|
|||||||
var value = 0;
|
var value = 0;
|
||||||
byte encodedByte;
|
byte encodedByte;
|
||||||
|
|
||||||
byte[] singleByteBuf = new byte[1];
|
var buffer = new byte[1];
|
||||||
|
|
||||||
var readBytes = new List<byte>();
|
var readBytes = new List<byte>();
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -98,13 +100,13 @@ namespace MQTTnet.Serializer
|
|||||||
throw new TaskCanceledException();
|
throw new TaskCanceledException();
|
||||||
}
|
}
|
||||||
|
|
||||||
int readCount = await stream.ReadAsync(singleByteBuf, 0, singleByteBuf.Length).ConfigureAwait(false);
|
var readCount = await stream.ReadAsync(buffer, 0, 1, cancellationToken).ConfigureAwait(false);
|
||||||
if (readCount <= 0)
|
if (readCount <= 0)
|
||||||
{
|
{
|
||||||
throw new MqttCommunicationException("Connection closed while reading remaining length data.");
|
throw new MqttCommunicationException("Connection closed while reading remaining length data.");
|
||||||
}
|
}
|
||||||
|
|
||||||
encodedByte = singleByteBuf[0];
|
encodedByte = buffer[0];
|
||||||
readBytes.Add(encodedByte);
|
readBytes.Add(encodedByte);
|
||||||
|
|
||||||
value += (byte)(encodedByte & 127) * multiplier;
|
value += (byte)(encodedByte & 127) * multiplier;
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ namespace MQTTnet.Server
|
|||||||
|
|
||||||
_queue.Enqueue(packet);
|
_queue.Enqueue(packet);
|
||||||
_queueWaitSemaphore.Release();
|
_queueWaitSemaphore.Release();
|
||||||
|
|
||||||
_logger.Trace<MqttClientPendingMessagesQueue>("Enqueued packet (ClientId: {0}).", _session.ClientId);
|
_logger.Trace<MqttClientPendingMessagesQueue>("Enqueued packet (ClientId: {0}).", _session.ClientId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,9 +71,11 @@ namespace MQTTnet.Server
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
await _queueWaitSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false);
|
await _queueWaitSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false);
|
||||||
if (!_queue.TryDequeue(out packet)) {
|
if (!_queue.TryDequeue(out packet))
|
||||||
|
{
|
||||||
throw new InvalidOperationException(); // should not happen
|
throw new InvalidOperationException(); // should not happen
|
||||||
}
|
}
|
||||||
|
|
||||||
await adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, cancellationToken, packet).ConfigureAwait(false);
|
await adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, cancellationToken, packet).ConfigureAwait(false);
|
||||||
|
|
||||||
_logger.Trace<MqttClientPendingMessagesQueue>("Enqueued packet sent (ClientId: {0}).", _session.ClientId);
|
_logger.Trace<MqttClientPendingMessagesQueue>("Enqueued packet sent (ClientId: {0}).", _session.ClientId);
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
using System;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
|
using MQTTnet.Client;
|
||||||
|
using MQTTnet.Exceptions;
|
||||||
|
|
||||||
|
namespace MQTTnet.Core.Tests
|
||||||
|
{
|
||||||
|
[TestClass]
|
||||||
|
public class MqttClientTests
|
||||||
|
{
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public async Task ClientDisconnectException()
|
||||||
|
{
|
||||||
|
var factory = new MqttFactory();
|
||||||
|
var client = factory.CreateMqttClient();
|
||||||
|
|
||||||
|
var exceptionIsCorrect = false;
|
||||||
|
client.Disconnected += (s, e) =>
|
||||||
|
{
|
||||||
|
exceptionIsCorrect = e.Exception is MqttCommunicationException c && c.InnerException is SocketException;
|
||||||
|
};
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await client.ConnectAsync(new MqttClientOptionsBuilder().WithTcpServer("wrong-server").Build());
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.IsTrue(exceptionIsCorrect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,7 +12,7 @@ namespace MQTTnet.Core.Tests
|
|||||||
public void MqttPacketReader_EmptyStream()
|
public void MqttPacketReader_EmptyStream()
|
||||||
{
|
{
|
||||||
var memStream = new MemoryStream();
|
var memStream = new MemoryStream();
|
||||||
var header = MqttPacketReader.ReadHeaderFromSource(memStream, CancellationToken.None);
|
var header = MqttPacketReader.ReadHeaderFromSourceAsync(memStream, CancellationToken.None).GetAwaiter().GetResult();
|
||||||
|
|
||||||
Assert.IsNull(header);
|
Assert.IsNull(header);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -405,7 +405,7 @@ namespace MQTTnet.Core.Tests
|
|||||||
|
|
||||||
using (var headerStream = new MemoryStream(Join(buffer1)))
|
using (var headerStream = new MemoryStream(Join(buffer1)))
|
||||||
{
|
{
|
||||||
var header = MqttPacketReader.ReadHeaderFromSource(headerStream, CancellationToken.None);
|
var header = MqttPacketReader.ReadHeaderFromSourceAsync(headerStream, CancellationToken.None).GetAwaiter().GetResult();
|
||||||
|
|
||||||
using (var bodyStream = new MemoryStream(Join(buffer1), (int)headerStream.Position, header.BodyLength))
|
using (var bodyStream = new MemoryStream(Join(buffer1), (int)headerStream.Position, header.BodyLength))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user