DisconnectAsync_CalledFromMultipleSenders_ClientDisconnectedWhenAllSendersDisconnect() { var sender1 = new object(); var sender2 = new object(); var mqttClientConfig = new MqttClientConfig(); var mqttClient = Substitute.For <IMqttClient>(); mqttClient.ConnectAsync(Arg.Any <IMqttClientOptions>(), Arg.Any <CancellationToken>()) .ReturnsForAnyArgs(_ => Task.FromResult(new MqttClientAuthenticateResult())); var clientWrapper = new MqttClientWrapper( mqttClient, mqttClientConfig, Substitute.For <IBrokerCallbacksInvoker>(), Substitute.For <ISilverbackLogger>()); await clientWrapper.ConnectAsync(sender1); await clientWrapper.ConnectAsync(sender2); mqttClient.IsConnected.Returns(true); await clientWrapper.DisconnectAsync(sender1); await mqttClient.Received(0).DisconnectAsync( Arg.Any <MqttClientDisconnectOptions>(), Arg.Any <CancellationToken>()); await clientWrapper.DisconnectAsync(sender2); await mqttClient.Received(1).DisconnectAsync( Arg.Any <MqttClientDisconnectOptions>(), Arg.Any <CancellationToken>()); }
public InboundMessagesHandler(MqttClientWrapper mqttClient, ICommandBus commandBus, ICommandsFactory commandsFactory, IOutboundEventBus outboundEventBus) { mqttClient.OnMqttMessageReceived += (_, args) => { try { var decodedMessage = DecodeMqttMessage(args); var command = commandsFactory.Create(decodedMessage.Name, decodedMessage.Payload); var errors = command.Validate(); if (errors.Length > 0) { outboundEventBus.Send(new CommandResultEvent(command.CorrelationId, StatusCode.ValidationError, command.GetType().Name, errors.SerializeToString())); return; } commandBus.Send(command); } catch (Exception e) { outboundEventBus.Send(new ErrorEvent( $"Exception during handling inbound message: {e.Message}", ErrorLevel.Warning)); } }; }
public async Task ConnectAsync_CalledFromMultipleSenders_ClientConnectedOnce() { var sender1 = new object(); var sender2 = new object(); var mqttClientConfig = new MqttClientConfig(); var mqttClient = Substitute.For <IMqttClient>(); mqttClient.ConnectAsync(Arg.Any <IMqttClientOptions>(), Arg.Any <CancellationToken>()) .ReturnsForAnyArgs(_ => Task.FromResult(new MqttClientAuthenticateResult())); var clientWrapper = new MqttClientWrapper( mqttClient, mqttClientConfig, Substitute.For <IBrokerCallbacksInvoker>(), Substitute.For <ISilverbackLogger>()); var task1 = clientWrapper.ConnectAsync(sender1); var task2 = clientWrapper.ConnectAsync(sender2); task2.Should().BeSameAs(task1); await task1; await mqttClient.Received(1).ConnectAsync( Arg.Any <IMqttClientOptions>(), Arg.Any <CancellationToken>()); await mqttClient.Received(1).ConnectAsync( mqttClientConfig.GetMqttClientOptions(), Arg.Any <CancellationToken>()); }
public static void LogConnectionLost( this ISilverbackLogger logger, MqttClientWrapper client) => ConnectionLost( logger.InnerLogger, client.ClientConfig.ClientId, null);
public static void LogConnectRetryError( this ISilverbackLogger logger, MqttClientWrapper client, Exception exception) => ConnectRetryError( logger.InnerLogger, client.ClientConfig.ClientId, exception);
public async Task DisconnectAsync_CalledWhenNotConnected_ClientDisconnectNotCalled() { var mqttClient = Substitute.For <IMqttClient>(); mqttClient.ConnectAsync(Arg.Any <IMqttClientOptions>(), Arg.Any <CancellationToken>()) .ReturnsForAnyArgs(_ => Task.FromResult(new MqttClientAuthenticateResult())); mqttClient.IsConnected.Returns(false); var clientWrapper = new MqttClientWrapper( mqttClient, new MqttClientConfig(), Substitute.For <IBrokerCallbacksInvoker>(), Substitute.For <ISilverbackLogger>()); await clientWrapper.DisconnectAsync(new object()); await mqttClient.Received(0).DisconnectAsync( Arg.Any <MqttClientDisconnectOptions>(), Arg.Any <CancellationToken>()); }
public MqttOutboundEventBus(MqttClientWrapper mqttClient) { _mqttClient = mqttClient; }