예제 #1
0
        public void When_deserializing_versioned_message_use_first_available_message_type()
        {
            var          typeNameSerializer = new TypeNameSerializer();
            var          serializer         = new JsonSerializer(typeNameSerializer);
            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 serialised 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.That(deserializedMessage.Message.Body.GetType(), Is.EqualTo(typeof(MyMessageV2)));
            Assert.That(deserializedMessage.Message.Body.Text, Is.EqualTo(message.Body.Text));
            Assert.That(deserializedMessage.Message.Body.Number, Is.EqualTo(message.Body.Number));
        }
예제 #2
0
        public void When_using_the_versioned_serialization_strategy_versioned_messages_are_correctly_round_tripped()
        {
            var          typeNameSerializer = new TypeNameSerializer();
            var          serializer         = new JsonSerializer(typeNameSerializer);
            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.That(deserializedMessage.Message.Body.GetType(), Is.EqualTo(message.Body.GetType()));
            Assert.That(deserializedMessage.Message.Body.Text, Is.EqualTo(message.Body.Text));
            Assert.That(deserializedMessage.Message.Body.Number, Is.EqualTo(message.Body.Number));
        }
예제 #3
0
        public void When_using_the_versioned_serialization_strategy_messages_are_correctly_round_tripped()
        {
            var          typeNameSerializer    = new TypeNameSerializer();
            var          serializer            = new JsonSerializer(typeNameSerializer);
            const string correlationId         = "CorrelationId";
            var          serializationStrategy = new VersionedMessageSerializationStrategy(typeNameSerializer, serializer, () => 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.That(deserializedMessage.Message.Body.GetType(), Is.EqualTo(message.Body.GetType()));
            Assert.That(deserializedMessage.Message.Body.Text, Is.EqualTo(message.Body.Text));
        }
예제 #4
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);
        }