public async Task CapturesTwinReportedRidFromTopic() { var milestone = new SemaphoreSlim(0, 1); var listenerCapture = new DeviceListenerCapture(); var publishInfo = new MqttPublishInfo("$edgehub/device_id/twin/reported/?$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.Equal("123", listenerCapture.Captured.CapturedCorrelationId); }
public async Task CapturesDeviceIdentityFromTopic() { var milestone = new SemaphoreSlim(0, 1); var listenerCapture = new DeviceListenerCapture(); var publishInfo = new MqttPublishInfo("$edgehub/captured_device_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 <DeviceIdentity>(listenerCapture.Captured.Identity); Assert.Equal("captured_device_id", ((DeviceIdentity)listenerCapture.Captured.Identity).DeviceId); }
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 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 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 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); }