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"]);
        }
Example #2
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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"]);
        }
Example #6
0
        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));
        }
Example #7
0
        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));
        }
Example #8
0
        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));
        }
Example #9
0
        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);
        }
Example #10
0
        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));
        }
Example #11
0
        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);
        }
Example #12
0
        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);
        }
Example #13
0
        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);
        }
Example #14
0
        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);
        }