From de647f650c17afe7311970ddd2b36a83bec5dae5 Mon Sep 17 00:00:00 2001 From: Christian <6939810+chkr1011@users.noreply.github.com> Date: Mon, 7 Nov 2022 19:51:44 +0100 Subject: [PATCH] Add unit test to reproduce issue --- .../Client/ManagedMqttClient_Tests.cs | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/Source/MQTTnet.Tests/Client/ManagedMqttClient_Tests.cs b/Source/MQTTnet.Tests/Client/ManagedMqttClient_Tests.cs index 554cc663..bbd20be9 100644 --- a/Source/MQTTnet.Tests/Client/ManagedMqttClient_Tests.cs +++ b/Source/MQTTnet.Tests/Client/ManagedMqttClient_Tests.cs @@ -21,6 +21,52 @@ namespace MQTTnet.Tests.Client [TestClass] public sealed class ManagedMqttClient_Tests : BaseTestClass { + [TestMethod] + public async Task Subscribe_When_Offline_But_Existing_Session() + { + using (var testEnvironment = CreateTestEnvironment()) + { + var server = await testEnvironment.StartServer(o => o.WithPersistentSessions()); + + // The connected client will crate a new session. + var mqttClient = await testEnvironment.ConnectClient(); + mqttClient.Dispose(); + + mqttClient = testEnvironment.CreateClient(); + var managedClient = testEnvironment.Factory.CreateManagedMqttClient(mqttClient); + + // Subscribe before starting! + await managedClient.SubscribeAsync("a"); + + MqttApplicationMessage applicationMessage = null; + managedClient.ApplicationMessageReceivedAsync += e => + { + applicationMessage = e.ApplicationMessage; + return CompletedTask.Instance; + }; + + // Now the client must send the new subscription. + await managedClient.StartAsync( + new ManagedMqttClientOptions + { + ClientOptions = testEnvironment.Factory.CreateClientOptionsBuilder().WithCleanSession(false).WithTcpServer("127.0.0.1", testEnvironment.ServerPort).Build() + }); + + await LongTestDelay(); + + await server.InjectApplicationMessage( + new InjectedMqttApplicationMessage( + new MqttApplicationMessage + { + Topic = "a" + })); + + await LongTestDelay(); + + Assert.IsNotNull(applicationMessage); + } + } + [TestMethod] public async Task Connect_To_Invalid_Server() { @@ -29,7 +75,6 @@ namespace MQTTnet.Tests.Client testEnvironment.IgnoreClientLogErrors = true; var mqttClient = testEnvironment.CreateClient(); - var managedClient = testEnvironment.Factory.CreateManagedMqttClient(mqttClient); ConnectingFailedEventArgs connectingFailedEventArgs = null;