public async Task CapturesModuleIdentityFromTopic() { var milestone = new SemaphoreSlim(0, 1); var listenerCapture = new DeviceListenerCapture(); var publishInfo = new MqttPublishInfo("$edgehub/captured_device_id/captured_module_id/twin/get/?$rid=123", new byte[0]); var(connectionRegistry, identityProvider) = GetHandlerDependencies(listenerCapture, milestone); var sut = new TwinHandler(connectionRegistry, identityProvider); _ = await sut.HandleAsync(publishInfo); await milestone.WaitAsync(); Assert.IsType <ModuleIdentity>(listenerCapture.Captured.Identity); Assert.Equal("captured_device_id", ((ModuleIdentity)listenerCapture.Captured.Identity).DeviceId); Assert.Equal("captured_module_id", ((ModuleIdentity)listenerCapture.Captured.Identity).ModuleId); }
public async Task AddsSystemPropertiesToMessage() { var listenerCapture = new DeviceListenerCapture(); var publishInfo = new MqttPublishInfo("$edgehub/device_id/module_id/methods/res/200/?$rid=abcde", new byte[0]); var(connectionRegistry, identityProvider) = GetHandlerDependencies(listenerCapture); var sut = new DirectMethodHandler(connectionRegistry, identityProvider); await sut.HandleAsync(publishInfo); var message = listenerCapture.Captured.CapturedMessage; Assert.Contains(SystemProperties.CorrelationId, message.Properties); Assert.Equal("abcde", message.Properties[SystemProperties.CorrelationId]); Assert.Contains(SystemProperties.StatusCode, message.Properties); Assert.Equal("200", message.Properties[SystemProperties.StatusCode]); }
public async Task HandlesSubscriptionTopics(string topic) { var publishInfo = new MqttPublishInfo(topic, new byte[0]); var(cloud2DeviceMessageHandler, moduleToModuleMessageHandler, directMethodHandler, twinHandler) = GetSubscriptionWatchers(); var(connectionRegistry, identityProvider) = GetHandlerDependencies(); var sut = new SubscriptionChangeHandler( cloud2DeviceMessageHandler, moduleToModuleMessageHandler, directMethodHandler, twinHandler, connectionRegistry, identityProvider); var isHandled = await sut.HandleAsync(publishInfo); Assert.True(isHandled); }
public async Task CapturesModuleIdentityFromTopicForDirectClient() { var publishInfo = new MqttPublishInfo("$edgehub/captured_device_id/captured_module_id/subscriptions", Encoding.UTF8.GetBytes(@"[""$edgehub/captured_device_id/captured_module_id/methods/post/#""]")); var(cloud2DeviceMessageHandler, moduleToModuleMessageHandler, _, twinHandler) = GetSubscriptionWatchers(); var(connectionRegistry, _) = GetHandlerDependencies(); var identityProvider = Mock.Of <IIdentityProvider>(); var directMethodHandler = Mock.Of <IDirectMethodHandler>(); Mock.Get(directMethodHandler) .Setup(sw => sw.WatchedSubscriptions) .Returns(() => new List <SubscriptionPattern>() { new SubscriptionPattern(@"^((?<dialect>(\$edgehub)|(\$iothub)))/(?<id1>[^/\+\#]+)(/(?<id2>[^/\+\#]+))?/methods/post/\#$", DeviceSubscription.Methods) }); string passedDeviceId = null; string passedModuleId = null; Mock.Get(identityProvider) .Setup(ip => ip.Create(It.IsAny <string>(), It.IsAny <string>())) .Returns((string device_id, string module_id) => { passedDeviceId = device_id; passedModuleId = module_id; return(new DeviceIdentity("host", device_id)); }); var sut = new SubscriptionChangeHandler( cloud2DeviceMessageHandler, moduleToModuleMessageHandler, directMethodHandler, twinHandler, connectionRegistry, identityProvider); _ = await sut.HandleAsync(publishInfo); Assert.Equal("captured_device_id", passedDeviceId); Assert.Equal("captured_module_id", passedModuleId); }
public async Task InternalMessageCapturesBody() { var deviceListenerCapture = new DeviceListenerCapture(); var publishInfo = new MqttPublishInfo("$edgehub/device_id/messages/events/prop1=val1&prop2=val2", new byte[] { 0x01, 0x02, 0x03 }); var(connectionRegistry, identityProvider) = GetHandlerDependencies(listenerCapture: deviceListenerCapture); var sut = new TelemetryHandler(connectionRegistry, identityProvider); var isHandled = await sut.HandleAsync(publishInfo); Assert.True(isHandled); Assert.NotNull(deviceListenerCapture.Captured); Assert.NotNull(deviceListenerCapture.Captured.LastCapturedMessage); var capturedMessage = deviceListenerCapture.Captured.LastCapturedMessage; Assert.Equal(new byte[] { 0x01, 0x02, 0x03 }, capturedMessage.Body); }
public async Task TurnsOnOffSubscriptionsForMixedIdentities() { var listenerCapture = new MultiDeviceListenerCapture(); var publishInfo = new MqttPublishInfo("$edgehub/device_id/module_id/subscriptions", Encoding.UTF8.GetBytes("[\"$edgehub/device_id/module_id/MatchingPattern\", \"$edgehub/device_id/module_id_2/MatchingPattern\"]")); var(_, moduleToModuleMessageHandler, directMethodHandler, twinHandler) = GetSubscriptionWatchers(); var cloud2DeviceMessageHandler = Mock.Of <ICloud2DeviceMessageHandler>(); Mock.Get(cloud2DeviceMessageHandler) .Setup(sw => sw.WatchedSubscriptions) .Returns(() => new List <SubscriptionPattern>() { new SubscriptionPattern(@"(?<id1>[^/\+\#]+)(/(?<id2>[^/\+\#]+))?/patternX", DeviceSubscription.Methods), new SubscriptionPattern(@"(?<id1>[^/\+\#]+)(/(?<id2>[^/\+\#]+))?/MatchingPattern", DeviceSubscription.C2D), }); var(connectionRegistry, identityProvider) = GetHandlerDependencies(listenerCapture: listenerCapture); var sut = new SubscriptionChangeHandler( cloud2DeviceMessageHandler, moduleToModuleMessageHandler, directMethodHandler, twinHandler, connectionRegistry, identityProvider); _ = await sut.HandleAsync(publishInfo); var listener = listenerCapture.Captured.Where(l => l.Identity.Id == "device_id/module_id").First(); Assert.Equal(DeviceSubscription.C2D, listener.AddedSubscription); Assert.Equal(DeviceSubscription.Methods, listener.RemovedSubscription); listener = listenerCapture.Captured.Where(l => l.Identity.Id == "device_id/module_id_2").First(); Assert.Equal(DeviceSubscription.C2D, listener.AddedSubscription); Assert.Equal(DeviceSubscription.Methods, listener.RemovedSubscription); }
public async Task TurnsOnOffSubscriptionsForIndirectClients() { var listenerCapture = new DeviceListenerCapture(); var publishInfo = new MqttPublishInfo("$edgehub/somedevice/$edgeHub/subscriptions", Encoding.UTF8.GetBytes("[\"$edgehub/device_id/module_id/MatchingPattern\"]")); var(_, moduleToModuleMessageHandler, directMethodHandler, twinHandler) = GetSubscriptionWatchers(); var cloud2DeviceMessageHandler = Mock.Of <ICloud2DeviceMessageHandler>(); Mock.Get(cloud2DeviceMessageHandler) .Setup(sw => sw.WatchedSubscriptions) .Returns(() => new List <SubscriptionPattern>() { new SubscriptionPattern(@"(?<id1>[^/\+\#]+)(/(?<id2>[^/\+\#]+))?/patternX", DeviceSubscription.Methods), new SubscriptionPattern(@"(?<id1>[^/\+\#]+)(/(?<id2>[^/\+\#]+))?/MatchingPattern", DeviceSubscription.C2D), }); var(connectionRegistry, identityProvider) = GetHandlerDependencies(listenerCapture: listenerCapture); Mock.Get(connectionRegistry) .Setup(cr => cr.GetNestedConnectionsAsync()) .Returns(() => Task.FromResult <IReadOnlyList <IIdentity> >(new List <IIdentity>() { (IIdentity) new ModuleIdentity("host", "device_id", "module_id") })); var sut = new SubscriptionChangeHandler( cloud2DeviceMessageHandler, moduleToModuleMessageHandler, directMethodHandler, twinHandler, connectionRegistry, identityProvider); _ = await sut.HandleAsync(publishInfo); Assert.Equal(DeviceSubscription.C2D, listenerCapture.Captured.AddedSubscription); Assert.Equal(DeviceSubscription.Methods, listenerCapture.Captured.RemovedSubscription); }
public async Task CapturesDeviceIdentityFromTopic() { var publishInfo = new MqttPublishInfo("$edgehub/captured_device_id/messages/events/prop1=val1&prop2=val2", new byte[0]); var(connectionRegistry, _) = GetHandlerDependencies(); var identityProvider = Mock.Of <IIdentityProvider>(); string passedDeviceId = null; Mock.Get(identityProvider) .Setup(ip => ip.Create(It.IsAny <string>())) .Returns((string device_id) => { passedDeviceId = device_id; return(new DeviceIdentity("host", device_id)); }); var sut = new TelemetryHandler(connectionRegistry, identityProvider); _ = await sut.HandleAsync(publishInfo); Assert.Equal("captured_device_id", passedDeviceId); }
public async Task InternalMessageCapturesSystemProperties() { var deviceListenerCapture = new DeviceListenerCapture(); var publishInfo = new MqttPublishInfo("$edgehub/device_id/messages/events/%24.uid=userid&%24.cid=corrid", new byte[] { 0x01, 0x02, 0x03 }); var(connectionRegistry, _) = GetHandlerDependencies(listenerCapture: deviceListenerCapture); var identityProvider = Mock.Of <IIdentityProvider>(); string passedDeviceId = null; Mock.Get(identityProvider) .Setup(ip => ip.Create(It.IsAny <string>())) .Returns((string device_id) => { passedDeviceId = device_id; return(new DeviceIdentity("host", device_id)); }); var sut = new TelemetryHandler(connectionRegistry, identityProvider); var isHandled = await sut.HandleAsync(publishInfo); Assert.True(isHandled); Assert.NotNull(deviceListenerCapture.Captured); Assert.NotNull(deviceListenerCapture.Captured.LastCapturedMessage); var capturedMessage = deviceListenerCapture.Captured.LastCapturedMessage; var expectedProperties = new Dictionary <string, string>() { ["userId"] = "userid", ["cid"] = "corrid", ["connectionDeviceId"] = passedDeviceId }; Assert.Equal(expectedProperties, capturedMessage.SystemProperties); }
public Task <bool> HandleAsync(MqttPublishInfo publishInfo) { this.PacketsToHandle.Add(publishInfo); this.Handler(publishInfo); return(Task.FromResult(this.ShouldHandle)); }
async Task SignalConnectionEvent(BrokeredCloudProxyDispatcher brokeredCloudProxyDispatcher, string status) { var packet = new MqttPublishInfo(ConnectivityTopic, Encoding.UTF8.GetBytes("{\"status\":\"" + status + "\"}")); await brokeredCloudProxyDispatcher.HandleAsync(packet); }