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