From fbbc638c75b9497d5e3ae6e5caf49c70d2eb5d50 Mon Sep 17 00:00:00 2001 From: Christian Kratky Date: Sat, 18 Apr 2020 20:28:46 +0200 Subject: [PATCH] Try to fix CI builds. --- .../Implementations/CrossPlatformSocket.cs | 3 +- .../ManagedMqttClient_Tests.cs | 56 ++++++++++++++----- 2 files changed, 43 insertions(+), 16 deletions(-) diff --git a/Source/MQTTnet/Implementations/CrossPlatformSocket.cs b/Source/MQTTnet/Implementations/CrossPlatformSocket.cs index 69cdeac9..28df8b26 100644 --- a/Source/MQTTnet/Implementations/CrossPlatformSocket.cs +++ b/Source/MQTTnet/Implementations/CrossPlatformSocket.cs @@ -153,9 +153,8 @@ namespace MQTTnet.Implementations #else await _socket.ConnectAsync(host, port).ConfigureAwait(false); #endif + _networkStream = new NetworkStream(_socket, true); } - - _networkStream = new NetworkStream(_socket, true); } catch (ObjectDisposedException) { diff --git a/Tests/MQTTnet.Core.Tests/ManagedMqttClient_Tests.cs b/Tests/MQTTnet.Core.Tests/ManagedMqttClient_Tests.cs index f8052fb5..d2586005 100644 --- a/Tests/MQTTnet.Core.Tests/ManagedMqttClient_Tests.cs +++ b/Tests/MQTTnet.Core.Tests/ManagedMqttClient_Tests.cs @@ -295,39 +295,67 @@ namespace MQTTnet.Tests { using (var testEnvironment = new TestEnvironment(TestContext)) { - var managedClient = await CreateManagedClientAsync(testEnvironment); + await testEnvironment.StartServerAsync().ConfigureAwait(false); - var sendingClient = await testEnvironment.ConnectClientAsync(); + var sendingClient = await testEnvironment.ConnectClientAsync().ConfigureAwait(false); await sendingClient.PublishAsync(new MqttApplicationMessage - { Topic = "topic", Payload = new byte[] { 1 }, Retain = true }); + { + Topic = "topic", + Payload = new byte[] { 1 }, + Retain = true + }); // Wait a bit for the retained message to be available await Task.Delay(500); - await managedClient.SubscribeAsync("topic"); + await sendingClient.DisconnectAsync(); - await SetupReceivingOfMessages(managedClient, 1); - - await managedClient.StopAsync(); + // Now use the managed client and check if subscriptions get cleared properly. var clientOptions = new MqttClientOptionsBuilder() - .WithTcpServer("localhost", testEnvironment.ServerPort); + .WithTcpServer("localhost", testEnvironment.ServerPort); + + var managedOptions = new ManagedMqttClientOptionsBuilder() + .WithClientOptions(clientOptions) + .Build(); + + var receivedManagedMessages = new List(); + var managedClient = new ManagedMqttClient(testEnvironment.CreateClient(), new MqttNetLogger()); + managedClient.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(c => + { + receivedManagedMessages.Add(c.ApplicationMessage); + }); + + await managedClient.SubscribeAsync("topic"); + await managedClient.StartAsync(new ManagedMqttClientOptionsBuilder() .WithClientOptions(clientOptions) .WithAutoReconnectDelay(TimeSpan.FromSeconds(1)) .Build()); - var messages = new List(); - managedClient.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(r => - { - messages.Add(r.ApplicationMessage); - }); + await Task.Delay(500); + + Assert.AreEqual(1, receivedManagedMessages.Count); + + await managedClient.StopAsync(); await Task.Delay(500); + await managedClient.StartAsync(new ManagedMqttClientOptionsBuilder() + .WithClientOptions(clientOptions) + .WithAutoReconnectDelay(TimeSpan.FromSeconds(1)) + .Build()); + + await Task.Delay(1000); + // After reconnect and then some delay, the retained message must not be received, // showing that the subscriptions were cleared - Assert.AreEqual(0, messages.Count); + Assert.AreEqual(1, receivedManagedMessages.Count); + + // Make sure that it gets received after subscribing again. + await managedClient.SubscribeAsync("topic"); + await Task.Delay(500); + Assert.AreEqual(2, receivedManagedMessages.Count); } }