using Microsoft.AspNetCore.Connections; using Microsoft.VisualStudio.TestTools.UnitTesting; using MQTTnet.AspNetCore.Tests.Mockups; using MQTTnet.Exceptions; using MQTTnet.Packets; using System; using System.Linq; using System.Threading; using System.Threading.Tasks; using MQTTnet.Formatter; namespace MQTTnet.AspNetCore.Tests { [TestClass] public class MqttConnectionContextTest { [TestMethod] public async Task TestReceivePacketAsyncThrowsWhenReaderCompleted() { var serializer = new MqttPacketFormatterAdapter(MqttProtocolVersion.V311); var pipe = new DuplexPipeMockup(); var connection = new DefaultConnectionContext(); connection.Transport = pipe; var ctx = new MqttConnectionContext(serializer, connection); pipe.Receive.Writer.Complete(); await Assert.ThrowsExceptionAsync(() => ctx.ReceivePacketAsync(TimeSpan.Zero, CancellationToken.None)); } [TestMethod] public async Task TestParallelWrites() { var serializer = new MqttPacketFormatterAdapter(MqttProtocolVersion.V311); var pipe = new DuplexPipeMockup(); var connection = new DefaultConnectionContext(); connection.Transport = pipe; var ctx = new MqttConnectionContext(serializer, connection); var tasks = Enumerable.Range(1, 10).Select(_ => Task.Run(async () => { for (int i = 0; i < 100; i++) { await ctx.SendPacketAsync(new MqttPublishPacket(), TimeSpan.Zero, CancellationToken.None).ConfigureAwait(false); } })); await Task.WhenAll(tasks).ConfigureAwait(false); } } }