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); }
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); }
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(); }
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(); }
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(); }