public void TestTryParseAddressWithParamsIntoMessagePropertiesMultipleInput() { IList <string> input = new List <string>() { "a/{b}/c/{params}/", "a/{b}/{c}/d/{params}/" }; var config = new MessageAddressConversionConfiguration( input, DontCareOutput ); var converter = new MessageAddressConverter(config); string address = "a/bee/cee/d/p1=v1&p2=v2&$.mid=mv1/"; ProtocolGatewayMessage message = new ProtocolGatewayMessage.Builder(Payload, address) .Build(); bool status = converter.TryParseProtocolMessagePropsFromAddress(message); Assert.True(status); Assert.Equal(5, message.Properties.Count); Assert.Equal <string>("bee", message.Properties["b"]); Assert.Equal <string>("cee", message.Properties["c"]); Assert.Equal("v1", message.Properties["p1"]); Assert.Equal("v2", message.Properties["p2"]); Assert.Equal("mv1", message.Properties["$.mid"]); }
public async Task SendAsyncSendsAPatchResponseWhenGivenACorrelationId() { var edgeHub = Mock.Of <IEdgeHub>(e => e.UpdateReportedPropertiesAsync(It.IsAny <IIdentity>(), It.IsAny <IMessage>()) == Task.CompletedTask); IDeviceListener listener = new DeviceMessageHandler(Mock.Of <IIdentity>(i => i.Id == "d1"), edgeHub, Mock.Of <IConnectionManager>()); var channel = new Mock <IMessagingChannel <IProtocolGatewayMessage> >(); channel.Setup(x => x.Handle(It.IsAny <IProtocolGatewayMessage>())) .Callback <IProtocolGatewayMessage>( msg => { Assert.Equal("$iothub/twin/res/204/?$rid=123", msg.Address); Assert.Equal("r", msg.Id); }); ProtocolGatewayMessage message = new ProtocolGatewayMessage.Builder(ByteBufferConverter.ToByteBuffer(new byte[0]), "$iothub/twin/PATCH/properties/reported/?$rid=123") .Build(); var client = new MessagingServiceClient(listener, ProtocolGatewayMessageConverter.Value, ByteBufferConverter); client.BindMessagingChannel(channel.Object); await client.SendAsync(message); channel.Verify(x => x.Handle(It.IsAny <IProtocolGatewayMessage>()), Times.Once); }
public void TestTryParseAddressIntoMessagePropertiesMultipleInput() { IList <string> input = new List <string>() { "a/{b}/c/{d}/", "e/{f}/g/{h}/" }; var config = new MessageAddressConversionConfiguration( input, DontCareOutput ); var converter = new MessageAddressConverter(config); string address = "a/bee/c/dee/"; ProtocolGatewayMessage message = new ProtocolGatewayMessage.Builder(Payload, address) .Build(); bool status = converter.TryParseProtocolMessagePropsFromAddress(message); Assert.True(status); string value; Assert.True(message.Properties.TryGetValue("b", out value)); Assert.Equal <string>("bee", value); Assert.True(message.Properties.TryGetValue("d", out value)); Assert.Equal <string>("dee", value); Assert.Equal(2, message.Properties.Count); }
public async Task SendAsyncReturnsTheRequestedTwin() { byte[] twinBytes = Encoding.UTF8.GetBytes("don't care"); var edgeHub = Mock.Of <IEdgeHub>(e => e.GetTwinAsync(It.IsAny <string>()) == Task.FromResult(new EdgeMessage.Builder(twinBytes).Build() as IMessage)); IDeviceListener listener = new DeviceMessageHandler(Mock.Of <IIdentity>(i => i.Id == "d1"), edgeHub, Mock.Of <IConnectionManager>()); var channel = new Mock <IMessagingChannel <IProtocolGatewayMessage> >(); channel.Setup(x => x.Handle(It.IsAny <IProtocolGatewayMessage>())) .Callback <IProtocolGatewayMessage>( msg => { Assert.Equal(twinBytes, ByteBufferConverter.ToByteArray(msg.Payload)); Assert.Equal("$iothub/twin/res/200/?$rid=123", msg.Address); Assert.Equal("r", msg.Id); }); ProtocolGatewayMessage message = new ProtocolGatewayMessage.Builder(ByteBufferConverter.ToByteBuffer(new byte[0]), "$iothub/twin/GET/?$rid=123") .Build(); var client = new MessagingServiceClient(listener, ProtocolGatewayMessageConverter.Value, ByteBufferConverter); client.BindMessagingChannel(channel.Object); await client.SendAsync(message); channel.Verify(x => x.Handle(It.IsAny <IProtocolGatewayMessage>()), Times.Once); }
public void TestTryParseAddressWithTailingSlashOptional() { IList <string> input = new List <string> { "a/{b}/c/{d}", "a/{b}/c/{d}/" }; var config = new MessageAddressConversionConfiguration( input, DontCareOutput); var converter = new MessageAddressConverter(config); string address = "a/bee/c/dee"; ProtocolGatewayMessage message = new ProtocolGatewayMessage.Builder(Payload, address) .Build(); bool status = converter.TryParseProtocolMessagePropsFromAddress(message); Assert.True(status); Assert.Equal(2, message.Properties.Count); Assert.Equal("bee", message.Properties["b"]); Assert.Equal("dee", message.Properties["d"]); string address2 = "a/bee/c/dee/"; ProtocolGatewayMessage message2 = new ProtocolGatewayMessage.Builder(Payload, address2) .Build(); bool status2 = converter.TryParseProtocolMessagePropsFromAddress(message2); Assert.True(status2); Assert.Equal(2, message2.Properties.Count); Assert.Equal("bee", message2.Properties["b"]); Assert.Equal("dee", message2.Properties["d"]); }
public async Task SendAsyncThrowsIfTheTwinMessageIsInvalid() { ProtocolGatewayMessage message = new ProtocolGatewayMessage.Builder(ByteBufferConverter.ToByteBuffer(new byte[0]), "$iothub/twin/unknown") .Build(); var listener = new Mock <IDeviceListener>(MockBehavior.Strict); var client = new MessagingServiceClient(listener.Object, ProtocolGatewayMessageConverter.Value, ByteBufferConverter); await Assert.ThrowsAsync <InvalidOperationException>(() => client.SendAsync(message)); }
public async Task SendAsyncThrowsIfATwinMessageHasASubresource(string address) { ProtocolGatewayMessage message = new ProtocolGatewayMessage.Builder(ByteBufferConverter.ToByteBuffer(new byte[0]), address) .Build(); var listener = new Mock <IDeviceListener>(MockBehavior.Strict); var client = new MessagingServiceClient(listener.Object, ProtocolGatewayMessageConverter.Value, ByteBufferConverter); await Assert.ThrowsAsync <InvalidOperationException>(() => client.SendAsync(message)); }
public async Task SendAsyncThrowsIfAGetTwinMessageDoesNotHaveACorrelationId() { ProtocolGatewayMessage message = new ProtocolGatewayMessage.Builder(ByteBufferConverter.ToByteBuffer(new byte[0]), "$iothub/twin/GET/") .Build(); var listener = new Mock <IDeviceListener>(MockBehavior.Strict); var client = new MessagingServiceClient(listener.Object, ProtocolGatewayMessageConverter.Value, ByteBufferConverter, this.GetSessionStatePersistenceProvider()); await Assert.ThrowsAsync <InvalidOperationException>(() => client.SendAsync(message)); }
public async Task SendAsyncSendsTheRequestedMethod() { Mock <IDeviceListener> listener = MakeDeviceListenerSpy(); ProtocolGatewayMessage message = new ProtocolGatewayMessage.Builder(ByteBufferConverter.ToByteBuffer(new byte[0]), "$iothub/methods/res/200/?$rid=123") .Build(); var client = new MessagingServiceClient(listener.Object, ProtocolGatewayMessageConverter.Value, ByteBufferConverter); await client.SendAsync(message); listener.Verify(p => p.ProcessMethodResponseAsync(It.Is <IMessage>(x => x.Properties[SystemProperties.StatusCode] == "200" && x.Properties[SystemProperties.CorrelationId] == "123")), Times.Once); }
public async Task SendAsyncThrowsIfMessageAddressIsNullOrWhiteSpace() { ProtocolGatewayMessage message = new ProtocolGatewayMessage.Builder(ByteBufferConverter.ToByteBuffer(new byte[] { 0 }), null) .Build(); var listener = Mock.Of <IDeviceListener>(); var converter = Mock.Of <IMessageConverter <IProtocolGatewayMessage> >(); IMessagingServiceClient client = new MessagingServiceClient(listener, converter, ByteBufferConverter); await Assert.ThrowsAsync <ArgumentException>(() => client.SendAsync(message)); }
public async Task SendAsyncRecognizesAGetTwinMessage() { ProtocolGatewayMessage message = new ProtocolGatewayMessage.Builder(ByteBufferConverter.ToByteBuffer(new byte[0]), "$iothub/twin/GET/?$rid=123") .Build(); Mock <IDeviceListener> listener = MakeDeviceListenerSpy(); var channel = Mock.Of <IMessagingChannel <IProtocolGatewayMessage> >(); var client = new MessagingServiceClient(listener.Object, ProtocolGatewayMessageConverter.Value, ByteBufferConverter); client.BindMessagingChannel(channel); await client.SendAsync(message); listener.Verify(x => x.ProcessDeviceMessageAsync(It.IsAny <IMessage>()), Times.Never); listener.Verify(x => x.SendGetTwinRequest(It.IsAny <string>()), Times.Once); }
public async Task SendAsyncDoesNotSendAPatchResponseWithoutACorrelationId() { var edgeHub = Mock.Of <IEdgeHub>(e => e.UpdateReportedPropertiesAsync(It.IsAny <IIdentity>(), It.IsAny <IMessage>()) == Task.CompletedTask); IDeviceListener listener = new DeviceMessageHandler(Mock.Of <IIdentity>(i => i.Id == "d1"), edgeHub, Mock.Of <IConnectionManager>()); var channel = new Mock <IMessagingChannel <IProtocolGatewayMessage> >(); ProtocolGatewayMessage message = new ProtocolGatewayMessage.Builder(ByteBufferConverter.ToByteBuffer(new byte[0]), "$iothub/twin/PATCH/properties/reported/") .Build(); var client = new MessagingServiceClient(listener, ProtocolGatewayMessageConverter.Value, ByteBufferConverter); client.BindMessagingChannel(channel.Object); await client.SendAsync(message); channel.Verify(x => x.Handle(It.IsAny <IProtocolGatewayMessage>()), Times.Never); }
public async Task SendAsyncRecognizesAPatchTwinMessage() { Mock <IDeviceListener> listener = MakeDeviceListenerSpy(); var channel = Mock.Of <IMessagingChannel <IProtocolGatewayMessage> >(); var client = new MessagingServiceClient(listener.Object, ProtocolGatewayMessageConverter.Value, ByteBufferConverter); client.BindMessagingChannel(channel); string patch = "{\"name\":\"value\"}"; ProtocolGatewayMessage message = new ProtocolGatewayMessage.Builder(ByteBufferConverter.ToByteBuffer(Encoding.UTF8.GetBytes(patch)), "$iothub/twin/PATCH/properties/reported/?$rid=123") .Build(); await client.SendAsync(message); listener.Verify(x => x.UpdateReportedPropertiesAsync(It.Is((IMessage m) => Encoding.UTF8.GetString(m.Body).Equals(patch)), It.IsAny <string>()), Times.Once); }
public void TestTryParseAddressWithParamsIntoMessagePropertiesFailsNoMatchMultiple() { IList <string> input = new List <string>() { "a/{b}/d/", "a/{b}/c/{params}" }; var config = new MessageAddressConversionConfiguration( input, DontCareOutput); var converter = new MessageAddressConverter(config); string address = "a/bee/p1=v1&p2=v2"; ProtocolGatewayMessage message = new ProtocolGatewayMessage.Builder(Payload, address) .Build(); bool status = converter.TryParseProtocolMessagePropsFromAddress(message); Assert.False(status); Assert.Equal(0, message.Properties.Count); }