mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-11-05 05:52:56 +08:00
Merge master
This commit is contained in:
+77
-147
@@ -16,15 +16,45 @@ using MQTTnet.Protocol;
|
|||||||
using MQTTnet.Server;
|
using MQTTnet.Server;
|
||||||
using MQTTnet.Tests.Mockups;
|
using MQTTnet.Tests.Mockups;
|
||||||
|
|
||||||
<<<<<<<< HEAD:Source/MQTTnet.Tests/ManagedMqttClient/ManagedMqttClient_Connection_Tests.cs
|
|
||||||
namespace MQTTnet.Tests.ManagedMqttClient
|
|
||||||
========
|
|
||||||
namespace MQTTnet.Tests.Clients.ManagedMqttClient
|
namespace MQTTnet.Tests.Clients.ManagedMqttClient
|
||||||
>>>>>>>> master:Source/MQTTnet.Tests/Clients/ManagedMqttClient/ManagedMqttClient_Tests.cs
|
|
||||||
{
|
{
|
||||||
[TestClass]
|
[TestClass]
|
||||||
public sealed class ManagedMqttClient_Connection_Tests : BaseTestClass
|
public sealed class ManagedMqttClient_Connection_Tests : BaseTestClass
|
||||||
{
|
{
|
||||||
|
[TestMethod]
|
||||||
|
public async Task Connect_To_Invalid_Server()
|
||||||
|
{
|
||||||
|
using (var testEnvironment = CreateTestEnvironment())
|
||||||
|
{
|
||||||
|
await testEnvironment.StartServer();
|
||||||
|
await LongTestDelay();
|
||||||
|
|
||||||
|
var managedClient = testEnvironment.Factory.CreateManagedMqttClient(testEnvironment.CreateClient());
|
||||||
|
|
||||||
|
ConnectingFailedEventArgs connectingFailedEventArgs = null;
|
||||||
|
managedClient.ConnectingFailedAsync += args =>
|
||||||
|
{
|
||||||
|
connectingFailedEventArgs = args;
|
||||||
|
return CompletedTask.Instance;
|
||||||
|
};
|
||||||
|
|
||||||
|
await managedClient.StartAsync(
|
||||||
|
new ManagedMqttClientOptions
|
||||||
|
{
|
||||||
|
ClientOptions = testEnvironment.Factory.CreateClientOptionsBuilder().WithTimeout(TimeSpan.FromSeconds(2)).WithTcpServer("wrong_server", 1234).Build()
|
||||||
|
});
|
||||||
|
|
||||||
|
await managedClient.EnqueueAsync("test_topic_2");
|
||||||
|
|
||||||
|
SpinWait.SpinUntil(() => connectingFailedEventArgs != null, 10000);
|
||||||
|
|
||||||
|
// The wrong server must be reported in general.
|
||||||
|
Assert.IsNotNull(connectingFailedEventArgs);
|
||||||
|
Assert.IsNotNull(connectingFailedEventArgs.Exception);
|
||||||
|
Assert.IsNull(connectingFailedEventArgs.ConnectResult);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public async Task Receive_While_Not_Cleanly_Disconnected()
|
public async Task Receive_While_Not_Cleanly_Disconnected()
|
||||||
{
|
{
|
||||||
@@ -86,98 +116,6 @@ namespace MQTTnet.Tests.Clients.ManagedMqttClient
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task Connect_To_Invalid_Server()
|
|
||||||
{
|
|
||||||
using (var testEnvironment = CreateTestEnvironment())
|
|
||||||
{
|
|
||||||
await testEnvironment.StartServer();
|
|
||||||
await LongTestDelay();
|
|
||||||
|
|
||||||
var managedClient = testEnvironment.Factory.CreateManagedMqttClient(testEnvironment.CreateClient());
|
|
||||||
|
|
||||||
ConnectingFailedEventArgs connectingFailedEventArgs = null;
|
|
||||||
managedClient.ConnectingFailedAsync += args =>
|
|
||||||
{
|
|
||||||
connectingFailedEventArgs = args;
|
|
||||||
return CompletedTask.Instance;
|
|
||||||
};
|
|
||||||
|
|
||||||
await managedClient.StartAsync(
|
|
||||||
new ManagedMqttClientOptions
|
|
||||||
{
|
|
||||||
ClientOptions = testEnvironment.Factory.CreateClientOptionsBuilder().WithTimeout(TimeSpan.FromSeconds(2)).WithTcpServer("wrong_server", 1234).Build()
|
|
||||||
});
|
|
||||||
|
|
||||||
await managedClient.EnqueueAsync("test_topic_2");
|
|
||||||
|
|
||||||
SpinWait.SpinUntil(() => connectingFailedEventArgs != null, 10000);
|
|
||||||
|
|
||||||
// The wrong server must be reported in general.
|
|
||||||
Assert.IsNotNull(connectingFailedEventArgs);
|
|
||||||
Assert.IsNotNull(connectingFailedEventArgs.Exception);
|
|
||||||
Assert.IsNull(connectingFailedEventArgs.ConnectResult);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
|
||||||
public async Task Will_Message_Send()
|
|
||||||
{
|
|
||||||
using (var testEnvironment = CreateTestEnvironment())
|
|
||||||
{
|
|
||||||
await testEnvironment.StartServer();
|
|
||||||
|
|
||||||
// Prepare the receiving client.
|
|
||||||
var receivedMessagesCount = 0;
|
|
||||||
<<<<<<<< HEAD:Source/MQTTnet.Tests/ManagedMqttClient/ManagedMqttClient_Connection_Tests.cs
|
|
||||||
========
|
|
||||||
|
|
||||||
var clientOptions = new MqttClientOptionsBuilder().WithTcpServer("127.0.0.1", testEnvironment.ServerPort)
|
|
||||||
.WithWillTopic("My/last/will")
|
|
||||||
.WithWillQualityOfServiceLevel(MqttQualityOfServiceLevel.AtMostOnce)
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
var dyingClient = testEnvironment.CreateClient();
|
|
||||||
var dyingManagedClient = new MQTTnet.Extensions.ManagedClient.ManagedMqttClient(dyingClient, testEnvironment.ClientLogger);
|
|
||||||
|
|
||||||
await dyingManagedClient.StartAsync(new ManagedMqttClientOptionsBuilder().WithClientOptions(clientOptions).Build());
|
|
||||||
|
|
||||||
// Wait until the managed client is fully set up and running.
|
|
||||||
await Task.Delay(1000);
|
|
||||||
|
|
||||||
>>>>>>>> master:Source/MQTTnet.Tests/Clients/ManagedMqttClient/ManagedMqttClient_Tests.cs
|
|
||||||
var receivingClient = await testEnvironment.ConnectClient();
|
|
||||||
receivingClient.ApplicationMessageReceivedAsync += e =>
|
|
||||||
{
|
|
||||||
Interlocked.Increment(ref receivedMessagesCount);
|
|
||||||
return CompletedTask.Instance;
|
|
||||||
};
|
|
||||||
|
|
||||||
await receivingClient.SubscribeAsync("My/last/will");
|
|
||||||
|
|
||||||
// Prepare the managed client.
|
|
||||||
var clientOptions = new MqttClientOptionsBuilder().WithTcpServer("127.0.0.1", testEnvironment.ServerPort)
|
|
||||||
.WithWillTopic("My/last/will")
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
var dyingClient = testEnvironment.CreateClient();
|
|
||||||
var dyingManagedClient = testEnvironment.CreateManagedMqttClient(dyingClient);
|
|
||||||
await dyingManagedClient.StartAsync(new ManagedMqttClientOptionsBuilder().WithClientOptions(clientOptions).Build());
|
|
||||||
|
|
||||||
// Wait until the managed client is fully set up and running.
|
|
||||||
await LongTestDelay();
|
|
||||||
|
|
||||||
// Disposing the client will not sent a DISCONNECT packet so that connection is terminated
|
|
||||||
// which will lead to the will publish.
|
|
||||||
dyingManagedClient.Dispose();
|
|
||||||
|
|
||||||
// Wait for arrival of the will message at the receiver.
|
|
||||||
await LongTestDelay();
|
|
||||||
|
|
||||||
Assert.AreEqual(1, receivedMessagesCount);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public async Task Start_Stop()
|
public async Task Start_Stop()
|
||||||
{
|
{
|
||||||
@@ -185,12 +123,8 @@ namespace MQTTnet.Tests.Clients.ManagedMqttClient
|
|||||||
{
|
{
|
||||||
var server = await testEnvironment.StartServer();
|
var server = await testEnvironment.StartServer();
|
||||||
|
|
||||||
<<<<<<<< HEAD:Source/MQTTnet.Tests/ManagedMqttClient/ManagedMqttClient_Connection_Tests.cs
|
|
||||||
var managedClient = testEnvironment.CreateManagedClient();
|
var managedClient = testEnvironment.CreateManagedClient();
|
||||||
========
|
|
||||||
var managedClient = new MQTTnet.Extensions.ManagedClient.ManagedMqttClient(testEnvironment.CreateClient(), new MqttNetEventLogger());
|
|
||||||
var clientOptions = new MqttClientOptionsBuilder().WithTcpServer("localhost", testEnvironment.ServerPort);
|
var clientOptions = new MqttClientOptionsBuilder().WithTcpServer("localhost", testEnvironment.ServerPort);
|
||||||
>>>>>>>> master:Source/MQTTnet.Tests/Clients/ManagedMqttClient/ManagedMqttClient_Tests.cs
|
|
||||||
|
|
||||||
var connected = GetConnectedTask(managedClient);
|
var connected = GetConnectedTask(managedClient);
|
||||||
|
|
||||||
@@ -216,11 +150,7 @@ namespace MQTTnet.Tests.Clients.ManagedMqttClient
|
|||||||
|
|
||||||
await testEnvironment.StartServer();
|
await testEnvironment.StartServer();
|
||||||
|
|
||||||
<<<<<<<< HEAD:Source/MQTTnet.Tests/ManagedMqttClient/ManagedMqttClient_Connection_Tests.cs
|
|
||||||
var managedClient = testEnvironment.CreateManagedClient();
|
var managedClient = testEnvironment.CreateManagedClient();
|
||||||
========
|
|
||||||
var managedClient = new MQTTnet.Extensions.ManagedClient.ManagedMqttClient(testEnvironment.CreateClient(), new MqttNetEventLogger());
|
|
||||||
>>>>>>>> master:Source/MQTTnet.Tests/Clients/ManagedMqttClient/ManagedMqttClient_Tests.cs
|
|
||||||
var clientOptions = new MqttClientOptionsBuilder().WithTcpServer("localhost", testEnvironment.ServerPort);
|
var clientOptions = new MqttClientOptionsBuilder().WithTcpServer("localhost", testEnvironment.ServerPort);
|
||||||
var storage = new ManagedMqttClientTestStorage();
|
var storage = new ManagedMqttClientTestStorage();
|
||||||
|
|
||||||
@@ -349,14 +279,10 @@ namespace MQTTnet.Tests.Clients.ManagedMqttClient
|
|||||||
|
|
||||||
await managedClient.SubscribeAsync("topic");
|
await managedClient.SubscribeAsync("topic");
|
||||||
|
|
||||||
<<<<<<<< HEAD:Source/MQTTnet.Tests/ManagedMqttClient/ManagedMqttClient_Connection_Tests.cs
|
|
||||||
var managedClientOptions = testEnvironment.CreateDefaultManagedMqttClientOptions();
|
var managedClientOptions = testEnvironment.CreateDefaultManagedMqttClientOptions();
|
||||||
managedClientOptions.ClientOptions.CleanSession = false;
|
managedClientOptions.ClientOptions.CleanSession = false;
|
||||||
await managedClient.StartAsync(managedClientOptions);
|
await managedClient.StartAsync(managedClientOptions);
|
||||||
|
|
||||||
========
|
|
||||||
await managedClient.StartAsync(new ManagedMqttClientOptionsBuilder().WithClientOptions(clientOptions).WithAutoReconnectDelay(TimeSpan.FromSeconds(0.5)).Build());
|
|
||||||
>>>>>>>> master:Source/MQTTnet.Tests/Clients/ManagedMqttClient/ManagedMqttClient_Tests.cs
|
|
||||||
await LongTestDelay();
|
await LongTestDelay();
|
||||||
|
|
||||||
Assert.AreEqual(1, receivedManagedMessages.Count);
|
Assert.AreEqual(1, receivedManagedMessages.Count);
|
||||||
@@ -364,12 +290,8 @@ namespace MQTTnet.Tests.Clients.ManagedMqttClient
|
|||||||
await managedClient.StopAsync();
|
await managedClient.StopAsync();
|
||||||
await LongTestDelay();
|
await LongTestDelay();
|
||||||
|
|
||||||
<<<<<<<< HEAD:Source/MQTTnet.Tests/ManagedMqttClient/ManagedMqttClient_Connection_Tests.cs
|
|
||||||
await managedClient.StartAsync(managedClientOptions);
|
await managedClient.StartAsync(managedClientOptions);
|
||||||
|
|
||||||
========
|
|
||||||
await managedClient.StartAsync(new ManagedMqttClientOptionsBuilder().WithClientOptions(clientOptions).WithAutoReconnectDelay(TimeSpan.FromSeconds(0.5)).Build());
|
|
||||||
>>>>>>>> master:Source/MQTTnet.Tests/Clients/ManagedMqttClient/ManagedMqttClient_Tests.cs
|
|
||||||
await LongTestDelay();
|
await LongTestDelay();
|
||||||
|
|
||||||
// After reconnect and then some delay, the retained message must not be received,
|
// After reconnect and then some delay, the retained message must not be received,
|
||||||
@@ -398,7 +320,6 @@ namespace MQTTnet.Tests.Clients.ManagedMqttClient
|
|||||||
var connectionCheckInterval = TimeSpan.FromSeconds(10);
|
var connectionCheckInterval = TimeSpan.FromSeconds(10);
|
||||||
var receivingClient = await CreateManagedClientAsync(testEnvironment, null, connectionCheckInterval);
|
var receivingClient = await CreateManagedClientAsync(testEnvironment, null, connectionCheckInterval);
|
||||||
var sendingClient = await testEnvironment.ConnectClient();
|
var sendingClient = await testEnvironment.ConnectClient();
|
||||||
|
|
||||||
await sendingClient.PublishAsync(new MqttApplicationMessage { Topic = "topic", Payload = new byte[] { 1 }, Retain = true });
|
await sendingClient.PublishAsync(new MqttApplicationMessage { Topic = "topic", Payload = new byte[] { 1 }, Retain = true });
|
||||||
|
|
||||||
var subscribeTime = DateTime.UtcNow;
|
var subscribeTime = DateTime.UtcNow;
|
||||||
@@ -425,7 +346,7 @@ namespace MQTTnet.Tests.Clients.ManagedMqttClient
|
|||||||
{
|
{
|
||||||
await testEnvironment.StartServer();
|
await testEnvironment.StartServer();
|
||||||
|
|
||||||
var managedClient = await CreateManagedClientAsync(testEnvironment);
|
var managedClient = testEnvironment.CreateManagedClient();
|
||||||
|
|
||||||
var sendingClient = await testEnvironment.ConnectClient();
|
var sendingClient = await testEnvironment.ConnectClient();
|
||||||
|
|
||||||
@@ -451,11 +372,47 @@ namespace MQTTnet.Tests.Clients.ManagedMqttClient
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<<< HEAD:Source/MQTTnet.Tests/ManagedMqttClient/ManagedMqttClient_Connection_Tests.cs
|
[TestMethod]
|
||||||
async Task<IManagedMqttClient> CreateManagedClientAsync(
|
public async Task Will_Message_Send()
|
||||||
========
|
{
|
||||||
async Task<MQTTnet.Extensions.ManagedClient.ManagedMqttClient> CreateManagedClientAsync(
|
using (var testEnvironment = CreateTestEnvironment())
|
||||||
>>>>>>>> master:Source/MQTTnet.Tests/Clients/ManagedMqttClient/ManagedMqttClient_Tests.cs
|
{
|
||||||
|
await testEnvironment.StartServer();
|
||||||
|
|
||||||
|
// Prepare the receiving client.
|
||||||
|
var receivedMessagesCount = 0;
|
||||||
|
|
||||||
|
var receivingClient = await testEnvironment.ConnectClient();
|
||||||
|
receivingClient.ApplicationMessageReceivedAsync += e =>
|
||||||
|
{
|
||||||
|
Interlocked.Increment(ref receivedMessagesCount);
|
||||||
|
return CompletedTask.Instance;
|
||||||
|
};
|
||||||
|
|
||||||
|
await receivingClient.SubscribeAsync("My/last/will");
|
||||||
|
|
||||||
|
// Prepare the managed client.
|
||||||
|
var clientOptions = new MqttClientOptionsBuilder().WithTcpServer("127.0.0.1", testEnvironment.ServerPort).WithWillTopic("My/last/will").Build();
|
||||||
|
|
||||||
|
var dyingClient = testEnvironment.CreateClient();
|
||||||
|
var dyingManagedClient = testEnvironment.CreateManagedMqttClient(dyingClient);
|
||||||
|
await dyingManagedClient.StartAsync(new ManagedMqttClientOptionsBuilder().WithClientOptions(clientOptions).Build());
|
||||||
|
|
||||||
|
// Wait until the managed client is fully set up and running.
|
||||||
|
await LongTestDelay();
|
||||||
|
|
||||||
|
// Disposing the client will not sent a DISCONNECT packet so that connection is terminated
|
||||||
|
// which will lead to the will publish.
|
||||||
|
dyingManagedClient.Dispose();
|
||||||
|
|
||||||
|
// Wait for arrival of the will message at the receiver.
|
||||||
|
await LongTestDelay();
|
||||||
|
|
||||||
|
Assert.AreEqual(1, receivedMessagesCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static async Task<IManagedMqttClient> CreateManagedClientAsync(
|
||||||
TestEnvironment testEnvironment,
|
TestEnvironment testEnvironment,
|
||||||
IMqttClient underlyingClient = null,
|
IMqttClient underlyingClient = null,
|
||||||
TimeSpan? connectionCheckInterval = null,
|
TimeSpan? connectionCheckInterval = null,
|
||||||
@@ -470,11 +427,7 @@ namespace MQTTnet.Tests.Clients.ManagedMqttClient
|
|||||||
// at connection check intervals
|
// at connection check intervals
|
||||||
managedOptions.ConnectionCheckInterval = connectionCheckInterval ?? TimeSpan.FromSeconds(0.1);
|
managedOptions.ConnectionCheckInterval = connectionCheckInterval ?? TimeSpan.FromSeconds(0.1);
|
||||||
|
|
||||||
<<<<<<<< HEAD:Source/MQTTnet.Tests/ManagedMqttClient/ManagedMqttClient_Connection_Tests.cs
|
|
||||||
var managedClient = testEnvironment.CreateManagedMqttClient(underlyingClient ?? testEnvironment.CreateClient());
|
var managedClient = testEnvironment.CreateManagedMqttClient(underlyingClient ?? testEnvironment.CreateClient());
|
||||||
========
|
|
||||||
var managedClient = new MQTTnet.Extensions.ManagedClient.ManagedMqttClient(underlyingClient ?? testEnvironment.CreateClient(), new MqttNetEventLogger());
|
|
||||||
>>>>>>>> master:Source/MQTTnet.Tests/Clients/ManagedMqttClient/ManagedMqttClient_Tests.cs
|
|
||||||
|
|
||||||
var connected = GetConnectedTask(managedClient);
|
var connected = GetConnectedTask(managedClient);
|
||||||
|
|
||||||
@@ -485,17 +438,7 @@ namespace MQTTnet.Tests.Clients.ManagedMqttClient
|
|||||||
return managedClient;
|
return managedClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<<< HEAD:Source/MQTTnet.Tests/ManagedMqttClient/ManagedMqttClient_Connection_Tests.cs
|
|
||||||
static Task GetConnectedTask(IManagedMqttClient managedClient)
|
static Task GetConnectedTask(IManagedMqttClient managedClient)
|
||||||
========
|
|
||||||
/// <summary>
|
|
||||||
/// Returns a task that will finish when the
|
|
||||||
/// <paramref
|
|
||||||
/// name="managedClient" />
|
|
||||||
/// has connected
|
|
||||||
/// </summary>
|
|
||||||
Task GetConnectedTask(MQTTnet.Extensions.ManagedClient.ManagedMqttClient managedClient)
|
|
||||||
>>>>>>>> master:Source/MQTTnet.Tests/Clients/ManagedMqttClient/ManagedMqttClient_Tests.cs
|
|
||||||
{
|
{
|
||||||
var promise = new TaskCompletionSource<bool>();
|
var promise = new TaskCompletionSource<bool>();
|
||||||
|
|
||||||
@@ -508,20 +451,7 @@ namespace MQTTnet.Tests.Clients.ManagedMqttClient
|
|||||||
return promise.Task;
|
return promise.Task;
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<<< HEAD:Source/MQTTnet.Tests/ManagedMqttClient/ManagedMqttClient_Connection_Tests.cs
|
static Task<List<MqttApplicationMessage>> SetupReceivingOfMessages(IManagedMqttClient managedClient, int expectedNumberOfMessages)
|
||||||
Task<List<MqttApplicationMessage>> SetupReceivingOfMessages(IManagedMqttClient managedClient, int expectedNumberOfMessages)
|
|
||||||
========
|
|
||||||
/// <summary>
|
|
||||||
/// Returns a task that will return the messages received on
|
|
||||||
/// <paramref
|
|
||||||
/// name="managedClient" />
|
|
||||||
/// when
|
|
||||||
/// <paramref
|
|
||||||
/// name="expectedNumberOfMessages" />
|
|
||||||
/// have been received
|
|
||||||
/// </summary>
|
|
||||||
Task<List<MqttApplicationMessage>> SetupReceivingOfMessages(MQTTnet.Extensions.ManagedClient.ManagedMqttClient managedClient, int expectedNumberOfMessages)
|
|
||||||
>>>>>>>> master:Source/MQTTnet.Tests/Clients/ManagedMqttClient/ManagedMqttClient_Tests.cs
|
|
||||||
{
|
{
|
||||||
var receivedMessages = new List<MqttApplicationMessage>();
|
var receivedMessages = new List<MqttApplicationMessage>();
|
||||||
var result = new AsyncTaskCompletionSource<List<MqttApplicationMessage>>();
|
var result = new AsyncTaskCompletionSource<List<MqttApplicationMessage>>();
|
||||||
|
|||||||
Reference in New Issue
Block a user