Skip to content

Commit 6d93be1

Browse files
authored
Remove newtonsoft hack from rpc (#903)
* Setting message type explicitly * Fix tests
1 parent 9545d6b commit 6d93be1

19 files changed

+76
-75
lines changed

Source/EasyNetQ.Hosepipe.Tests/ErrorMessageRepublishSpike.cs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,24 @@
77
using RabbitMQ.Client;
88
using RabbitMQ.Client.Exceptions;
99
using EasyNetQ.Tests;
10+
using Xunit.Abstractions;
1011

1112
namespace EasyNetQ.Hosepipe.Tests
1213
{
1314
public class ErrorMessageRepublishSpike
1415
{
16+
private readonly ITestOutputHelper testOutputHelper;
1517
readonly ISerializer serializer = new JsonSerializer();
1618

19+
public ErrorMessageRepublishSpike(ITestOutputHelper testOutputHelper)
20+
{
21+
this.testOutputHelper = testOutputHelper;
22+
}
23+
1724
[Fact]
1825
public void Should_deserialise_error_message_correctly()
1926
{
20-
var error = serializer.BytesToMessage<Error>(Encoding.UTF8.GetBytes(errorMessage));
27+
var error = (Error)serializer.BytesToMessage(typeof(Error), Encoding.UTF8.GetBytes(errorMessage));
2128

2229
error.RoutingKey.ShouldEqual("originalRoutingKey");
2330
error.Message.ShouldEqual("{ Text:\"Hello World\"}");
@@ -27,14 +34,14 @@ public void Should_deserialise_error_message_correctly()
2734
public void Should_fail_to_deseralize_some_other_random_message()
2835
{
2936
const string randomMessage = "{\"Text\":\"Hello World\"}";
30-
var error = serializer.BytesToMessage<Error>(Encoding.UTF8.GetBytes(randomMessage));
37+
var error = (Error)serializer.BytesToMessage(typeof(Error), Encoding.UTF8.GetBytes(randomMessage));
3138
error.Message.ShouldBeNull();
3239
}
3340

3441
[Fact][Explicit("Requires a localhost instance of RabbitMQ to run")]
3542
public void Should_be_able_to_republish_message()
3643
{
37-
var error = serializer.BytesToMessage<Error>(Encoding.UTF8.GetBytes(errorMessage));
44+
var error = (Error)serializer.BytesToMessage(typeof(Error), Encoding.UTF8.GetBytes(errorMessage));
3845

3946
var connectionFactory = new ConnectionFactory
4047
{
@@ -59,8 +66,7 @@ public void Should_be_able_to_republish_message()
5966
}
6067
catch (OperationInterruptedException)
6168
{
62-
Console.WriteLine("The exchange, '{0}', described in the error message does not exist on '{1}', '{2}'",
63-
error.Exchange, connectionFactory.HostName, connectionFactory.VirtualHost);
69+
testOutputHelper.WriteLine("The exchange, '{0}', described in the error message does not exist on '{1}', '{2}'", error.Exchange, connectionFactory.HostName, connectionFactory.VirtualHost);
6470
}
6571
}
6672
}

Source/EasyNetQ.Hosepipe/ErrorRetry.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public void RetryErrors(IEnumerable<HosepipeMessage> rawErrorMessages, QueuePara
2424
{
2525
foreach (var rawErrorMessage in rawErrorMessages)
2626
{
27-
var error = serializer.BytesToMessage<Error>(errorMessageSerializer.Deserialize(rawErrorMessage.Body));
27+
var error = (Error)serializer.BytesToMessage(typeof(Error), errorMessageSerializer.Deserialize(rawErrorMessage.Body));
2828
RepublishError(error, parameters);
2929
}
3030
}

Source/EasyNetQ.Tests/ConsumeTests/When_a_consumer_has_multiple_handlers.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public void Dispose()
6060

6161
private void Deliver<T>(T message) where T : class
6262
{
63-
var body = new JsonSerializer().MessageToBytes(message);
63+
var body = new JsonSerializer().MessageToBytes(typeof(T), message);
6464
var properties = new BasicProperties
6565
{
6666
Type = new DefaultTypeNameSerializer().Serialize(typeof(T))

Source/EasyNetQ.Tests/ConsumeTests/When_a_polymorphic_message_is_delivered_to_the_consumer.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
using System;
1+
// ReSharper disable InconsistentNaming
2+
using System;
23
using FluentAssertions;
3-
// ReSharper disable InconsistentNaming
44
using System.Threading;
55
using System.Threading.Tasks;
66
using EasyNetQ.Tests.Mocking;
@@ -29,7 +29,7 @@ public When_a_polymorphic_message_is_delivered_to_the_consumer()
2929
}));
3030

3131
var publishedMessage = new Implementation { Text = "Hello Polymorphs!" };
32-
var body = new JsonSerializer().MessageToBytes(publishedMessage);
32+
var body = new JsonSerializer().MessageToBytes(typeof(Implementation), publishedMessage);
3333
var properties = new BasicProperties
3434
{
3535
Type = new DefaultTypeNameSerializer().Serialize(typeof(Implementation))

Source/EasyNetQ.Tests/ConsumeTests/When_a_responder_is_cancelled.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System;
1+
// ReSharper disable InconsistentNaming
2+
using System;
23
using System.Threading;
34
using System.Threading.Tasks;
45
using EasyNetQ.Events;
@@ -61,7 +62,7 @@ private void DeliverMessage(RpcRequest request)
6162
ReplyTo = conventions.RpcReturnQueueNamingConvention()
6263
};
6364

64-
var body = serializer.MessageToBytes(request);
65+
var body = serializer.MessageToBytes(typeof(RpcRequest), request);
6566

6667
var waiter = new CountdownEvent(2);
6768
mockBuilder.EventBus.Subscribe<PublishedMessageEvent>(x => waiter.Signal());

Source/EasyNetQ.Tests/DefaultMessageSerializationStrategyTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public void When_using_the_default_serialization_strategy_messages_are_correctly
2525
}
2626

2727
[Fact]
28-
public void When_serializing_a_message_with_a_correlationid_it_is_not_overwritten()
28+
public void When_serializing_a_message_with_a_correlation_id_it_is_not_overwritten()
2929
{
3030
const string messageType = "MyMessageTypeName";
3131
var serializedMessageBody = Encoding.UTF8.GetBytes("Hello world!");
@@ -98,18 +98,18 @@ private void AssertMessageDeserializedCorrectly(IMessage<MyMessage> message, str
9898
Assert.Equal(message.Properties.ToString(), expectedMessageProperties); //, "Deserialized message properties do not match expected value");
9999
}
100100

101-
private DefaultMessageSerializationStrategy CreateSerializationStrategy(IMessage<MyMessage> message, string messageType, byte[] messageBody, string correlationId)
101+
private static DefaultMessageSerializationStrategy CreateSerializationStrategy(IMessage<MyMessage> message, string messageType, byte[] messageBody, string correlationId)
102102
{
103103
var typeNameSerializer = Substitute.For<ITypeNameSerializer>();
104104
typeNameSerializer.Serialize(message.MessageType).Returns(messageType);
105105

106106
var serializer = Substitute.For<ISerializer>();
107-
serializer.MessageToBytes(message.GetBody()).Returns(messageBody);
107+
serializer.MessageToBytes(message.MessageType, message.GetBody()).Returns(messageBody);
108108

109109
return new DefaultMessageSerializationStrategy(typeNameSerializer, serializer, new StaticCorrelationIdGenerationStrategy(correlationId));
110110
}
111111

112-
private DefaultMessageSerializationStrategy CreateDeserializationStrategy(IMessage<MyMessage> message, byte[] messageBody, string correlationId)
112+
private static DefaultMessageSerializationStrategy CreateDeserializationStrategy(IMessage<MyMessage> message, byte[] messageBody, string correlationId)
113113
{
114114
var typeNameSerializer = Substitute.For<ITypeNameSerializer>();
115115
typeNameSerializer.DeSerialize(message.Properties.Type).Returns(message.Body.GetType());

Source/EasyNetQ.Tests/Integration/ConsumerErrorConditionsTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public void Should_wrap_error_messages_correctly()
9595
CorrelationId = correlationId
9696
};
9797

98-
bus.Advanced.Publish(exchange, typeNameSerializer.Serialize(typeof(MyErrorTestMessage)), true, props, serializer.MessageToBytes(message));
98+
bus.Advanced.Publish(exchange, typeNameSerializer.Serialize(typeof(MyErrorTestMessage)), true, props, serializer.MessageToBytes(typeof(MyErrorTestMessage), message));
9999

100100
// give the publish a chance to get to rabbit and back
101101
// also allow the DefaultConsumerErrorStrategy time to spin up its connection

Source/EasyNetQ.Tests/Integration/DefaultConsumerErrorStrategyTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public void Should_handle_an_exception_by_writing_to_the_error_queue()
8585
}
8686
else
8787
{
88-
var message = serializer.BytesToMessage<Error>(getArgs.Body);
88+
var message = (Error)serializer.BytesToMessage(typeof(Error), getArgs.Body);
8989

9090
message.RoutingKey.Should().Be(context.Info.RoutingKey);
9191
message.Exchange.Should().Be(context.Info.Exchange);

Source/EasyNetQ.Tests/JsonSerializerTests.cs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,30 @@ namespace EasyNetQ.Tests
1111
{
1212
public class JsonSerializerTests
1313
{
14-
private ISerializer serializer;
14+
private readonly ISerializer serializer;
1515

1616
public JsonSerializerTests()
1717
{
1818
serializer = new JsonSerializer();
1919
}
20+
21+
[Fact]
22+
public void Should_be_able_to_serialize_and_deserialize_a_default_message()
23+
{
24+
var binaryMessage = serializer.MessageToBytes(typeof(MyMessage), default(MyMessage));
25+
var deserializedMessage = (MyMessage)serializer.BytesToMessage(typeof(MyMessage), binaryMessage);
26+
deserializedMessage.Should().BeNull();
27+
}
2028

2129
[Fact]
2230
public void Should_be_able_to_serialize_and_deserialize_a_message()
2331
{
2432
var message = new MyMessage {Text = "Hello World"};
2533

26-
var binaryMessage = serializer.MessageToBytes(message);
27-
var deseralizedMessage = serializer.BytesToMessage<MyMessage>(binaryMessage);
34+
var binaryMessage = serializer.MessageToBytes(typeof(MyMessage), message);
35+
var deserializedMessage = (MyMessage)serializer.BytesToMessage(typeof(MyMessage), binaryMessage);
2836

29-
message.Text.Should().Be(deseralizedMessage.Text);
37+
message.Text.Should().Be(deserializedMessage.Text);
3038
}
3139

3240
[Fact]
@@ -55,8 +63,8 @@ public void Should_be_able_to_serialize_basic_properties()
5563
};
5664

5765
var messageBasicProperties = new MessageProperties(originalProperties);
58-
var binaryMessage = serializer.MessageToBytes(messageBasicProperties);
59-
var deserializedMessageBasicProperties = serializer.BytesToMessage<MessageProperties>(binaryMessage);
66+
var binaryMessage = serializer.MessageToBytes(typeof(MessageProperties), messageBasicProperties);
67+
var deserializedMessageBasicProperties = (MessageProperties)serializer.BytesToMessage(typeof(MessageProperties), binaryMessage);
6068

6169
var newProperties = new BasicProperties();
6270
deserializedMessageBasicProperties.CopyTo(newProperties);
@@ -81,17 +89,17 @@ class PolyMessage
8189
[Fact]
8290
public void Should_be_able_to_serialize_and_deserialize_polymorphic_properties()
8391
{
84-
var bytes = serializer.MessageToBytes<PolyMessage>(new PolyMessage { AorB = new B() });
92+
var bytes = serializer.MessageToBytes(typeof(PolyMessage), new PolyMessage { AorB = new B() });
8593

86-
var result = serializer.BytesToMessage<PolyMessage>(bytes);
94+
var result = (PolyMessage)serializer.BytesToMessage(typeof(PolyMessage), bytes);
8795

8896
Assert.IsType<B>(result.AorB);
8997
}
9098

9199
[Fact]
92100
public void Should_be_able_to_serialize_and_deserialize_polymorphic_properties_when_using_TypeNameSerializer()
93101
{
94-
var bytes = serializer.MessageToBytes(new PolyMessage { AorB = new B() });
102+
var bytes = serializer.MessageToBytes(typeof(PolyMessage), new PolyMessage { AorB = new B() });
95103
var result = (PolyMessage)serializer.BytesToMessage(typeof(PolyMessage), bytes);
96104

97105
Assert.IsType<B>(result.AorB);

Source/EasyNetQ.Tests/MessageVersioningTests/VersionedMessageSerializationStrategyTests.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public void When_using_the_versioned_serialization_strategy_messages_are_correct
3030
}
3131

3232
[Fact]
33-
public void When_serializing_a_message_with_a_correlationid_it_is_not_overwritten()
33+
public void When_serializing_a_message_with_a_correlation_id_it_is_not_overwritten()
3434
{
3535
const string messageType = "MyMessageTypeName";
3636
var serializedMessageBody = Encoding.UTF8.GetBytes("Hello world!");
@@ -115,7 +115,7 @@ public void When_using_the_versioned_serialization_strategy_versioned_messages_a
115115
}
116116

117117
[Fact]
118-
public void When_serializing_a_versioned_message_with_a_correlationid_it_is_not_overwritten()
118+
public void When_serializing_a_versioned_message_with_a_correlation_id_it_is_not_overwritten()
119119
{
120120
const string messageType = "MyMessageV2TypeName";
121121
const string supersededMessageType = "MyMessageTypeName";
@@ -220,33 +220,33 @@ public void When_deserializing_versioned_message_use_first_available_message_typ
220220
Assert.Equal(((Message<MyMessageV2>)deserializedMessage).Body.Number, message.Body.Number);
221221
}
222222

223-
private void AssertMessageSerializedCorrectly(SerializedMessage message, byte[] expectedBody, Action<MessageProperties> assertMessagePropertiesCorrect)
223+
private static void AssertMessageSerializedCorrectly(SerializedMessage message, byte[] expectedBody, Action<MessageProperties> assertMessagePropertiesCorrect)
224224
{
225225
Assert.Equal(message.Body, expectedBody); //, "Serialized message body does not match expected value");
226226
assertMessagePropertiesCorrect(message.Properties); //;
227227
}
228228

229-
private void AssertMessageDeserializedCorrectly(IMessage<MyMessage> message, string expectedBodyText, Type expectedMessageType, Action<MessageProperties> assertMessagePropertiesCorrect)
229+
private static void AssertMessageDeserializedCorrectly(IMessage<MyMessage> message, string expectedBodyText, Type expectedMessageType, Action<MessageProperties> assertMessagePropertiesCorrect)
230230
{
231231
Assert.Equal(message.Body.Text, expectedBodyText); //, "Deserialized message body text does not match expected value");
232232
Assert.Equal(message.MessageType, expectedMessageType); //, "Deserialized message type does not match expected value");
233233

234234
assertMessagePropertiesCorrect(message.Properties);
235235
}
236236

237-
private void AssertDefaultMessagePropertiesCorrect(MessageProperties properties, string expectedType, string expectedCorrelationId)
237+
private static void AssertDefaultMessagePropertiesCorrect(MessageProperties properties, string expectedType, string expectedCorrelationId)
238238
{
239239
Assert.Equal(properties.Type, expectedType); //, "Message type does not match expected value");
240240
Assert.Equal(properties.CorrelationId, expectedCorrelationId); //, "Message correlation id does not match expected value");
241241
}
242242

243-
private void AssertVersionedMessagePropertiesCorrect(MessageProperties properties, string expectedType, string expectedCorrelationId, string alternativeTypes)
243+
private static void AssertVersionedMessagePropertiesCorrect(MessageProperties properties, string expectedType, string expectedCorrelationId, string alternativeTypes)
244244
{
245245
AssertDefaultMessagePropertiesCorrect(properties, expectedType, expectedCorrelationId);
246246
Assert.Equal(properties.Headers[AlternativeMessageTypesHeaderKey], alternativeTypes); //, "Alternative message types do not match expected value");
247247
}
248248

249-
private VersionedMessageSerializationStrategy CreateSerializationStrategy<T>(IMessage<T> message, IEnumerable<KeyValuePair<string, Type>> messageTypes, byte[] messageBody, string correlationId) where T : class
249+
private static VersionedMessageSerializationStrategy CreateSerializationStrategy<T>(IMessage<T> message, IEnumerable<KeyValuePair<string, Type>> messageTypes, byte[] messageBody, string correlationId) where T : class
250250
{
251251
var typeNameSerializer = Substitute.For<ITypeNameSerializer>();
252252
foreach (var messageType in messageTypes)
@@ -256,12 +256,12 @@ private VersionedMessageSerializationStrategy CreateSerializationStrategy<T>(IMe
256256
}
257257

258258
var serializer = Substitute.For<ISerializer>();
259-
serializer.MessageToBytes(message.GetBody()).Returns(messageBody);
259+
serializer.MessageToBytes(typeof(T), message.GetBody()).Returns(messageBody);
260260

261261
return new VersionedMessageSerializationStrategy(typeNameSerializer, serializer, new StaticCorrelationIdGenerationStrategy(correlationId));
262262
}
263263

264-
private VersionedMessageSerializationStrategy CreateDeserializationStrategy<T>(T message, IEnumerable<KeyValuePair<string, Type>> messageTypes, Type expectedMessageType, byte[] messageBody) where T : class
264+
private static VersionedMessageSerializationStrategy CreateDeserializationStrategy<T>(T message, IEnumerable<KeyValuePair<string, Type>> messageTypes, Type expectedMessageType, byte[] messageBody) where T : class
265265
{
266266
var typeNameSerializer = Substitute.For<ITypeNameSerializer>();
267267
foreach (var messageType in messageTypes)

0 commit comments

Comments
 (0)