public async Task NewMessageIsProcessedWell() { // Arrange var mockManagedMqttClient = new Mock <IManagedMqttClient>(); var mockManagedMqttClientOptions = new Mock <IManagedMqttClientOptions>(); var mockMqttClientFactory = new Mock <IMqttClientFactory>(); mockMqttClientFactory .Setup(m => m.CreateManagedMqttClient()) .Returns(mockManagedMqttClient.Object); var config = new MqttConfiguration("CustomConfig", mockManagedMqttClientOptions.Object); var mqttConnection = new MqttConnection(mockMqttClientFactory.Object, config, _mockLogger.Object); IMqttMessage receivedMessage = null; mqttConnection.OnMessageEventHandler += (MqttMessageReceivedEventArgs arg) => { receivedMessage = arg.Message; return(Task.CompletedTask); }; // Act await mqttConnection.StartAsync(); mockManagedMqttClient.Raise(x => x.ApplicationMessageReceived += null, new MqttApplicationMessageReceivedEventArgs("ClientId", DefaultMessage)); // Assert Assert.NotNull(receivedMessage); Assert.Equal(DefaultMessage.Topic, receivedMessage.Topic); Assert.Equal(DefaultMessage.Retain, receivedMessage.Retain); Assert.Equal(DefaultMessage.QualityOfServiceLevel.ToString(), receivedMessage.QosLevel.ToString()); Assert.Equal(DefaultMessage.Payload, receivedMessage.GetMessage()); }
public async Task StartAsyncSubscribesToTopics() { // Arrange var mockManagedMqttClient = new Mock <IManagedMqttClient>(); var mockManagedMqttClientOptions = new Mock <IManagedMqttClientOptions>(); var mockMqttClientFactory = new Mock <IMqttClientFactory>(); mockMqttClientFactory .Setup(m => m.CreateManagedMqttClient()) .Returns(mockManagedMqttClient.Object); mockManagedMqttClient .Setup(m => m.StartAsync(It.Is <IManagedMqttClientOptions>(y => y == mockManagedMqttClientOptions.Object))) .Returns(Task.CompletedTask); var config = new MqttConfiguration("CustomConfig", mockManagedMqttClientOptions.Object); var mqttConnection = new MqttConnection(mockMqttClientFactory.Object, config, _mockLogger.Object); // Act await mqttConnection.StartAsync(); mockManagedMqttClient.Raise(x => x.Connected += null, new MqttClientConnectedEventArgs(true)); // Assert Assert.Equal(ConnectionState.Connected, mqttConnection.ConnectionState); mockMqttClientFactory.VerifyAll(); mockManagedMqttClient.VerifyAll(); }
public async Task AddAsync(IMqttMessage item, CancellationToken cancellationToken = default) { if (_mqttConnection.ConnectionState != ConnectionState.Connected) { IProcesMqttMessage messageProcessor = null; // this is only for publising, we dont expect incoming messages await _mqttConnection.StartAsync(messageProcessor).ConfigureAwait(false); for (var i = 0; i < 100; i++) { if (_mqttConnection.ConnectionState != ConnectionState.Connected) { await Task.Delay(50).ConfigureAwait(false); } } } var qos = (MQTTnet.Protocol.MqttQualityOfServiceLevel)Enum.Parse(typeof(MQTTnet.Protocol.MqttQualityOfServiceLevel), item.QosLevel.ToString()); var mqttApplicationMessage = new MqttApplicationMessage { Topic = item.Topic, Payload = item.GetMessage(), QualityOfServiceLevel = qos, Retain = item.Retain }; await _mqttConnection.PublishAsync(mqttApplicationMessage).ConfigureAwait(false); }
public async Task NewMessageIsProcessed() { // Arrange var mockManagedMqttClient = new Mock <IManagedMqttClient>(); var mockManagedMqttClientOptions = new Mock <IManagedMqttClientOptions>(); var mockMqttClientFactory = new Mock <IManagedMqttClientFactory>(); var messageProcessor = new Mock <IProcesMqttMessage>(); mockMqttClientFactory .Setup(m => m.CreateManagedMqttClient()) .Returns(mockManagedMqttClient.Object); messageProcessor.Setup(x => x.OnMessage(It.IsAny <MqttMessageReceivedEventArgs>())).Returns(Task.CompletedTask); var config = new MqttConfiguration("CustomConfig", mockManagedMqttClientOptions.Object); var mqttConnection = new MqttConnection(mockMqttClientFactory.Object, config, _mockLogger.Object); // Act await mqttConnection.StartAsync(messageProcessor.Object); await mqttConnection.HandleApplicationMessageReceivedAsync(new MqttApplicationMessageReceivedEventArgs("ClientId", DefaultMessage)); // Assert messageProcessor.Verify(x => x.OnMessage(It.Is <MqttMessageReceivedEventArgs>(y => y.Message.Topic == DefaultMessage.Topic))); messageProcessor.Verify(x => x.OnMessage(It.Is <MqttMessageReceivedEventArgs>(y => y.Message.Retain == DefaultMessage.Retain))); messageProcessor.Verify(x => x.OnMessage(It.Is <MqttMessageReceivedEventArgs>(y => y.Message.QosLevel.ToString() == DefaultMessage.QualityOfServiceLevel.ToString()))); messageProcessor.Verify(x => x.OnMessage(It.Is <MqttMessageReceivedEventArgs>(y => y.Message.GetMessage() == DefaultMessage.Payload))); }
public async Task StartAsyncSubscribesToTopics() { // Arrange var mockManagedMqttClient = new Mock <IManagedMqttClient>(); var mockManagedMqttClientOptions = new Mock <IManagedMqttClientOptions>(); var mockMqttClientFactory = new Mock <IManagedMqttClientFactory>(); var messageProcessor = new Mock <IProcesMqttMessage>(); mockMqttClientFactory .Setup(m => m.CreateManagedMqttClient()) .Returns(mockManagedMqttClient.Object); mockManagedMqttClient .Setup(m => m.StartAsync(It.Is <IManagedMqttClientOptions>(y => y == mockManagedMqttClientOptions.Object))) .Returns(Task.CompletedTask); messageProcessor.Setup(x => x.OnMessage(It.IsAny <MqttMessageReceivedEventArgs>())).Returns(Task.CompletedTask); var config = new MqttConfiguration("CustomConfig", mockManagedMqttClientOptions.Object); var mqttConnection = new MqttConnection(mockMqttClientFactory.Object, config, _mockLogger.Object); // Act await mqttConnection.StartAsync(messageProcessor.Object); await mqttConnection.HandleConnectedAsync(new MqttClientConnectedEventArgs(new MqttClientAuthenticateResult { IsSessionPresent = true, ResultCode = MqttClientConnectResultCode.Success })); // Assert Assert.Equal(ConnectionState.Connected, mqttConnection.ConnectionState); mockMqttClientFactory.VerifyAll(); mockManagedMqttClient.VerifyAll(); }
public async Task AddAsync(IMqttMessage item, CancellationToken cancellationToken = default(CancellationToken)) { if (_mqttConnection.ConnectionState != ConnectionState.Connected) { await _mqttConnection.StartAsync().ConfigureAwait(false); } var qos = (MQTTnet.Protocol.MqttQualityOfServiceLevel)Enum.Parse(typeof(MQTTnet.Protocol.MqttQualityOfServiceLevel), item.QosLevel.ToString()); var mqttApplicationMessage = new MqttApplicationMessage(item.Topic, item.GetMessage(), qos, item.Retain); await _mqttConnection.PublishAsync(mqttApplicationMessage).ConfigureAwait(false); }