mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-23 13:23:05 +08:00
Refactor subscriptions manager
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using MQTTnet.Diagnostics;
|
||||
@@ -58,8 +59,8 @@ namespace MQTTnet.Core.Tests
|
||||
await s.StartAsync(new MqttServerOptions());
|
||||
|
||||
var willMessage = new MqttApplicationMessageBuilder().WithTopic("My/last/will").WithAtMostOnceQoS().Build();
|
||||
var c1 = await serverAdapter.ConnectTestClient(s, "c1");
|
||||
var c2 = await serverAdapter.ConnectTestClient(s, "c2", willMessage);
|
||||
var c1 = await serverAdapter.ConnectTestClient("c1");
|
||||
var c2 = await serverAdapter.ConnectTestClient("c2", willMessage);
|
||||
|
||||
c1.ApplicationMessageReceived += (_, __) => receivedMessagesCount++;
|
||||
await c1.SubscribeAsync(new TopicFilterBuilder().WithTopic("#").Build());
|
||||
@@ -90,8 +91,8 @@ namespace MQTTnet.Core.Tests
|
||||
{
|
||||
await s.StartAsync(new MqttServerOptions());
|
||||
|
||||
var c1 = await serverAdapter.ConnectTestClient(s, "c1");
|
||||
var c2 = await serverAdapter.ConnectTestClient(s, "c2");
|
||||
var c1 = await serverAdapter.ConnectTestClient("c1");
|
||||
var c2 = await serverAdapter.ConnectTestClient("c2");
|
||||
c1.ApplicationMessageReceived += (_, __) => receivedMessagesCount++;
|
||||
|
||||
var message = new MqttApplicationMessageBuilder().WithTopic("a").WithAtLeastOnceQoS().Build();
|
||||
@@ -149,7 +150,7 @@ namespace MQTTnet.Core.Tests
|
||||
{
|
||||
await s.StartAsync(new MqttServerOptions());
|
||||
|
||||
var c1 = await serverAdapter.ConnectTestClient(s, "c1");
|
||||
var c1 = await serverAdapter.ConnectTestClient("c1");
|
||||
|
||||
c1.ApplicationMessageReceived += (_, __) => receivedMessagesCount++;
|
||||
|
||||
@@ -167,6 +168,40 @@ namespace MQTTnet.Core.Tests
|
||||
Assert.AreEqual(1, receivedMessagesCount);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task MqttServer_RetainedMessagesFlow()
|
||||
{
|
||||
var retainedMessage = new MqttApplicationMessageBuilder().WithTopic("r").WithPayload("r").WithRetainFlag().Build();
|
||||
var serverAdapter = new TestMqttServerAdapter();
|
||||
var s = new MqttFactory().CreateMqttServer(new[] { serverAdapter }, new MqttNetLogger());
|
||||
await s.StartAsync(new MqttServerOptions());
|
||||
var c1 = await serverAdapter.ConnectTestClient("c1");
|
||||
await c1.PublishAsync(retainedMessage);
|
||||
Thread.Sleep(500);
|
||||
await c1.DisconnectAsync();
|
||||
Thread.Sleep(500);
|
||||
|
||||
var receivedMessages = 0;
|
||||
var c2 = await serverAdapter.ConnectTestClient("c2");
|
||||
c2.ApplicationMessageReceived += (_, e) =>
|
||||
{
|
||||
receivedMessages++;
|
||||
};
|
||||
|
||||
for (var i = 0; i < 5; i++)
|
||||
{
|
||||
await c2.UnsubscribeAsync("r");
|
||||
await Task.Delay(500);
|
||||
Assert.AreEqual(i, receivedMessages);
|
||||
|
||||
await c2.SubscribeAsync("r");
|
||||
await Task.Delay(500);
|
||||
Assert.AreEqual(i + 1, receivedMessages);
|
||||
}
|
||||
|
||||
await c2.DisconnectAsync();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task MqttServer_NoRetainedMessage()
|
||||
{
|
||||
@@ -179,11 +214,11 @@ namespace MQTTnet.Core.Tests
|
||||
{
|
||||
await s.StartAsync(new MqttServerOptions());
|
||||
|
||||
var c1 = await serverAdapter.ConnectTestClient(s, "c1");
|
||||
var c1 = await serverAdapter.ConnectTestClient("c1");
|
||||
await c1.PublishAsync(new MqttApplicationMessageBuilder().WithTopic("retained").WithPayload(new byte[3]).Build());
|
||||
await c1.DisconnectAsync();
|
||||
|
||||
var c2 = await serverAdapter.ConnectTestClient(s, "c2");
|
||||
var c2 = await serverAdapter.ConnectTestClient("c2");
|
||||
c2.ApplicationMessageReceived += (_, __) => receivedMessagesCount++;
|
||||
await c2.SubscribeAsync(new TopicFilterBuilder().WithTopic("retained").Build());
|
||||
|
||||
@@ -208,11 +243,11 @@ namespace MQTTnet.Core.Tests
|
||||
{
|
||||
await s.StartAsync(new MqttServerOptions());
|
||||
|
||||
var c1 = await serverAdapter.ConnectTestClient(s, "c1");
|
||||
var c1 = await serverAdapter.ConnectTestClient("c1");
|
||||
await c1.PublishAndWaitForAsync(s, new MqttApplicationMessageBuilder().WithTopic("retained").WithPayload(new byte[3]).WithRetainFlag().Build());
|
||||
await c1.DisconnectAsync();
|
||||
|
||||
var c2 = await serverAdapter.ConnectTestClient(s, "c2");
|
||||
var c2 = await serverAdapter.ConnectTestClient("c2");
|
||||
c2.ApplicationMessageReceived += (_, __) => receivedMessagesCount++;
|
||||
await c2.SubscribeAsync(new TopicFilterBuilder().WithTopic("retained").Build());
|
||||
|
||||
@@ -237,14 +272,14 @@ namespace MQTTnet.Core.Tests
|
||||
{
|
||||
await s.StartAsync(new MqttServerOptions());
|
||||
|
||||
var c1 = await serverAdapter.ConnectTestClient(s, "c1");
|
||||
var c1 = await serverAdapter.ConnectTestClient("c1");
|
||||
await c1.PublishAsync(new MqttApplicationMessageBuilder().WithTopic("retained").WithPayload(new byte[3]).WithRetainFlag().Build());
|
||||
await c1.PublishAsync(new MqttApplicationMessageBuilder().WithTopic("retained").WithPayload(new byte[0]).WithRetainFlag().Build());
|
||||
await c1.DisconnectAsync();
|
||||
|
||||
var c2 = await serverAdapter.ConnectTestClient(s, "c2");
|
||||
|
||||
var c2 = await serverAdapter.ConnectTestClient("c2");
|
||||
c2.ApplicationMessageReceived += (_, __) => receivedMessagesCount++;
|
||||
|
||||
|
||||
await Task.Delay(200);
|
||||
await c2.SubscribeAsync(new TopicFilter("retained", MqttQualityOfServiceLevel.AtMostOnce));
|
||||
await Task.Delay(500);
|
||||
@@ -271,7 +306,7 @@ namespace MQTTnet.Core.Tests
|
||||
|
||||
await s.StartAsync(options);
|
||||
|
||||
var c1 = await serverAdapter.ConnectTestClient(s, "c1");
|
||||
var c1 = await serverAdapter.ConnectTestClient("c1");
|
||||
|
||||
await c1.PublishAndWaitForAsync(s, new MqttApplicationMessageBuilder().WithTopic("retained").WithPayload(new byte[3]).WithRetainFlag().Build());
|
||||
await c1.DisconnectAsync();
|
||||
@@ -291,7 +326,7 @@ namespace MQTTnet.Core.Tests
|
||||
var options = new MqttServerOptions { Storage = storage };
|
||||
await s.StartAsync(options);
|
||||
|
||||
var c2 = await serverAdapter.ConnectTestClient(s, "c2");
|
||||
var c2 = await serverAdapter.ConnectTestClient("c2");
|
||||
c2.ApplicationMessageReceived += (_, __) => receivedMessagesCount++;
|
||||
await c2.SubscribeAsync(new TopicFilterBuilder().WithTopic("retained").Build());
|
||||
|
||||
@@ -322,8 +357,8 @@ namespace MQTTnet.Core.Tests
|
||||
|
||||
await s.StartAsync(options);
|
||||
|
||||
var c1 = await serverAdapter.ConnectTestClient(s, "c1");
|
||||
var c2 = await serverAdapter.ConnectTestClient(s, "c2");
|
||||
var c1 = await serverAdapter.ConnectTestClient("c1");
|
||||
var c2 = await serverAdapter.ConnectTestClient("c2");
|
||||
await c2.SubscribeAsync(new TopicFilterBuilder().WithTopic("test").Build());
|
||||
|
||||
var isIntercepted = false;
|
||||
@@ -357,8 +392,8 @@ namespace MQTTnet.Core.Tests
|
||||
{
|
||||
await s.StartAsync(new MqttServerOptions());
|
||||
|
||||
var c1 = await serverAdapter.ConnectTestClient(s, "c1");
|
||||
var c2 = await serverAdapter.ConnectTestClient(s, "c2");
|
||||
var c1 = await serverAdapter.ConnectTestClient("c1");
|
||||
var c2 = await serverAdapter.ConnectTestClient("c2");
|
||||
|
||||
c1.ApplicationMessageReceived += (_, e) =>
|
||||
{
|
||||
@@ -412,8 +447,8 @@ namespace MQTTnet.Core.Tests
|
||||
{
|
||||
await s.StartAsync(new MqttServerOptions());
|
||||
|
||||
var c1 = await serverAdapter.ConnectTestClient(s, "c1");
|
||||
var c2 = await serverAdapter.ConnectTestClient(s, "c2");
|
||||
var c1 = await serverAdapter.ConnectTestClient("c1");
|
||||
var c2 = await serverAdapter.ConnectTestClient("c2");
|
||||
|
||||
c1.ApplicationMessageReceived += (_, __) => receivedMessagesCount++;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user