Ejemplo n.º 1
0
        public async Task CreateFromEnvironmentTest(
            Option <UpstreamProtocol> upstreamProtocol,
            Option <IWebProxy> webProxy,
            string productInfo)
        {
            // Arrange
            ITransportSettings receivedTransportSettings = null;

            var sdkModuleClient = new Mock <ISdkModuleClient>();

            var sdkModuleClientProvider = new Mock <ISdkModuleClientProvider>();

            sdkModuleClientProvider.Setup(s => s.GetSdkModuleClient(It.IsAny <ITransportSettings>()))
            .Callback <ITransportSettings>(t => receivedTransportSettings = t)
            .ReturnsAsync(sdkModuleClient.Object);

            bool     closeOnIdleTimeout            = false;
            TimeSpan idleTimeout                   = TimeSpan.FromMinutes(5);
            ConnectionStatusChangesHandler handler = (status, reason) => { };

            // Act
            var moduleClientProvider = new ModuleClientProvider(
                sdkModuleClientProvider.Object,
                upstreamProtocol,
                webProxy,
                productInfo,
                closeOnIdleTimeout,
                idleTimeout,
                false);
            IModuleClient moduleClient = await moduleClientProvider.Create(handler);

            // Assert
            Assert.NotNull(moduleClient);
            sdkModuleClientProvider.Verify(s => s.GetSdkModuleClient(It.IsAny <ITransportSettings>()), Times.Once);

            sdkModuleClient.Verify(s => s.SetProductInfo(productInfo), Times.Once);

            Assert.NotNull(receivedTransportSettings);
            UpstreamProtocol up = upstreamProtocol.GetOrElse(UpstreamProtocol.Amqp);

            Assert.Equal(up, moduleClient.UpstreamProtocol);
            switch (up)
            {
            case UpstreamProtocol.Amqp:
            case UpstreamProtocol.AmqpWs:
                var amqpTransportSettings = receivedTransportSettings as AmqpTransportSettings;
                Assert.NotNull(amqpTransportSettings);
                webProxy.ForEach(w => Assert.Equal(w, amqpTransportSettings.Proxy));
                break;

            case UpstreamProtocol.Mqtt:
            case UpstreamProtocol.MqttWs:
                var mqttTransportSettings = receivedTransportSettings as MqttTransportSettings;
                Assert.NotNull(mqttTransportSettings);
                webProxy.ForEach(w => Assert.Equal(w, mqttTransportSettings.Proxy));
                break;
            }

            sdkModuleClient.Verify(s => s.OpenAsync(), Times.Once);
        }
Ejemplo n.º 2
0
        public async Task CreateFromEnvironment_NoRuntimeInfoProvider(
            Option <UpstreamProtocol> upstreamProtocol,
            Option <IWebProxy> webProxy,
            string productInfo)
        {
            // Arrange
            ITransportSettings receivedTransportSettings = null;

            var sdkModuleClient = new Mock <ISdkModuleClient>();

            var sdkModuleClientProvider = new Mock <ISdkModuleClientProvider>();

            sdkModuleClientProvider.Setup(s => s.GetSdkModuleClient(It.IsAny <ITransportSettings>()))
            .Callback <ITransportSettings>(t => receivedTransportSettings = t)
            .ReturnsAsync(sdkModuleClient.Object);

            bool     closeOnIdleTimeout            = false;
            TimeSpan idleTimeout                   = TimeSpan.FromMinutes(5);
            ConnectionStatusChangesHandler handler = (status, reason) => { };

            // Act
            var moduleClientProvider = new ModuleClientProvider(
                sdkModuleClientProvider.Object,
                Option.None <Task <IRuntimeInfoProvider> >(),
                upstreamProtocol,
                webProxy,
                productInfo,
                closeOnIdleTimeout,
                idleTimeout,
                false);
            IModuleClient moduleClient = await moduleClientProvider.Create(handler);

            // Write product info explicitly
            sdkModuleClient.Verify(s => s.SetProductInfo(productInfo), Times.Once);
        }
Ejemplo n.º 3
0
        public async Task CreateFromEnvironmentTest(
            Option <UpstreamProtocol> upstreamProtocol,
            Option <IWebProxy> webProxy,
            string productInfo)
        {
            // Arrange
            ITransportSettings receivedTransportSettings = null;

            var sdkModuleClient     = new Mock <ISdkModuleClient>();
            var runtimeInfoProvider = new Mock <IRuntimeInfoProvider>();
            var systemInfo          = new SystemInfo("foo", "bar", "baz");

            runtimeInfoProvider.Setup(p => p.GetSystemInfo(CancellationToken.None))
            .ReturnsAsync(systemInfo);

            var sdkModuleClientProvider = new Mock <ISdkModuleClientProvider>();

            sdkModuleClientProvider.Setup(s => s.GetSdkModuleClient(It.IsAny <ITransportSettings>()))
            .Callback <ITransportSettings>(t => receivedTransportSettings = t)
            .ReturnsAsync(sdkModuleClient.Object);

            bool     closeOnIdleTimeout            = false;
            TimeSpan idleTimeout                   = TimeSpan.FromMinutes(5);
            ConnectionStatusChangesHandler handler = (status, reason) => { };

            // Act
            var moduleClientProvider = new ModuleClientProvider(
                sdkModuleClientProvider.Object,
                Option.Some(Task.FromResult(runtimeInfoProvider.Object)),
                upstreamProtocol,
                webProxy,
                productInfo,
                closeOnIdleTimeout,
                idleTimeout,
                false);
            IModuleClient moduleClient = await moduleClientProvider.Create(handler);

            // Assert
            Assert.NotNull(moduleClient);
            sdkModuleClientProvider.Verify(s => s.GetSdkModuleClient(It.IsAny <ITransportSettings>()), Times.Once);

            // Write product info explicitly
            sdkModuleClient.Verify(s => s.SetProductInfo($"{productInfo} (kernel_name=foo;cpu_architecture=bar;)"), Times.Once);

            Assert.NotNull(receivedTransportSettings);
            UpstreamProtocol up = upstreamProtocol.GetOrElse(UpstreamProtocol.Amqp);

            Assert.Equal(up, moduleClient.UpstreamProtocol);
            switch (up)
            {
            case UpstreamProtocol.Amqp:
            case UpstreamProtocol.AmqpWs:
                var amqpTransportSettings = receivedTransportSettings as AmqpTransportSettings;
                Assert.NotNull(amqpTransportSettings);

                if (up == UpstreamProtocol.AmqpWs)
                {
                    webProxy.ForEach(w => Assert.Equal(w, amqpTransportSettings.Proxy));
                }

                break;

            case UpstreamProtocol.Mqtt:
            case UpstreamProtocol.MqttWs:
                var mqttTransportSettings = receivedTransportSettings as MqttTransportSettings;
                Assert.NotNull(mqttTransportSettings);

                if (up == UpstreamProtocol.MqttWs)
                {
                    webProxy.ForEach(w => Assert.Equal(w, mqttTransportSettings.Proxy));
                }

                break;
            }

            sdkModuleClient.Verify(s => s.OpenAsync(), Times.Once);
        }