Пример #1
0
        public void TestConfigurableHeaders()
        {
            var message = MessageBuilder <byte[]>
                          .WithPayload(Encoding.UTF8.GetBytes("Hello"))
                          .SetHeader("foo", "bar")
                          .SetHeader("baz", "quxx")
                          .SetHeader("contentType", "text/plain")
                          .Build();

            var headers  = new string[] { "foo" };
            var embedded = EmbeddedHeaderUtils.EmbedHeaders(new MessageValues(message), EmbeddedHeaderUtils.HeadersToEmbed(headers));

            Assert.Equal(0xff, embedded[0]);
            var embeddedString = Encoding.UTF8.GetString(embedded);

            Assert.Equal("\u0002\u000BcontentType\u0000\u0000\u0000\u000C\"text/plain\"\u0003foo\u0000\u0000\u0000\u0005\"bar\"Hello", embeddedString.Substring(1));
            var extracted = EmbeddedHeaderUtils.ExtractHeaders(MessageBuilder <byte[]> .WithPayload(embedded).Build(), false);

            Assert.Equal("Hello", Encoding.UTF8.GetString((byte[])extracted.Payload));
            Assert.Equal("bar", extracted["foo"]);
            Assert.Null(extracted["baz"]);
            Assert.Equal("text/plain", extracted["contentType"]);
            Assert.Null(extracted["timestamp"]);

            var extractedWithRequestHeaders = EmbeddedHeaderUtils.ExtractHeaders(MessageBuilder <byte[]> .WithPayload(embedded).Build(), true);

            Assert.Equal("bar", extractedWithRequestHeaders["foo"]);
            Assert.Null(extractedWithRequestHeaders["baz"]);
            Assert.Equal("text/plain", extractedWithRequestHeaders["contentType"]);
            Assert.NotNull(extractedWithRequestHeaders["timestamp"]);
            Assert.NotNull(extractedWithRequestHeaders["id"]);
            Assert.IsType <long>(extractedWithRequestHeaders["timestamp"]);
            Assert.IsType <Guid>(extractedWithRequestHeaders["id"]);
        }
            public override IMessage PreSend(IMessage message, IMessageChannel channel)
            {
                if (message.Payload is byte[] &&
                    !message.Headers.ContainsKey(BinderHeaders.NATIVE_HEADERS_PRESENT) &&
                    EmbeddedHeaderUtils.MayHaveEmbeddedHeaders((byte[])message.Payload))
                {
                    MessageValues messageValues;
                    try
                    {
                        messageValues = EmbeddedHeaderUtils.ExtractHeaders((IMessage <byte[]>)message, true);
                    }
                    catch (Exception)
                    {
                        /*
                         * debug() rather then error() since we don't know for sure that it
                         * really is a message with embedded headers, it just meets the
                         * criteria in EmbeddedHeaderUtils.mayHaveEmbeddedHeaders().
                         */

                        // this.logger?.LogDebug(EmbeddedHeaderUtils.DecodeExceptionMessage(message), e);
                        messageValues = new MessageValues(message);
                    }

                    return(messageValues.ToMessage());
                }

                return(message);
            }
Пример #3
0
        public void TestBadDecode()
        {
            var bytes = new byte[] { (byte)0xff, 99 };
            IMessage <byte[]> message = new Steeltoe.Messaging.Support.GenericMessage <byte[]>(bytes);

            Assert.Throws <ArgumentOutOfRangeException>(() => EmbeddedHeaderUtils.ExtractHeaders(message, false));
        }
Пример #4
0
        public void TestHeaderExtractionWithDirectPayload()
        {
            var message = MessageBuilder <byte[]>
                          .WithPayload(Encoding.UTF8.GetBytes("Hello"))
                          .SetHeader("foo", "bar")
                          .SetHeader("baz", "quxx")
                          .Build();

            var embedded = EmbeddedHeaderUtils.EmbedHeaders(new MessageValues(message), "foo", "baz");

            Assert.Equal(0xff, embedded[0]);
            var embeddedString = Encoding.UTF8.GetString(embedded);

            Assert.Equal("\u0002\u0003foo\u0000\u0000\u0000\u0005\"bar\"\u0003baz\u0000\u0000\u0000\u0006\"quxx\"Hello", embeddedString.Substring(1));

            var extracted = EmbeddedHeaderUtils.ExtractHeaders(embedded);

            Assert.Equal("Hello", Encoding.UTF8.GetString((byte[])extracted.Payload));
            Assert.Equal("bar", extracted["foo"]);
            Assert.Equal("quxx", extracted["baz"]);
        }
Пример #5
0
        public void TestUnicodeHeader()
        {
            var message = IntegrationMessageBuilder <byte[]>
                          .WithPayload(Encoding.UTF8.GetBytes("Hello"))
                          .SetHeader("foo", "bar")
                          .SetHeader("baz", "ØØØØØØØØ")
                          .Build();

            var embedded = EmbeddedHeaderUtils.EmbedHeaders(new MessageValues(message), "foo", "baz");

            Assert.Equal(0xff, embedded[0]);
            var embeddedString = Encoding.UTF8.GetString(embedded);

            Assert.Equal("\u0002\u0003foo\u0000\u0000\u0000\u0005\"bar\"\u0003baz\u0000\u0000\u0000\u0012\"ØØØØØØØØ\"Hello", embeddedString.Substring(1));

            var extracted = EmbeddedHeaderUtils.ExtractHeaders(IntegrationMessageBuilder <byte[]> .WithPayload(embedded).Build(), false);

            Assert.Equal("Hello", Encoding.UTF8.GetString((byte[])extracted.Payload));
            Assert.Equal("bar", extracted["foo"]);
            Assert.Equal("ØØØØØØØØ", extracted["baz"]);
        }