using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.VisualStudio.TestTools.UnitTesting; using MQTTnet.Client; using MQTTnet.Formatter; using MQTTnet.Tests.Mockups; namespace MQTTnet.Tests { [TestClass] public class Server_TopicAlias_Tests { [TestMethod] public async Task Publish_After_Client_Connects() { using (var testEnvironment = new TestEnvironment()) { await testEnvironment.StartServerAsync(); var receivedTopics = new List(); var c1 = await testEnvironment.ConnectClientAsync(options => options.WithProtocolVersion(MqttProtocolVersion.V500)); c1.UseApplicationMessageReceivedHandler(e => { lock (receivedTopics) { receivedTopics.Add(e.ApplicationMessage.Topic); } }); await c1.SubscribeAsync("#"); var c2 = await testEnvironment.ConnectClientAsync(options => options.WithProtocolVersion(MqttProtocolVersion.V500)); var message = new MqttApplicationMessage { Topic = "this_is_the_topic", TopicAlias = 22 }; await c2.PublishAsync(message); message.Topic = null; await c2.PublishAsync(message); await c2.PublishAsync(message); await Task.Delay(500); Assert.AreEqual(3, receivedTopics.Count); CollectionAssert.AllItemsAreNotNull(receivedTopics); Assert.IsTrue(receivedTopics.All(t => t.Equals("this_is_the_topic"))); } } } }