public void Should_extract_body_as_stream_when_configured(string transportEncoding)
        {
            // default settings
            var settings   = DefaultConfigurationValues.Apply(SettingsHolderFactory.BuildWithSerializer());
            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            extensions.BrokeredMessageBodyType(SupportedBrokeredMessageBodyTypes.Stream);

            var converter = new BrokeredMessagesToIncomingMessagesConverter(settings, new FakeMapper(settings, "MyQueue", "MyQueue"));

            var stream = new MemoryStream();
            var writer = new StreamWriter(stream);

            writer.Write("Whatever");
            writer.Flush();
            stream.Position = 0;

            var brokeredMessage = new BrokeredMessage(stream);

            brokeredMessage.Properties[BrokeredMessageHeaders.TransportEncoding] = transportEncoding;

            var incomingMessage = converter.Convert(brokeredMessage);

            var body = Encoding.UTF8.GetString(incomingMessage.Body);

            Assert.AreEqual("Whatever", body);
        }
        public void Should_throw_for_a_message_without_transport_encoding_header_supplied_and_actual_body_type_other_than_default()
        {
            // default settings
            var settings = DefaultConfigurationValues.Apply(SettingsHolderFactory.BuildWithSerializer());

            var converter = new BrokeredMessagesToIncomingMessagesConverter(settings, new FakeMapper(settings, "MyQueue", "MyQueue"));

            var brokeredMessage = new BrokeredMessage("non-default-type");

            Assert.Throws <UnsupportedBrokeredMessageBodyTypeException>(() => converter.Convert(brokeredMessage));
        }
        public void Should_throw_for_a_message_with_unknown_transport_encoding_header_supplied()
        {
            // default settings
            var settings = DefaultConfigurationValues.Apply(SettingsHolderFactory.BuildWithSerializer());

            var converter = new BrokeredMessagesToIncomingMessagesConverter(settings, new FakeMapper(settings, "MyQueue", "MyQueue"));

            var brokeredMessage = new BrokeredMessage("non-default-type");

            brokeredMessage.Properties[BrokeredMessageHeaders.TransportEncoding] = "unknown";

            Assert.Throws <UnsupportedBrokeredMessageBodyTypeException>(() => converter.Convert(brokeredMessage));
        }
        public void Should_copy_properties_into_the_headers()
        {
            // default settings
            var settings = DefaultConfigurationValues.Apply(SettingsHolderFactory.BuildWithSerializer());

            var converter = new BrokeredMessagesToIncomingMessagesConverter(settings, new FakeMapper(settings, "MyQueue", "MyQueue"));

            var brokeredMessage = new BrokeredMessage();

            brokeredMessage.Properties.Add("my-test-prop", "myvalue");

            var incomingMessage = converter.Convert(brokeredMessage);

            Assert.IsTrue(incomingMessage.Headers.Any(h => h.Key == "my-test-prop" && h.Value == "myvalue"));
        }
        public void Should_extract_body_as_byte_array_by_default()
        {
            // default settings
            var settings  = DefaultConfigurationValues.Apply(SettingsHolderFactory.BuildWithSerializer());
            var converter = new BrokeredMessagesToIncomingMessagesConverter(settings, new FakeMapper(settings, "MyQueue", "MyQueue"));

            var bytes           = Encoding.UTF8.GetBytes("Whatever");
            var brokeredMessage = new BrokeredMessage(bytes);

            var incomingMessage = converter.Convert(brokeredMessage);

            var body = Encoding.UTF8.GetString(incomingMessage.Body);

            Assert.AreEqual(body, "Whatever");
        }
        public void Should_not_propagate_transport_encoding_header_from_brokered_message()
        {
            // default settings
            var settings = DefaultConfigurationValues.Apply(SettingsHolderFactory.BuildWithSerializer());

            var bytes           = Encoding.UTF8.GetBytes("Whatever");
            var brokeredMessage = new BrokeredMessage(bytes);

            brokeredMessage.Properties[BrokeredMessageHeaders.TransportEncoding] = "wcf/byte-array";

            var converter = new BrokeredMessagesToIncomingMessagesConverter(settings, new FakeMapper(settings, "MyQueue", "MyQueue"));

            var incomingMessageDetails = converter.Convert(brokeredMessage);

            CollectionAssert.DoesNotContain(incomingMessageDetails.Headers, BrokeredMessageHeaders.TransportEncoding, $"Headers should not contain `{BrokeredMessageHeaders.TransportEncoding}`, but it was found.");
        }
        public void Should_copy_the_message_id()
        {
            // default settings
            var settings = DefaultConfigurationValues.Apply(SettingsHolderFactory.BuildWithSerializer());

            var converter = new BrokeredMessagesToIncomingMessagesConverter(settings, new FakeMapper(settings, "MyQueue", "MyQueue"));

            var brokeredMessage = new BrokeredMessage
            {
                MessageId = "someid"
            };

            var incomingMessage = converter.Convert(brokeredMessage);

            Assert.IsTrue(incomingMessage.MessageId == "someid");
        }
        public void Should_return_empty_byte_array_for_octectstream_encoded_message()
        {
            var message = new BrokeredMessage(null);

            message.Properties[BrokeredMessageHeaders.TransportEncoding] = "application/octect-stream";

            var settings = new SettingsHolder();

            settings.Set(WellKnownConfigurationKeys.Topology.Addressing.Namespaces, new NamespaceConfigurations());
            settings.Set(WellKnownConfigurationKeys.Serialization.BrokeredMessageBodyType, SupportedBrokeredMessageBodyTypes.Stream);

            var converter = new BrokeredMessagesToIncomingMessagesConverter(settings, new DefaultConnectionStringToNamespaceAliasMapper(settings));

            var converted = converter.Convert(message);

            Assert.AreEqual(Array.Empty <byte>(), converted.Body);
        }
        public void Should_complete_replyto_address_if_not_present_in_headers()
        {
            // default settings
            var settings = DefaultConfigurationValues.Apply(SettingsHolderFactory.BuildWithSerializer());

            var converter = new BrokeredMessagesToIncomingMessagesConverter(settings, new FakeMapper(settings, "MyQueue", "MappedMyQueue"));

            var brokeredMessage = new BrokeredMessage(new byte[]
            {
            })
            {
                ReplyTo = "MyQueue"
            };

            var incomingMessage = converter.Convert(brokeredMessage);

            Assert.IsTrue(incomingMessage.Headers.ContainsKey(Headers.ReplyToAddress));
            Assert.AreEqual("MappedMyQueue", incomingMessage.Headers[Headers.ReplyToAddress]);
        }
        public void Should_complete_timetobereceived_if_not_present_in_headers()
        {
            // default settings
            var settings = DefaultConfigurationValues.Apply(SettingsHolderFactory.BuildWithSerializer());

            var converter = new BrokeredMessagesToIncomingMessagesConverter(settings, new FakeMapper(settings, "MyQueue", "MyQueue"));

            var timespan        = TimeSpan.FromHours(1);
            var brokeredMessage = new BrokeredMessage(new byte[]
            {
            })
            {
                TimeToLive = timespan
            };


            var incomingMessage = converter.Convert(brokeredMessage);

            Assert.IsTrue(incomingMessage.Headers.ContainsKey(Headers.TimeToBeReceived));
            Assert.AreEqual(timespan.ToString(), incomingMessage.Headers[Headers.TimeToBeReceived]);
        }