public async Task ExecuteAsync_WithDefaultApplication_BehavesAsExpected() { using var mqttConsumerService = CreateMqttConsumerService(s => { s.Host = "mqtt.local"; s.Port = 1884; }); var testApplication = MqttApplicationHelper.CreateHandlesAllRequests(); Assert.Collection( testApplication.TopicFilters, i => Assert.Equal("#", i.Topic)); MockMqttApplicationProvider .SetupGet(x => x.Current) .Returns(testApplication); MockManagedMqttClient .Setup(c => c.StartAsync(MockManagedMqttClientOptions.Object)) .Returns(Task.CompletedTask) .Verifiable(); MockManagedMqttClient .Setup(c => c.SubscribeAsync(testApplication.TopicFilters)) .Returns(Task.CompletedTask) .Verifiable(); await mqttConsumerService.StartAsync(CancellationToken.None); Assert.Collection( Logger.LogEntries, l => { Assert.Equal("Connecting to MQTT broker at mqtt.local:1884...", l.Message); }); MockManagedMqttClient.VerifyAll(); MockManagedMqttClient .Setup(c => c.StopAsync()) .Returns(Task.CompletedTask) .Verifiable(); await mqttConsumerService.StopAsync(CancellationToken.None); MockMqttApplicationProvider.VerifyAll(); MockManagedMqttClient.VerifyAll(); Assert.Collection( Logger.LogEntries, l => { Assert.Equal("Connecting to MQTT broker at mqtt.local:1884...", l.Message); }, l => { Assert.Equal("Shutting down MQTT broker connection...", l.Message); }); }
public async Task ExecuteAsync_WithOnlineMessageAndDefaultApplication_BehavesAsExpected() { using var mqttConsumerService = CreateMqttConsumerService(s => { s.Host = "mqtt.local"; s.Port = 1884; s.OnlineMessage = new MqttMessageSettings { Topic = "test/availability", Payload = "online", QualityOfServiceLevel = MqttQualityOfServiceLevel.ExactlyOnce, Retain = true }; }); var testApplication = MqttApplicationHelper.CreateHandlesAllRequests(); Assert.Collection( testApplication.TopicFilters, i => Assert.Equal("#", i.Topic)); MockMqttApplicationProvider .SetupGet(x => x.Current) .Returns(testApplication); MockManagedMqttClient .Setup(c => c.StartAsync(MockManagedMqttClientOptions.Object)) .Returns(Task.CompletedTask) .Verifiable(); MockManagedMqttClient .Setup(c => c.SubscribeAsync(testApplication.TopicFilters)) .Returns(Task.CompletedTask) .Verifiable(); MockManagedMqttClient .Setup( c => c.PublishAsync( It.Is <MqttApplicationMessage>( m => m.Topic.Equals("test/availability") && m.Payload.SequenceEqual(Encoding.UTF8.GetBytes("online")) && m.QualityOfServiceLevel == MqttQualityOfServiceLevel.ExactlyOnce && m.Retain), It.Is <CancellationToken>(ct => !ct.IsCancellationRequested) )) .ReturnsAsync(new MqttClientPublishResult()) .Verifiable(); await mqttConsumerService.StartAsync(CancellationToken.None); Assert.Collection( Logger.LogEntries, l => { Assert.Equal("Connecting to MQTT broker at mqtt.local:1884...", l.Message); }, l => { Assert.Equal("Sending online message to test/availability", l.Message); }); MockManagedMqttClient.VerifyAll(); MockManagedMqttClient .Setup(c => c.StopAsync()) .Returns(Task.CompletedTask) .Verifiable(); await mqttConsumerService.StopAsync(CancellationToken.None); MockMqttApplicationProvider.VerifyAll(); MockManagedMqttClient.VerifyAll(); Assert.Collection( Logger.LogEntries, l => { Assert.Equal("Connecting to MQTT broker at mqtt.local:1884...", l.Message); }, l => { Assert.Equal("Sending online message to test/availability", l.Message); }, l => { Assert.Equal("Shutting down MQTT broker connection...", l.Message); }); }