mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-15 00:15:15 +08:00
78 lines
2.5 KiB
C#
78 lines
2.5 KiB
C#
using System;
|
|
using System.Net.Sockets;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
using MQTTnet.Adapter;
|
|
using MQTTnet.Client;
|
|
using MQTTnet.Diagnostics;
|
|
using MQTTnet.Exceptions;
|
|
using MQTTnet.Packets;
|
|
using MQTTnet.Packets.V3;
|
|
|
|
namespace MQTTnet.Core.Tests
|
|
{
|
|
[TestClass]
|
|
public class MqttClientTests
|
|
{
|
|
[TestMethod]
|
|
public async Task ClientDisconnectException()
|
|
{
|
|
var factory = new MqttFactory();
|
|
var client = factory.CreateMqttClient();
|
|
|
|
Exception ex = null;
|
|
client.Disconnected += (s, e) =>
|
|
{
|
|
ex = e.Exception;
|
|
};
|
|
|
|
try
|
|
{
|
|
await client.ConnectAsync(new MqttClientOptionsBuilder().WithTcpServer("wrong-server").Build());
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
|
|
Assert.IsNotNull(ex);
|
|
Assert.IsInstanceOfType(ex, typeof(MqttCommunicationException));
|
|
Assert.IsInstanceOfType(ex.InnerException, typeof(SocketException));
|
|
}
|
|
|
|
#if DEBUG
|
|
[TestMethod]
|
|
public async Task ClientCleanupOnAuthentificationFails()
|
|
{
|
|
var channel = new TestMqttCommunicationAdapter();
|
|
var channel2 = new TestMqttCommunicationAdapter();
|
|
channel.Partner = channel2;
|
|
channel2.Partner = channel;
|
|
|
|
Task.Run(async () => {
|
|
var connect = await channel2.ReceivePacketAsync(TimeSpan.Zero, CancellationToken.None);
|
|
await channel2.SendPacketAsync(new MqttV3ConnAckPacket() { ConnectReturnCode = Protocol.MqttConnectReturnCode.ConnectionRefusedNotAuthorized }, CancellationToken.None);
|
|
});
|
|
|
|
|
|
|
|
var fake = new TestMqttCommunicationAdapterFactory(channel);
|
|
|
|
var client = new MqttClient(fake, new MqttNetLogger());
|
|
|
|
try
|
|
{
|
|
await client.ConnectAsync(new MqttClientOptionsBuilder().WithTcpServer("any-server").Build());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Assert.IsInstanceOfType(ex, typeof(MqttConnectingFailedException));
|
|
}
|
|
|
|
Assert.IsTrue(client._packetReceiverTask == null || client._packetReceiverTask.IsCompleted, "receive loop not completed");
|
|
Assert.IsTrue(client._keepAliveMessageSenderTask == null || client._keepAliveMessageSenderTask.IsCompleted, "keepalive loop not completed");
|
|
}
|
|
#endif
|
|
}
|
|
}
|