示例#1
0
        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>());
        }