diff --git a/Tests/MQTTnet.Core.Tests/MqttClient_Tests.cs b/Tests/MQTTnet.Core.Tests/MqttClient_Tests.cs index 66bef2e..d56ef72 100644 --- a/Tests/MQTTnet.Core.Tests/MqttClient_Tests.cs +++ b/Tests/MQTTnet.Core.Tests/MqttClient_Tests.cs @@ -16,9 +16,8 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using MQTTnet.Client.Receiving; -using MQTTnet.Diagnostics; -using MQTTnet.Extensions.ManagedClient; using MQTTnet.Formatter; +using MQTTnet.Packets; namespace MQTTnet.Tests { @@ -27,6 +26,42 @@ namespace MQTTnet.Tests { public TestContext TestContext { get; set; } + [TestMethod] + public async Task Ensure_Queue_Drain() + { + using (var testEnvironment = new TestEnvironment(TestContext)) + { + var server = await testEnvironment.StartServerAsync(); + var client = await testEnvironment.ConnectLowLevelClientAsync(); + + var i = 0; + server.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(c => + { + i++; + }); + + await client.SendAsync(new MqttConnectPacket + { + ClientId = "Ensure_Queue_Drain_Test" + }, CancellationToken.None); + + await client.SendAsync(new MqttPublishPacket + { + Topic = "Test" + }, CancellationToken.None); + + await Task.Delay(1000); + + // This will simulate a device which closes the connection directly + // after sending the data so do delay is added between send and dispose! + client.Dispose(); + + await Task.Delay(1000); + + Assert.AreEqual(1, i); + } + } + [TestMethod] public async Task Set_ClientWasConnected_On_ServerDisconnect() {