// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.Linq; using System.Threading.Tasks; using Microsoft.VisualStudio.TestTools.UnitTesting; using MQTTnet.Exceptions; using MQTTnet.Formatter; using MQTTnet.Internal; using MQTTnet.Server; namespace MQTTnet.Tests.Server; // ReSharper disable InconsistentNaming [TestClass] public sealed class Unsubscribe_Tests : BaseTestClass { [TestMethod] public Task Disconnect_While_Unsubscribing() { return Assert.ThrowsExactlyAsync(async () => { using var testEnvironment = CreateTestEnvironment(); var server = await testEnvironment.StartServer(); // The client will be disconnected directly after subscribing! server.ClientUnsubscribedTopicAsync += ev => server.DisconnectClientAsync(ev.ClientId); var client = await testEnvironment.ConnectClient(); await client.SubscribeAsync("#"); await client.UnsubscribeAsync("#"); }); } [TestMethod] public async Task Intercept_Unsubscribe_With_User_Properties() { using var testEnvironment = CreateTestEnvironment(MqttProtocolVersion.V500); var server = await testEnvironment.StartServer(); InterceptingUnsubscriptionEventArgs eventArgs = null; server.InterceptingUnsubscriptionAsync += e => { eventArgs = e; return CompletedTask.Instance; }; var client = await testEnvironment.ConnectClient(); var unsubscribeOptions = testEnvironment.ClientFactory.CreateUnsubscribeOptionsBuilder().WithTopicFilter("X").WithUserProperty("A", "1").Build(); await client.UnsubscribeAsync(unsubscribeOptions); CollectionAssert.AreEqual(unsubscribeOptions.UserProperties.ToList(), eventArgs.UserProperties); } }