예제 #1
0
        public void TestToMessage_NoTopicMatch()
        {
            var outputTemplates = new Dictionary <string, string>
            {
                ["Dummy"] = string.Empty
            };
            var inputTemplates = new List <string>
            {
                "devices/{deviceId}/messages/events/{params}/",
                "devices/{deviceId}/messages/events/"
            };
            var config = new MessageAddressConversionConfiguration(
                inputTemplates,
                outputTemplates);
            var converter              = new MessageAddressConverter(config);
            var properties             = new Dictionary <string, string>();
            var protocolGatewayMessage = Mock.Of <IProtocolGatewayMessage>(
                m =>
                m.Address == @"devices/Device_6/messages/eve/%24.cid=Corrid1&%24.mid=MessageId1&Foo=Bar&Prop2=Value2&Prop3=Value3/" &&
                m.Payload.Equals(Payload) &&
                m.Properties == properties);

            var protocolGatewayMessageConverter = new ProtocolGatewayMessageConverter(converter, ByteBufferConverter);

            Assert.Throws <InvalidOperationException>(() => protocolGatewayMessageConverter.ToMessage(protocolGatewayMessage));
        }
        public void TestToMessage_Module()
        {
            var outputTemplates = new Dictionary <string, string>
            {
                ["Dummy"] = ""
            };
            var inputTemplates = new List <string>
            {
                "devices/{deviceId}/messages/events/{params}/",
                "devices/{deviceId}/messages/events/",
                "devices/{deviceId}/modules/{moduleId}/messages/events/{params}/",
                "devices/{deviceId}/modules/{moduleId}/messages/events/"
            };
            var config = new MessageAddressConversionConfiguration(
                inputTemplates,
                outputTemplates
                );
            var converter              = new MessageAddressConverter(config);
            var properties             = new Dictionary <string, string>();
            var protocolGatewayMessage = Mock.Of <IProtocolGatewayMessage>(
                m =>
                m.Address == @"devices/Device_6/modules/SensorModule/messages/events/%24.cid=Corrid1&%24.mid=MessageId1&Foo=Bar&Prop2=Value2&Prop3=Value3/" &&
                m.Payload.Equals(Payload) &&
                m.Properties == properties
                );

            var      protocolGatewayMessageConverter = new ProtocolGatewayMessageConverter(converter, ByteBufferConverter);
            IMessage message = protocolGatewayMessageConverter.ToMessage(protocolGatewayMessage);

            Assert.NotNull(message);

            Assert.Equal(4, message.SystemProperties.Count);
            Assert.Equal("Corrid1", message.SystemProperties[SystemProperties.MsgCorrelationId]);
            Assert.Equal("MessageId1", message.SystemProperties[SystemProperties.MessageId]);
            Assert.Equal("Device_6", message.SystemProperties[SystemProperties.ConnectionDeviceId]);
            Assert.Equal("SensorModule", message.SystemProperties[SystemProperties.ConnectionModuleId]);

            Assert.Equal(3, message.Properties.Count);
            Assert.Equal("Bar", message.Properties["Foo"]);
            Assert.Equal("Value2", message.Properties["Prop2"]);
            Assert.Equal("Value3", message.Properties["Prop3"]);
        }
예제 #3
0
        public void TestToMessage_AllSystemProperties()
        {
            var outputTemplates = new Dictionary <string, string>
            {
                ["Dummy"] = string.Empty
            };
            var inputTemplates = new List <string>
            {
                "devices/{deviceId}/messages/events/{params}/",
                "devices/{deviceId}/messages/events/"
            };
            var config = new MessageAddressConversionConfiguration(
                inputTemplates,
                outputTemplates);
            var converter  = new MessageAddressConverter(config);
            var properties = new Dictionary <string, string>();

            var address = new StringBuilder();

            // base address
            address.Append("devices/Device_6/messages/events/");

            // append all system properties
            // correlation id
            address.Append($"{HttpUtility.UrlEncode("$.cid")}=1234");
            // message id
            address.Append($"&{HttpUtility.UrlEncode("$.mid")}=mid1");
            // to
            address.Append($"&{HttpUtility.UrlEncode("$.to")}=d2");
            // userId
            address.Append($"&{HttpUtility.UrlEncode("$.uid")}=u1");
            // output name
            address.Append($"&{HttpUtility.UrlEncode("$.on")}=op1");
            // contentType
            address.Append($"&{HttpUtility.UrlEncode("$.ct")}={HttpUtility.UrlEncode("application/json")}");
            // content encoding
            address.Append($"&{HttpUtility.UrlEncode("$.ce")}={HttpUtility.UrlEncode("utf-8")}");
            // messageSchema
            address.Append($"&{HttpUtility.UrlEncode("$.schema")}=someschema");
            // creation time
            address.Append($"&{HttpUtility.UrlEncode("$.ctime")}={HttpUtility.UrlEncode("2018-01-31")}");
            // component name
            address.Append($"&{HttpUtility.UrlEncode("$.sub")}=testComponent");

            // add custom properties
            address.Append("&Foo=Bar&Prop2=Value2&Prop3=Value3/");

            var protocolGatewayMessage = Mock.Of <IProtocolGatewayMessage>(
                m =>
                m.Address == address.ToString() &&
                m.Payload.Equals(Payload) &&
                m.Properties == properties);

            var      protocolGatewayMessageConverter = new ProtocolGatewayMessageConverter(converter, ByteBufferConverter);
            IMessage message = protocolGatewayMessageConverter.ToMessage(protocolGatewayMessage);

            Assert.NotNull(message);

            Assert.Equal(11, message.SystemProperties.Count);
            Assert.Equal("1234", message.SystemProperties[SystemProperties.MsgCorrelationId]);
            Assert.Equal("mid1", message.SystemProperties[SystemProperties.MessageId]);
            Assert.Equal("d2", message.SystemProperties[SystemProperties.To]);
            Assert.Equal("u1", message.SystemProperties[SystemProperties.UserId]);
            Assert.Equal("op1", message.SystemProperties[SystemProperties.OutputName]);
            Assert.Equal("application/json", message.SystemProperties[SystemProperties.ContentType]);
            Assert.Equal("utf-8", message.SystemProperties[SystemProperties.ContentEncoding]);
            Assert.Equal("someschema", message.SystemProperties[SystemProperties.MessageSchema]);
            Assert.Equal("2018-01-31", message.SystemProperties[SystemProperties.CreationTime]);
            Assert.Equal("Device_6", message.SystemProperties[SystemProperties.ConnectionDeviceId]);
            Assert.Equal("testComponent", message.SystemProperties[SystemProperties.ComponentName]);

            Assert.Equal(3, message.Properties.Count);
            Assert.Equal("Bar", message.Properties["Foo"]);
            Assert.Equal("Value2", message.Properties["Prop2"]);
            Assert.Equal("Value3", message.Properties["Prop3"]);
        }