Exemple #1
0
        public void When_deserializing_versioned_message_use_first_available_message_type()
        {
            var          typeNameSerializer = new DefaultTypeNameSerializer();
            var          serializer         = new JsonSerializer();
            const string correlationId      = "CorrelationId";

            var serializationStrategy = new VersionedMessageSerializationStrategy(typeNameSerializer, serializer, new StaticCorrelationIdGenerationStrategy(correlationId));

            var messageBody = new MyMessageV2 {
                Text = "Hello world!", Number = 5
            };
            var message           = new Message <MyMessageV2>(messageBody);
            var serializedMessage = serializationStrategy.SerializeMessage(message);

            // Mess with the properties to mimic a message serialized as MyMessageV3
            var messageType = serializedMessage.Properties.Type;

            serializedMessage.Properties.Type = messageType.Replace("MyMessageV2", "SomeCompletelyRandomType");
            var alternativeMessageHeader = (string)serializedMessage.Properties.Headers[AlternativeMessageTypesHeaderKey];

            alternativeMessageHeader = string.Concat(messageType, ";", alternativeMessageHeader);
            serializedMessage.Properties.Headers[AlternativeMessageTypesHeaderKey] = Encoding.UTF8.GetBytes(alternativeMessageHeader);

            var deserializedMessage = serializationStrategy.DeserializeMessage(serializedMessage.Properties, serializedMessage.Body);

            Assert.Equal(typeof(MyMessageV2), deserializedMessage.MessageType);
            Assert.Equal(((Message <MyMessageV2>)deserializedMessage).Body.Text, message.Body.Text);
            Assert.Equal(((Message <MyMessageV2>)deserializedMessage).Body.Number, message.Body.Number);
        }
        public DefaultConsumerErrorStrategyTests()
        {
            var configuration = new ConnectionConfiguration
            {
                Hosts = new List <HostConfiguration>
                {
                    new HostConfiguration {
                        Host = "localhost", Port = 5672
                    }
                },
                UserName = "******",
                Password = "******"
            };

            configuration.Validate();

            var typeNameSerializer     = new DefaultTypeNameSerializer();
            var errorMessageSerializer = new DefaultErrorMessageSerializer();

            connectionFactory     = new ConnectionFactoryWrapper(configuration, new RandomClusterHostSelectionStrategy <ConnectionFactoryInfo>());
            serializer            = new JsonSerializer();
            conventions           = new Conventions(typeNameSerializer);
            consumerErrorStrategy = new DefaultConsumerErrorStrategy(
                connectionFactory,
                serializer,
                conventions,
                typeNameSerializer,
                errorMessageSerializer);
        }
Exemple #3
0
        public void When_using_the_versioned_serialization_strategy_versioned_messages_are_correctly_round_tripped()
        {
            var          typeNameSerializer = new DefaultTypeNameSerializer();
            var          serializer         = new JsonSerializer();
            const string correlationId      = "CorrelationId";

            var serializationStrategy = new VersionedMessageSerializationStrategy(typeNameSerializer, serializer, new StaticCorrelationIdGenerationStrategy(correlationId));

            var messageBody = new MyMessageV2 {
                Text = "Hello world!", Number = 5
            };
            var message           = new Message <MyMessageV2>(messageBody);
            var serializedMessage = serializationStrategy.SerializeMessage(message);

            // RMQ converts the Header values into a byte[] so mimic the translation here
            var alternativeMessageHeader = (string)serializedMessage.Properties.Headers[AlternativeMessageTypesHeaderKey];

            serializedMessage.Properties.Headers[AlternativeMessageTypesHeaderKey] = Encoding.UTF8.GetBytes(alternativeMessageHeader);

            var deserializedMessage = serializationStrategy.DeserializeMessage(serializedMessage.Properties, serializedMessage.Body);

            Assert.Equal(deserializedMessage.MessageType, message.Body.GetType());
            Assert.Equal(((Message <MyMessageV2>)deserializedMessage).Body.Text, message.Body.Text);
            Assert.Equal(((Message <MyMessageV2>)deserializedMessage).Body.Number, message.Body.Number);
        }
        public void GetMessageType_returns_message_type_for_a_versioned_message()
        {
            var typeNameSerialiser = new DefaultTypeNameSerializer();
            var property           = MessageTypeProperty.CreateForMessageType(typeof(MyMessageV2), typeNameSerialiser);

            var messageType = property.GetMessageType();

            Assert.Equal(typeof(MyMessageV2), messageType);
        }
        public void AppendTo_sets_message_type_and_alternatives_for_a_versioned_message()
        {
            var typeNameSerialiser = new DefaultTypeNameSerializer();
            var property           = MessageTypeProperty.CreateForMessageType(typeof(MyMessageV2), typeNameSerialiser);
            var properties         = new MessageProperties();

            property.AppendTo(properties);

            Assert.Equal(properties.Type, typeNameSerialiser.Serialize(typeof(MyMessageV2)));
            Assert.Equal(properties.Headers[AlternativeMessageTypesHeaderKey], typeNameSerialiser.Serialize(typeof(MyMessage)));
        }
        public void MessageTypeProperty_is_created_correctly_from_message_properties_for_unversioned_message()
        {
            var typeNameSerialiser = new DefaultTypeNameSerializer();
            var properties         = new MessageProperties {
                Type = typeNameSerialiser.Serialize(typeof(MyMessage))
            };

            var property    = MessageTypeProperty.ExtractFromProperties(properties, typeNameSerialiser);
            var messageType = property.GetMessageType();

            Assert.Equal(typeof(MyMessage), messageType);
        }
