Beispiel #1
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 Mqtt.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);
        }
Beispiel #2
0
        public async Task TestReceiveMessagingChannelDispose()
        {
            IProtocolGatewayMessage msg = null;

            IMessageConverter <IProtocolGatewayMessage> messageConverter = ProtocolGatewayMessageConverter.Value;
            var dp         = new DeviceProxy(Channel.Object, MockIdentity, messageConverter, ByteBufferConverter);
            var cloudProxy = new Mock <ICloudProxy>();

            cloudProxy.Setup(d => d.CloseAsync()).Callback(
                () =>
            {
            });
            var connectionManager = new Mock <IConnectionManager>();

            connectionManager.Setup(c => c.GetCloudConnection(It.IsAny <string>()))
            .Returns(Task.FromResult(Option.Some(cloudProxy.Object)));
            var deviceListner          = new DeviceMessageHandler(MockIdentity, EdgeHub.Object, connectionManager.Object);
            var messagingServiceClient = new Mqtt.MessagingServiceClient(deviceListner, messageConverter, ByteBufferConverter);

            Channel.Setup(r => r.Handle(It.IsAny <IProtocolGatewayMessage>()))
            .Callback <IProtocolGatewayMessage>(
                m =>
            {
                msg = m;
                messagingServiceClient.DisposeAsync(new Exception("Some issue"));
            });

            messagingServiceClient.BindMessagingChannel(Channel.Object);
            Core.IMessage message = new EdgeMessage.Builder(new byte[] { 1, 2, 3 }).Build();
            await dp.SendC2DMessageAsync(message);

            Assert.NotNull(msg);
        }
        public async Task TestReceiveMessagingChannelAbandon()
        {
            IProtocolGatewayMessage msg = null;

            IMessageConverter <IProtocolGatewayMessage> messageConverter = ProtocolGatewayMessageConverter.Value;
            var dp         = new DeviceProxy(Channel.Object, MockIdentity, messageConverter, ByteBufferConverter);
            var cloudProxy = new Mock <ICloudProxy>();

            cloudProxy.Setup(d => d.SendFeedbackMessageAsync(It.IsAny <string>(), It.IsAny <FeedbackStatus>())).Callback <string, FeedbackStatus>(
                (mid, status) =>
            {
                Assert.Equal(FeedbackStatus.Abandon, status);
            });
            cloudProxy.Setup(d => d.BindCloudListener(It.IsAny <ICloudListener>()));
            var connectionManager = new Mock <IConnectionManager>();

            connectionManager.Setup(c => c.GetCloudConnection(It.IsAny <string>()))
            .Returns(Option.Some(cloudProxy.Object));
            var deviceListner          = new DeviceMessageHandler(MockIdentity, EdgeHub.Object, connectionManager.Object);
            var messagingServiceClient = new Mqtt.MessagingServiceClient(deviceListner, messageConverter, ByteBufferConverter);

            Channel.Setup(r => r.Handle(It.IsAny <IProtocolGatewayMessage>()))
            .Callback <IProtocolGatewayMessage>(
                m =>
            {
                msg = m;
                messagingServiceClient.AbandonAsync(msg.Id);
            });

            messagingServiceClient.BindMessagingChannel(Channel.Object);
            Core.IMessage message = new EdgeMessage.Builder(new byte[] { 1, 2, 3 }).Build();
            await dp.SendC2DMessageAsync(message);

            Assert.NotNull(msg);
        }
Beispiel #4
0
        public async Task TestAbandonAsyncDoesNothingWhenMessageIdIsInvalid(string messageId)
        {
            // Arrange
            IMessageConverter <IProtocolGatewayMessage> messageConverter = ProtocolGatewayMessageConverter.Value;
            var deviceListener = new Mock <IDeviceListener>(MockBehavior.Strict);

            // Act
            var messagingServiceClient = new Mqtt.MessagingServiceClient(deviceListener.Object, messageConverter, ByteBufferConverter);
            await messagingServiceClient.AbandonAsync(messageId);

            // Assert
            deviceListener.VerifyAll();
        }
Beispiel #5
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 Mqtt.MessagingServiceClient(deviceListener.Object, messageConverter, ByteBufferConverter);
            IProtocolGatewayMessage protocolGatewayMessage = messagingServiceClient.CreateMessage("devices/Device1/messages/events/", payload.Object);
            await messagingServiceClient.SendAsync(protocolGatewayMessage);

            // Assert
            payload.VerifyAll();
        }
Beispiel #6
0
        public async Task TestAbandonAsyncCallsDeviceListener()
        {
            // Arrange
            string messageId = Guid.NewGuid().ToString();
            IMessageConverter <IProtocolGatewayMessage> messageConverter = ProtocolGatewayMessageConverter.Value;
            var deviceListener = new Mock <IDeviceListener>(MockBehavior.Strict);

            deviceListener.Setup(d => d.ProcessMessageFeedbackAsync(
                                     It.Is <string>(s => s.Equals(messageId, StringComparison.OrdinalIgnoreCase)),
                                     It.Is <FeedbackStatus>(f => f == FeedbackStatus.Abandon)))
            .Returns(TaskEx.Done);

            // Act
            var messagingServiceClient = new Mqtt.MessagingServiceClient(deviceListener.Object, messageConverter, ByteBufferConverter);
            await messagingServiceClient.AbandonAsync(messageId);

            // Assert
            deviceListener.VerifyAll();
        }