Пример #1
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);
        }
Пример #2
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);
        }
Пример #3
0
        public async Task TestMessageCleanupWhenException()
        {
            // Arrange
            IMessageConverter <IProtocolGatewayMessage> messageConverter = ProtocolGatewayMessageConverter.Value;
            Mock <IDeviceListener> deviceListener = MakeDeviceListenerSpy();
            var payload = new Mock <IByteBuffer>();

            payload.Setup(p => p.Release()).Returns(true);
            Exception expectedException = null;

            // Act
            var messagingServiceClient = new MessagingServiceClient(deviceListener.Object, messageConverter, ByteBufferConverter);
            IProtocolGatewayMessage protocolGatewayMessage = messagingServiceClient.CreateMessage(null, payload.Object);

            try
            {
                await messagingServiceClient.SendAsync(protocolGatewayMessage);
            }
            catch (Exception ex)
            {
                expectedException = ex;
            }

            // Assert
            payload.VerifyAll();
            Assert.NotNull(expectedException);
        }
Пример #4
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));
        }
Пример #5
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));
        }
Пример #6
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));
        }
Пример #7
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);
        }
Пример #8
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));
        }
        public async Task SendAsyncForwardsMessagesToTheDeviceListener()
        {
            Messages m = MakeMessages();
            Mock <IDeviceListener> listener = MakeDeviceListenerSpy();

            var client = new MessagingServiceClient(listener.Object, ProtocolGatewayMessageConverter.Value, ByteBufferConverter);
            await client.SendAsync(m.Source);

            listener.Verify(
                x => x.ProcessDeviceMessageAsync(It.Is((IMessage actual) => actual.Equals(m.Expected))),
                Times.Once);
        }
Пример #10
0
        public async Task SendAsyncForwardsMessagesToTheDeviceListener()
        {
            Messages m = MakeMessages("devices/d1/messages/events/");
            Mock <IDeviceListener> listener = MakeDeviceListenerSpy();

            m.Expected.SystemProperties[SystemProperties.ConnectionDeviceId] = "d1";

            var client = new MessagingServiceClient(listener.Object, ProtocolGatewayMessageConverter.Value, ByteBufferConverter, this.GetSessionStatePersistenceProvider());
            await client.SendAsync(m.Source);

            listener.Verify(
                x => x.ProcessDeviceMessageAsync(It.Is((IMessage actual) => actual.Equals(m.Expected))),
                Times.Once);
        }
Пример #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);
        }
Пример #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);
        }
Пример #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);
        }
Пример #14
0
        public async Task TestMessageCleanup()
        {
            // Arrange
            IMessageConverter <IProtocolGatewayMessage> messageConverter = ProtocolGatewayMessageConverter.Value;
            Mock <IDeviceListener> deviceListener = MakeDeviceListenerSpy();
            var payload = new Mock <IByteBuffer>();

            payload.Setup(p => p.Release()).Returns(true);

            // Act
            var messagingServiceClient = new MessagingServiceClient(deviceListener.Object, messageConverter, ByteBufferConverter);
            IProtocolGatewayMessage protocolGatewayMessage = messagingServiceClient.CreateMessage("devices/Device1/messages/events/", payload.Object);
            await messagingServiceClient.SendAsync(protocolGatewayMessage);

            // Assert
            payload.VerifyAll();
        }