From 6102e31b660296054e117de3787c149ac1bc627e Mon Sep 17 00:00:00 2001 From: Varun Puranik Date: Mon, 26 Nov 2018 10:45:45 -0800 Subject: [PATCH] EdgeHub: Make Device/Module Client operation timeout configurable (#542) * Make operation timeout configurable * Fix setting client value * Fix tests --- .../ClientTokenCloudConnection.cs | 12 ++- .../CloudConnection.cs | 21 +++-- .../CloudConnectionProvider.cs | 14 ++- .../DependencyManager.cs | 5 +- .../modules/RoutingModule.cs | 8 +- .../ClientTokenCloudConnectionTest.cs | 64 +++++++++----- .../CloudConnectionProviderTest.cs | 15 ++-- .../CloudConnectionTest.cs | 6 +- .../CloudProxyTest.cs | 3 +- .../ConnectionManagerTest.cs | 85 ++++++++++++++----- .../DependencyManager.cs | 3 +- .../EdgeHubConnectionTest.cs | 3 +- 12 files changed, 165 insertions(+), 74 deletions(-) diff --git a/edge-hub/src/Microsoft.Azure.Devices.Edge.Hub.CloudProxy/ClientTokenCloudConnection.cs b/edge-hub/src/Microsoft.Azure.Devices.Edge.Hub.CloudProxy/ClientTokenCloudConnection.cs index 6ff306b6640..3dd48439221 100644 --- a/edge-hub/src/Microsoft.Azure.Devices.Edge.Hub.CloudProxy/ClientTokenCloudConnection.cs +++ b/edge-hub/src/Microsoft.Azure.Devices.Edge.Hub.CloudProxy/ClientTokenCloudConnection.cs @@ -35,7 +35,8 @@ class ClientTokenCloudConnection : CloudConnection, IClientTokenCloudConnection IClientProvider clientProvider, ICloudListener cloudListener, TimeSpan idleTimeout, - bool closeOnIdleTimeout) + bool closeOnIdleTimeout, + TimeSpan operationTimeout) : base( identity, connectionStatusChangedHandler, @@ -44,7 +45,8 @@ class ClientTokenCloudConnection : CloudConnection, IClientTokenCloudConnection clientProvider, cloudListener, idleTimeout, - closeOnIdleTimeout) + closeOnIdleTimeout, + operationTimeout) { } @@ -56,7 +58,8 @@ public static async Task Create( IClientProvider clientProvider, ICloudListener cloudListener, TimeSpan idleTimeout, - bool closeOnIdleTimeout) + bool closeOnIdleTimeout, + TimeSpan operationTimeout) { Preconditions.CheckNotNull(tokenCredentials, nameof(tokenCredentials)); var cloudConnection = new ClientTokenCloudConnection( @@ -67,7 +70,8 @@ public static async Task Create( clientProvider, cloudListener, idleTimeout, - closeOnIdleTimeout); + closeOnIdleTimeout, + operationTimeout); ITokenProvider tokenProvider = new ClientTokenBasedTokenProvider(tokenCredentials, cloudConnection); ICloudProxy cloudProxy = await cloudConnection.CreateNewCloudProxyAsync(tokenProvider); cloudConnection.cloudProxy = Option.Some(cloudProxy); diff --git a/edge-hub/src/Microsoft.Azure.Devices.Edge.Hub.CloudProxy/CloudConnection.cs b/edge-hub/src/Microsoft.Azure.Devices.Edge.Hub.CloudProxy/CloudConnection.cs index 0c88484562d..e19d5d78ff6 100644 --- a/edge-hub/src/Microsoft.Azure.Devices.Edge.Hub.CloudProxy/CloudConnection.cs +++ b/edge-hub/src/Microsoft.Azure.Devices.Edge.Hub.CloudProxy/CloudConnection.cs @@ -17,14 +17,13 @@ namespace Microsoft.Azure.Devices.Edge.Hub.CloudProxy /// class CloudConnection : ICloudConnection { - const uint OperationTimeoutMilliseconds = 20 * 1000; // 20 secs - readonly ITransportSettings[] transportSettingsList; readonly IMessageConverterProvider messageConverterProvider; readonly IClientProvider clientProvider; readonly ICloudListener cloudListener; readonly TimeSpan idleTimeout; readonly bool closeOnIdleTimeout; + readonly TimeSpan operationTimeout; Option cloudProxy; protected CloudConnection( @@ -35,7 +34,8 @@ protected CloudConnection( IClientProvider clientProvider, ICloudListener cloudListener, TimeSpan idleTimeout, - bool closeOnIdleTimeout) + bool closeOnIdleTimeout, + TimeSpan operationTimeout) { this.Identity = Preconditions.CheckNotNull(identity, nameof(identity)); this.ConnectionStatusChangedHandler = connectionStatusChangedHandler; @@ -46,6 +46,7 @@ protected CloudConnection( this.idleTimeout = idleTimeout; this.closeOnIdleTimeout = closeOnIdleTimeout; this.cloudProxy = Option.None(); + this.operationTimeout = operationTimeout; } public static async Task Create( @@ -57,7 +58,8 @@ public static async Task Create( ICloudListener cloudListener, ITokenProvider tokenProvider, TimeSpan idleTimeout, - bool closeOnIdleTimeout) + bool closeOnIdleTimeout, + TimeSpan operationTimeout) { Preconditions.CheckNotNull(tokenProvider, nameof(tokenProvider)); var cloudConnection = new CloudConnection( @@ -68,7 +70,8 @@ public static async Task Create( clientProvider, cloudListener, idleTimeout, - closeOnIdleTimeout); + closeOnIdleTimeout, + operationTimeout); ICloudProxy cloudProxy = await cloudConnection.CreateNewCloudProxyAsync(tokenProvider); cloudConnection.cloudProxy = Option.Some(cloudProxy); return cloudConnection; @@ -109,7 +112,7 @@ async Task ConnectToIoTHub(ITokenProvider newTokenProvider) Events.AttemptingConnectionWithTransport(this.transportSettingsList, this.Identity); IClient client = this.clientProvider.Create(this.Identity, newTokenProvider, this.transportSettingsList); - client.SetOperationTimeoutInMilliseconds(OperationTimeoutMilliseconds); + client.SetOperationTimeoutInMilliseconds((uint)this.operationTimeout.TotalMilliseconds); client.SetConnectionStatusChangedHandler(this.InternalConnectionStatusChangesHandler); // TODO: Add support for ProductInfo @@ -119,7 +122,7 @@ async Task ConnectToIoTHub(ITokenProvider newTokenProvider) //} await client.OpenAsync(); - Events.CreateDeviceClientSuccess(this.transportSettingsList, OperationTimeoutMilliseconds, this.Identity); + Events.CreateDeviceClientSuccess(this.transportSettingsList, this.operationTimeout, this.Identity); return client; } @@ -181,12 +184,12 @@ public static void AttemptingConnectionWithTransport(ITransportSettings[] transp Log.LogInformation((int)EventIds.AttemptingTransport, $"Attempting to connect to IoT Hub for client {identity.Id} via {transportType}..."); } - public static void CreateDeviceClientSuccess(ITransportSettings[] transportSettings, uint timeout, IIdentity identity) + public static void CreateDeviceClientSuccess(ITransportSettings[] transportSettings, TimeSpan timeout, IIdentity identity) { string transportType = transportSettings.Length == 1 ? TransportName(transportSettings[0].GetTransportType()) : transportSettings.Select(t => TransportName(t.GetTransportType())).Join("/"); - Log.LogInformation((int)EventIds.TransportConnected, $"Created cloud proxy for client {identity.Id} via {transportType}, with client operation timeout {timeout}."); + Log.LogInformation((int)EventIds.TransportConnected, $"Created cloud proxy for client {identity.Id} via {transportType}, with client operation timeout {timeout.TotalSeconds} seconds."); } } } diff --git a/edge-hub/src/Microsoft.Azure.Devices.Edge.Hub.CloudProxy/CloudConnectionProvider.cs b/edge-hub/src/Microsoft.Azure.Devices.Edge.Hub.CloudProxy/CloudConnectionProvider.cs index 022ac2a86b5..76c00e71edf 100644 --- a/edge-hub/src/Microsoft.Azure.Devices.Edge.Hub.CloudProxy/CloudConnectionProvider.cs +++ b/edge-hub/src/Microsoft.Azure.Devices.Edge.Hub.CloudProxy/CloudConnectionProvider.cs @@ -36,6 +36,7 @@ public class CloudConnectionProvider : ICloudConnectionProvider readonly bool closeOnIdleTimeout; readonly ICredentialsCache credentialsCache; readonly IIdentity edgeHubIdentity; + readonly TimeSpan operationTimeout; Option edgeHub; public CloudConnectionProvider(IMessageConverterProvider messageConverterProvider, @@ -47,7 +48,8 @@ public CloudConnectionProvider(IMessageConverterProvider messageConverterProvide ICredentialsCache credentialsCache, IIdentity edgeHubIdentity, TimeSpan idleTimeout, - bool closeOnIdleTimeout) + bool closeOnIdleTimeout, + TimeSpan operationTimeout) { Preconditions.CheckRange(connectionPoolSize, 1, nameof(connectionPoolSize)); this.messageConverterProvider = Preconditions.CheckNotNull(messageConverterProvider, nameof(messageConverterProvider)); @@ -60,6 +62,7 @@ public CloudConnectionProvider(IMessageConverterProvider messageConverterProvide this.deviceScopeIdentitiesCache = Preconditions.CheckNotNull(deviceScopeIdentitiesCache, nameof(deviceScopeIdentitiesCache)); this.credentialsCache = Preconditions.CheckNotNull(credentialsCache, nameof(credentialsCache)); this.edgeHubIdentity = Preconditions.CheckNotNull(edgeHubIdentity, nameof(edgeHubIdentity)); + this.operationTimeout = operationTimeout; } public void BindEdgeHub(IEdgeHub edgeHubInstance) @@ -136,7 +139,8 @@ public async Task> Connect(IClientCredentials clientCreden cloudListener, this.edgeHubTokenProvider, this.idleTimeout, - this.closeOnIdleTimeout); + this.closeOnIdleTimeout, + this.operationTimeout); Events.SuccessCreatingCloudConnection(clientCredentials.Identity); return Try.Success(cc); } @@ -150,7 +154,8 @@ public async Task> Connect(IClientCredentials clientCreden this.clientProvider, cloudListener, this.idleTimeout, - this.closeOnIdleTimeout); + this.closeOnIdleTimeout, + this.operationTimeout); Events.SuccessCreatingCloudConnection(clientCredentials.Identity); return Try.Success(cc); } @@ -188,7 +193,8 @@ public async Task> Connect(IIdentity identity, Action>() diff --git a/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.CloudProxy.Test/ClientTokenCloudConnectionTest.cs b/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.CloudProxy.Test/ClientTokenCloudConnectionTest.cs index c9beb271d31..b47f85f70c3 100644 --- a/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.CloudProxy.Test/ClientTokenCloudConnectionTest.cs +++ b/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.CloudProxy.Test/ClientTokenCloudConnectionTest.cs @@ -22,7 +22,7 @@ namespace Microsoft.Azure.Devices.Edge.Hub.CloudProxy.Test public class ClientTokenCloudConnectionTest { static readonly ITokenProvider TokenProvider = Mock.Of(); - static readonly IDeviceScopeIdentitiesCache DeviceScopeIdentitiesCache = Mock.Of(); + static readonly IDeviceScopeIdentitiesCache DeviceScopeIdentitiesCache = Mock.Of(); [Unit] [Fact] @@ -40,7 +40,8 @@ public async Task GetCloudConnectionForIdentityWithTokenTest() clientProvider, Mock.Of(), TimeSpan.FromMinutes(60), - true); + true, + TimeSpan.FromSeconds(20)); Option cloudProxy1 = cloudConnection.CloudProxy; Assert.True(cloudProxy1.HasValue); Assert.True(cloudProxy1.OrDefault().IsActive); @@ -74,7 +75,8 @@ public async Task UpdateInvalidIdentityWithTokenTest() deviceClientProvider.Object, Mock.Of(), TimeSpan.FromMinutes(60), - true); + true, + TimeSpan.FromSeconds(20)); Option cloudProxy1 = cloudConnection.CloudProxy; Assert.True(cloudProxy1.HasValue); @@ -116,7 +118,8 @@ ITokenCredentials GetClientCredentialsWithNonExpiringToken() deviceClientProvider.Object, Mock.Of(), TimeSpan.FromMinutes(60), - true); + true, + TimeSpan.FromSeconds(20)); Option cloudProxy = cloudConnection.CloudProxy; Assert.True(cloudProxy.HasValue); @@ -163,8 +166,9 @@ ITokenCredentials GetClientCredentialsWithNonExpiringToken() clientProvider, Mock.Of(), TimeSpan.FromMinutes(60), - true); - + true, + TimeSpan.FromSeconds(20)); + Option cloudProxy1 = cloudConnection.CloudProxy; Assert.True(cloudProxy1.HasValue); Assert.True(cloudProxy1.OrDefault().IsActive); @@ -229,7 +233,8 @@ ITokenCredentials GetClientCredentialsWithNonExpiringToken() clientProvider, Mock.Of(), TimeSpan.FromMinutes(60), - true); + true, + TimeSpan.FromSeconds(20)); Option cloudProxy1 = cloudConnection.CloudProxy; Assert.True(cloudProxy1.HasValue); @@ -295,11 +300,12 @@ IClient GetMockedDeviceClient() .Callback(c => connectionStatusChangesHandler = c); deviceClient.Setup(dc => dc.OpenAsync()) - .Callback(() => - { - Assert.NotNull(connectionStatusChangesHandler); - connectionStatusChangesHandler.Invoke(ConnectionStatus.Connected, ConnectionStatusChangeReason.Connection_Ok); - }) + .Callback( + () => + { + Assert.NotNull(connectionStatusChangesHandler); + connectionStatusChangesHandler.Invoke(ConnectionStatus.Connected, ConnectionStatusChangeReason.Connection_Ok); + }) .Returns(Task.CompletedTask); return deviceClient.Object; } @@ -328,7 +334,8 @@ void ConnectionStatusHandler(string id, CloudConnectionStatus status) deviceClientProvider.Object, Mock.Of(), TimeSpan.FromMinutes(60), - true); + true, + TimeSpan.FromSeconds(20)); Assert.Equal(receivedConnectedStatusCount, 1); Option cloudProxy1 = cloudConnection.CloudProxy; @@ -387,13 +394,14 @@ IClient GetMockedDeviceClient() .Callback(c => connectionStatusChangesHandler = c); deviceClient.Setup(dc => dc.OpenAsync()) - .Callback(() => - { - int currentCount = receivedConnectedStatusCount; - Assert.NotNull(connectionStatusChangesHandler); - connectionStatusChangesHandler.Invoke(ConnectionStatus.Connected, ConnectionStatusChangeReason.Connection_Ok); - Assert.Equal(receivedConnectedStatusCount, currentCount); - }) + .Callback( + () => + { + int currentCount = receivedConnectedStatusCount; + Assert.NotNull(connectionStatusChangesHandler); + connectionStatusChangesHandler.Invoke(ConnectionStatus.Connected, ConnectionStatusChangeReason.Connection_Ok); + Assert.Equal(receivedConnectedStatusCount, currentCount); + }) .Returns(Task.CompletedTask); return deviceClient.Object; } @@ -407,9 +415,18 @@ IClient GetMockedDeviceClient() var messageConverterProvider = Mock.Of(); var credentialsCache = Mock.Of(); - ICloudConnectionProvider cloudConnectionProvider = new CloudConnectionProvider(messageConverterProvider, 1, deviceClientProvider.Object, Option.None(), TokenProvider, DeviceScopeIdentitiesCache, credentialsCache, + ICloudConnectionProvider cloudConnectionProvider = new CloudConnectionProvider( + messageConverterProvider, + 1, + deviceClientProvider.Object, + Option.None(), + TokenProvider, + DeviceScopeIdentitiesCache, + credentialsCache, Mock.Of(i => i.Id == $"{deviceId}/$edgeHub"), - TimeSpan.FromMinutes(60), true); + TimeSpan.FromMinutes(60), + true, + TimeSpan.FromSeconds(20)); cloudConnectionProvider.BindEdgeHub(Mock.Of()); IConnectionManager connectionManager = new ConnectionManager(cloudConnectionProvider, Mock.Of(), new IdentityProvider(hostname)); @@ -467,7 +484,8 @@ static IClient GetMockDeviceClient() return deviceClient.Object; } - static ITokenCredentials GetMockClientCredentialsWithToken(string hostname = "dummy.azure-devices.net", + static ITokenCredentials GetMockClientCredentialsWithToken( + string hostname = "dummy.azure-devices.net", string deviceId = "device1") { string token = TokenHelper.CreateSasToken(hostname); diff --git a/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.CloudProxy.Test/CloudConnectionProviderTest.cs b/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.CloudProxy.Test/CloudConnectionProviderTest.cs index dd63ed072e3..024325cb8f7 100644 --- a/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.CloudProxy.Test/CloudConnectionProviderTest.cs +++ b/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.CloudProxy.Test/CloudConnectionProviderTest.cs @@ -44,7 +44,8 @@ public async Task ConnectUsingTokenCredentialsTest() CredentialsCache, EdgeHubIdentity, TimeSpan.FromMinutes(60), - true); + true, + TimeSpan.FromSeconds(20)); cloudConnectionProvider.BindEdgeHub(edgeHub); var deviceIdentity = Mock.Of(m => m.Id == "d1"); string token = TokenHelper.CreateSasToken(IotHubHostName, DateTime.UtcNow.AddMinutes(10)); @@ -84,7 +85,8 @@ public async Task ConnectUsingInvalidTokenCredentialsTest() CredentialsCache, EdgeHubIdentity, TimeSpan.FromMinutes(60), - true); + true, + TimeSpan.FromSeconds(20)); cloudConnectionProvider.BindEdgeHub(edgeHub); var deviceIdentity = Mock.Of(m => m.Id == "d1"); string token = TokenHelper.CreateSasToken(IotHubHostName, DateTime.UtcNow.AddMinutes(10)); @@ -120,7 +122,8 @@ public async Task ConnectUsingIdentityInScopeTest() CredentialsCache, EdgeHubIdentity, TimeSpan.FromMinutes(60), - true); + true, + TimeSpan.FromSeconds(20)); cloudConnectionProvider.BindEdgeHub(edgeHub); // Act @@ -159,7 +162,8 @@ public async Task ConnectUsingIdentityInCacheTest() credentialsCache.Object, EdgeHubIdentity, TimeSpan.FromMinutes(60), - true); + true, + TimeSpan.FromSeconds(20)); cloudConnectionProvider.BindEdgeHub(edgeHub); // Act @@ -198,7 +202,8 @@ public async Task ConnectUsingIdentityInCacheTest2() credentialsCache.Object, EdgeHubIdentity, TimeSpan.FromMinutes(60), - true); + true, + TimeSpan.FromSeconds(20)); cloudConnectionProvider.BindEdgeHub(edgeHub); // Act diff --git a/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.CloudProxy.Test/CloudConnectionTest.cs b/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.CloudProxy.Test/CloudConnectionTest.cs index cc00d5ca2ca..d6f0e9458e6 100644 --- a/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.CloudProxy.Test/CloudConnectionTest.cs +++ b/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.CloudProxy.Test/CloudConnectionTest.cs @@ -34,7 +34,8 @@ public async Task GetCloudConnectionForIdentityWithKeyTest() Mock.Of(), tokenProvider, TimeSpan.FromMinutes(60), - true); + true, + TimeSpan.FromSeconds(20)); Option cloudProxy1 = cloudConnection.CloudProxy; Assert.True(cloudProxy1.HasValue); @@ -68,7 +69,8 @@ await Assert.ThrowsAsync(() => CloudConnection.Create( Mock.Of(), tokenProvider, TimeSpan.FromMinutes(60), - true)); + true, + TimeSpan.FromSeconds(20))); } static IClientProvider GetMockDeviceClientProviderWithKey() diff --git a/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.CloudProxy.Test/CloudProxyTest.cs b/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.CloudProxy.Test/CloudProxyTest.cs index 8e27198192d..48eeb3b730e 100644 --- a/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.CloudProxy.Test/CloudProxyTest.cs +++ b/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.CloudProxy.Test/CloudProxyTest.cs @@ -240,7 +240,8 @@ async Task GetCloudProxyWithConnectionStringKey(string connectionSt credentialsCache, Mock.Of(), TimeSpan.FromMinutes(60), - true); + true, + TimeSpan.FromSeconds(20)); cloudConnectionProvider.BindEdgeHub(edgeHub); var deviceIdentity = Mock.Of(m => m.Id == ConnectionStringHelper.GetDeviceId(deviceConnectionString)); var clientCredentials = new SharedKeyCredentials(deviceIdentity, deviceConnectionString, string.Empty); diff --git a/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.Core.Test/ConnectionManagerTest.cs b/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.Core.Test/ConnectionManagerTest.cs index 43ca7b16f65..671312a2ac8 100644 --- a/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.Core.Test/ConnectionManagerTest.cs +++ b/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.Core.Test/ConnectionManagerTest.cs @@ -1,4 +1,5 @@ // Copyright (c) Microsoft. All rights reserved. + namespace Microsoft.Azure.Devices.Edge.Hub.Core.Test { using System; @@ -28,7 +29,7 @@ public class ConnectionManagerTest public async Task DeviceConnectionTest() { var cloudProviderMock = new Mock(); - var credentialsManager = Mock.Of(); + var credentialsManager = Mock.Of(); IConnectionManager connectionManager = new ConnectionManager(cloudProviderMock.Object, credentialsManager, GetIdentityProvider()); var deviceProxyMock1 = new Mock(); @@ -176,8 +177,18 @@ public async Task TestAddRemoveDeviceConnectionTest() var credentialsManager = Mock.Of(); var edgeHubIdentity = Mock.Of(i => i.Id == "edgeDevice/$edgeHub"); - var cloudConnectionProvider = new CloudConnectionProvider(messageConverterProvider, 1, deviceClientProvider.Object, Option.None(), Mock.Of(), Mock.Of(), credentialsManager, edgeHubIdentity, - TimeSpan.FromMinutes(60), true); + var cloudConnectionProvider = new CloudConnectionProvider( + messageConverterProvider, + 1, + deviceClientProvider.Object, + Option.None(), + Mock.Of(), + Mock.Of(), + credentialsManager, + edgeHubIdentity, + TimeSpan.FromMinutes(60), + true, + TimeSpan.FromSeconds(20)); cloudConnectionProvider.BindEdgeHub(edgeHub.Object); IConnectionManager connectionManager = new ConnectionManager(cloudConnectionProvider, credentialsManager, GetIdentityProvider()); @@ -261,7 +272,6 @@ public async Task CreateCloudProxyTest() var module1Credentials = new TokenCredentials(new ModuleIdentity("iotHub", edgeDeviceId, module1Id), "token", DummyProductInfo, false); - IClient client1 = GetDeviceClient(); IClient client2 = GetDeviceClient(); var messageConverterProvider = Mock.Of(); @@ -272,8 +282,18 @@ public async Task CreateCloudProxyTest() var credentialsCache = Mock.Of(); var edgeHubIdentity = Mock.Of(i => i.Id == "edgeDevice/$edgeHub"); - var cloudConnectionProvider = new CloudConnectionProvider(messageConverterProvider, 1, deviceClientProvider.Object, - Option.None(), Mock.Of(), Mock.Of(), credentialsCache, edgeHubIdentity, TimeSpan.FromMinutes(60), true); + var cloudConnectionProvider = new CloudConnectionProvider( + messageConverterProvider, + 1, + deviceClientProvider.Object, + Option.None(), + Mock.Of(), + Mock.Of(), + credentialsCache, + edgeHubIdentity, + TimeSpan.FromMinutes(60), + true, + TimeSpan.FromSeconds(20)); cloudConnectionProvider.BindEdgeHub(Mock.Of()); IConnectionManager connectionManager = new ConnectionManager(cloudConnectionProvider, credentialsCache, GetIdentityProvider()); @@ -388,8 +408,18 @@ public async Task CloudConnectionUpdateTest() var credentialsCache = Mock.Of(); var edgeHubIdentity = Mock.Of(i => i.Id == "edgeDevice/$edgeHub"); - var cloudConnectionProvider = new CloudConnectionProvider(messageConverterProvider, 1, deviceClientProvider.Object, - Option.None(), Mock.Of(), Mock.Of(), credentialsCache, edgeHubIdentity, TimeSpan.FromMinutes(60), true); + var cloudConnectionProvider = new CloudConnectionProvider( + messageConverterProvider, + 1, + deviceClientProvider.Object, + Option.None(), + Mock.Of(), + Mock.Of(), + credentialsCache, + edgeHubIdentity, + TimeSpan.FromMinutes(60), + true, + TimeSpan.FromSeconds(20)); cloudConnectionProvider.BindEdgeHub(Mock.Of()); IConnectionManager connectionManager = new ConnectionManager(cloudConnectionProvider, credentialsCache, GetIdentityProvider()); @@ -433,8 +463,18 @@ public async Task CloudConnectionInvalidUpdateTest() var credentialsCache = Mock.Of(); var edgeHubIdentity = Mock.Of(i => i.Id == "edgeDevice/$edgeHub"); - var cloudConnectionProvider = new CloudConnectionProvider(messageConverterProvider, 1, deviceClientProvider.Object, Option.None(), Mock.Of(), Mock.Of(), credentialsCache, edgeHubIdentity, - TimeSpan.FromMinutes(60), true); + var cloudConnectionProvider = new CloudConnectionProvider( + messageConverterProvider, + 1, + deviceClientProvider.Object, + Option.None(), + Mock.Of(), + Mock.Of(), + credentialsCache, + edgeHubIdentity, + TimeSpan.FromMinutes(60), + true, + TimeSpan.FromSeconds(20)); cloudConnectionProvider.BindEdgeHub(Mock.Of()); IConnectionManager connectionManager = new ConnectionManager(cloudConnectionProvider, credentialsCache, GetIdentityProvider()); @@ -705,7 +745,8 @@ public async Task GetCloudProxyTest() credentialsCache, new ModuleIdentity(iotHub, edgeDeviceId, "$edgeHub"), TimeSpan.FromMinutes(60), - true); + true, + TimeSpan.FromSeconds(20)); cloudConnectionProvider.BindEdgeHub(Mock.Of()); IConnectionManager connectionManager = new ConnectionManager(cloudConnectionProvider, credentialsCache, GetIdentityProvider()); @@ -735,18 +776,20 @@ static ICloudConnection GetCloudConnectionMock() cloudConnectionMock.SetupGet(dp => dp.IsActive).Returns(true); cloudConnectionMock.SetupGet(dp => dp.CloudProxy).Returns(Option.Some(cloudProxyMock)); cloudConnectionMock.Setup(c => c.UpdateTokenAsync(It.IsAny())) - .Callback(() => - { - cloudProxyMock = GetCloudProxyMock(); - cloudConnectionMock.SetupGet(dp => dp.CloudProxy).Returns(Option.Some(cloudProxyMock)); - }) + .Callback( + () => + { + cloudProxyMock = GetCloudProxyMock(); + cloudConnectionMock.SetupGet(dp => dp.CloudProxy).Returns(Option.Some(cloudProxyMock)); + }) .ReturnsAsync(cloudProxyMock); cloudConnectionMock.Setup(dp => dp.CloseAsync()).Returns(Task.FromResult(true)) - .Callback(() => - { - cloudConnectionMock.SetupGet(dp => dp.IsActive).Returns(false); - cloudConnectionMock.SetupGet(dp => dp.CloudProxy).Returns(Option.None()); - }); + .Callback( + () => + { + cloudConnectionMock.SetupGet(dp => dp.IsActive).Returns(false); + cloudConnectionMock.SetupGet(dp => dp.CloudProxy).Returns(Option.None()); + }); return cloudConnectionMock.Object; } diff --git a/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.E2E.Test/DependencyManager.cs b/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.E2E.Test/DependencyManager.cs index 98058ddbac6..30a9ac2860c 100644 --- a/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.E2E.Test/DependencyManager.cs +++ b/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.E2E.Test/DependencyManager.cs @@ -93,7 +93,8 @@ public void Register(ContainerBuilder builder) TimeSpan.FromSeconds(5), 101, TimeSpan.FromSeconds(3600), - true)); + true, + TimeSpan.FromSeconds(20))); builder.RegisterModule(new HttpModule()); builder.RegisterModule(new MqttModule(mqttSettingsConfiguration.Object, topics, this.serverCertificate, false, false, string.Empty, false)); diff --git a/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.E2E.Test/EdgeHubConnectionTest.cs b/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.E2E.Test/EdgeHubConnectionTest.cs index 97fe889d623..988d9324a14 100644 --- a/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.E2E.Test/EdgeHubConnectionTest.cs +++ b/edge-hub/test/Microsoft.Azure.Devices.Edge.Hub.E2E.Test/EdgeHubConnectionTest.cs @@ -68,7 +68,8 @@ public async Task TestEdgeHubConnection() credentialsCache, edgeHubCredentials.Identity, TimeSpan.FromMinutes(60), - true); + true, + TimeSpan.FromSeconds(20)); var connectionManager = new ConnectionManager(cloudConnectionProvider, Mock.Of(), identityProvider); try