public async Task CanListenForDesiredPropertyUpdates() { var update = new TaskCompletionSource <IMessage>(); var cloudListener = new Mock <ICloudListener>(); string deviceConnectionStringKey = "device2ConnStrKey"; cloudListener.Setup(x => x.OnDesiredPropertyUpdates(It.IsAny <IMessage>())) .Callback((IMessage m) => update.TrySetResult(m)) .Returns(TaskEx.Done); ICloudProxy cloudProxy = await this.GetCloudProxyWithConnectionStringKey(deviceConnectionStringKey); cloudProxy.BindCloudListener(cloudListener.Object); await cloudProxy.SetupDesiredPropertyUpdatesAsync(); var desired = new TwinCollection() { ["desiredPropertyTest"] = Guid.NewGuid().ToString() }; await UpdateDesiredProperty(ConnectionStringHelper.GetDeviceId(await SecretsHelper.GetSecretFromConfigKey(deviceConnectionStringKey)), desired); await update.Task; await cloudProxy.RemoveDesiredPropertyUpdatesAsync(); IMessage expected = new EdgeMessage.Builder(Encoding.UTF8.GetBytes(desired.ToJson())).Build(); expected.SystemProperties[SystemProperties.EnqueuedTime] = ""; expected.SystemProperties[SystemProperties.Version] = desired.Version.ToString(); IMessage actual = update.Task.Result; Assert.Equal(expected.Body, actual.Body); Assert.Equal(expected.Properties, actual.Properties); Assert.Equal(expected.SystemProperties.Keys, actual.SystemProperties.Keys); }
public static async Task <EdgeHubConnection> Create( IModuleIdentity edgeHubIdentity, IEdgeHub edgeHub, ITwinManager twinManager, IConnectionManager connectionManager, ICloudProxy cloudProxy, RouteFactory routeFactory, IMessageConverter <TwinCollection> twinCollectionMessageConverter, IMessageConverter <Twin> twinMessageConverter, VersionInfo versionInfo ) { Preconditions.CheckNotNull(edgeHubIdentity, nameof(edgeHubIdentity)); Preconditions.CheckNotNull(edgeHub, nameof(edgeHub)); Preconditions.CheckNotNull(connectionManager, nameof(connectionManager)); Preconditions.CheckNotNull(cloudProxy, nameof(cloudProxy)); Preconditions.CheckNotNull(twinCollectionMessageConverter, nameof(twinCollectionMessageConverter)); Preconditions.CheckNotNull(twinMessageConverter, nameof(twinMessageConverter)); Preconditions.CheckNotNull(routeFactory, nameof(routeFactory)); var edgeHubConnection = new EdgeHubConnection( edgeHubIdentity, twinManager, routeFactory, twinCollectionMessageConverter, twinMessageConverter, versionInfo ?? VersionInfo.Empty ); cloudProxy.BindCloudListener(new CloudListener(edgeHubConnection)); IDeviceProxy deviceProxy = new EdgeHubDeviceProxy(edgeHubConnection); await connectionManager.AddDeviceConnection(edgeHubIdentity, deviceProxy); await edgeHub.AddSubscription(edgeHubIdentity.Id, DeviceSubscription.DesiredPropertyUpdates); // Clear out all the reported devices. await edgeHubConnection.ClearDeviceConnectionStatuses(); connectionManager.DeviceConnected += edgeHubConnection.DeviceConnected; connectionManager.DeviceDisconnected += edgeHubConnection.DeviceDisconnected; Events.Initialized(edgeHubIdentity); return(edgeHubConnection); }