Exemple #7
0
        public When_publishing_a_message()
        {
            typeNameSerializer = new DefaultTypeNameSerializer();
            var customConventions = new Conventions(typeNameSerializer)
            {
                ExchangeNamingConvention = x => "CustomExchangeNamingConvention",
                QueueNamingConvention    = (x, y) => "CustomQueueNamingConvention",
                TopicNamingConvention    = x => "CustomTopicNamingConvention"
            };

            mockBuilder = new MockBuilder(x => x.Register <IConventions>(customConventions));
            mockBuilder.PubSub.Publish(new TestMessage());
        }
        public void MessageTypeProperty_is_created_correctly_from_message_properties_for_versioned_message()
        {
            var typeNameSerialiser = new DefaultTypeNameSerializer();
            var properties         = new MessageProperties {
                Type = typeNameSerialiser.Serialize(typeof(MyMessageV2))
            };
            var encodedAlternativeMessageTypes = Encoding.UTF8.GetBytes(typeNameSerialiser.Serialize(typeof(MyMessage)));

            properties.Headers.Add(AlternativeMessageTypesHeaderKey, encodedAlternativeMessageTypes);

            var property    = MessageTypeProperty.ExtractFromProperties(properties, typeNameSerialiser);
            var messageType = property.GetMessageType();

            Assert.Equal(typeof(MyMessageV2), messageType);
        }
        public void When_using_the_default_serialization_strategy_messages_are_correctly_round_tripped_when_null()
        {
            var          typeNameSerializer = new DefaultTypeNameSerializer();
            var          serializer         = new JsonSerializer();
            const string correlationId      = "CorrelationId";

            var serializationStrategy = new DefaultMessageSerializationStrategy(typeNameSerializer, serializer, new StaticCorrelationIdGenerationStrategy(correlationId));

            var message             = new Message <MyMessage>();
            var serializedMessage   = serializationStrategy.SerializeMessage(message);
            var deserializedMessage = serializationStrategy.DeserializeMessage(serializedMessage.Properties, serializedMessage.Body);

            Assert.Equal(deserializedMessage.MessageType, message.MessageType);
            Assert.Null(((Message <MyMessage>)deserializedMessage).Body);
        }
Exemple #10
0
        public void When_using_the_versioned_serialization_strategy_messages_are_correctly_round_tripped()
        {
            var typeNameSerializer = new DefaultTypeNameSerializer();
            var serializer         = new JsonSerializer();

            const string correlationId = "CorrelationId";

            var serializationStrategy = new VersionedMessageSerializationStrategy(typeNameSerializer, serializer, new StaticCorrelationIdGenerationStrategy(correlationId));

            var messageBody = new MyMessage {
                Text = "Hello world!"
            };
            var message             = new Message <MyMessage>(messageBody);
            var serializedMessage   = serializationStrategy.SerializeMessage(message);
            var deserializedMessage = serializationStrategy.DeserializeMessage(serializedMessage.Properties, serializedMessage.Body);

            Assert.Equal(deserializedMessage.MessageType, message.Body.GetType());
            Assert.Equal(((Message <MyMessage>)deserializedMessage).Body.Text, message.Body.Text);
        }
        public void GetType_returns_first_available_alternative_if_message_type_unavailable()
        {
            var typeNameSerialiser = new DefaultTypeNameSerializer();
            var v1                      = typeNameSerialiser.Serialize(typeof(MyMessage));
            var v2                      = typeNameSerialiser.Serialize(typeof(MyMessageV2));
            var vUnknown                = v2.Replace("MyMessageV2", "MyUnknownMessage");
            var alternativeTypes        = string.Concat(v2, ";", v1);
            var encodedAlternativeTypes = Encoding.UTF8.GetBytes(alternativeTypes);

            var properties = new MessageProperties {
                Type = vUnknown
            };

            properties.Headers.Add(AlternativeMessageTypesHeaderKey, encodedAlternativeTypes);

            var property    = MessageTypeProperty.ExtractFromProperties(properties, typeNameSerialiser);
            var messageType = property.GetMessageType();

            Assert.Equal(typeof(MyMessageV2), messageType);
        }
        public void GetType_throws_exception_if_all_types_unavailable()
        {
            var typeNameSerialiser = new DefaultTypeNameSerializer();
            var v2                      = typeNameSerialiser.Serialize(typeof(MyMessageV2));
            var vUnknown1               = v2.Replace("MyMessageV2", "MyUnknownMessage");
            var vUnknown2               = v2.Replace("MyMessageV2", "MyUnknownMessageV2");
            var vUnknown3               = v2.Replace("MyMessageV2", "MyUnknownMessageV3");
            var alternativeTypes        = string.Concat(vUnknown2, ";", vUnknown1);
            var encodedAlternativeTypes = Encoding.UTF8.GetBytes(alternativeTypes);

            var properties = new MessageProperties {
                Type = vUnknown3
            };

            properties.Headers.Add(AlternativeMessageTypesHeaderKey, encodedAlternativeTypes);

            var property = MessageTypeProperty.ExtractFromProperties(properties, typeNameSerialiser);

            Assert.Throws <EasyNetQException>(() => property.GetMessageType());
        }
Exemple #13
0
 public When_using_default_conventions()
 {
     typeNameSerializer = new DefaultTypeNameSerializer();
     conventions        = new Conventions(typeNameSerializer);
 }