///<inheritdoc /> public Task Publish <TMessage>(TMessage message, CancellationToken token) { if (message == null) { throw new ArgumentNullException(nameof(message)); } var topic = _typeTopicMap.Get(message.GetType()); if (topic == null) { throw new InvalidOperationException( $"Message type {message.GetType()} is not registered with: {_typeTopicMap.GetType()}."); } var serialized = _serializer.Serialize(message); if (serialized == null) { throw new InvalidOperationException( $"Serializer {_serializer.GetType()} returned null for message of type {message.GetType()}."); } return(_rawMessagePublisher.Publish(topic, serialized, token)); }
///<inheritdoc /> public Task Handle(string topic, byte[] message, CancellationToken token) { if (topic == null) { throw new ArgumentNullException(nameof(topic)); } if (message == null) { throw new ArgumentNullException(nameof(message)); } var messageType = _typeTopicMap.Get(topic); if (messageType == null) { throw new InvalidOperationException( $"Topic '{topic}' has no message type registered with: {_typeTopicMap.GetType()}."); } var deserialized = _serializer.Deserialize(messageType, message); if (deserialized == null) { throw new InvalidOperationException( $"Serializer {_serializer.GetType()} returned null for the {message.Length}-byte message of type {messageType}."); } return(_messageHandlerInvoker.Invoke(deserialized, token)); }
public async Task Handle_TopicMapNotDefined_ThrowsInvalidOperation( string topic, [Frozen] IMessageTypeTopicMap messageTypeTopicMap, DispatchingRawMessageHandler sut) { messageTypeTopicMap.Get(topic).ReturnsNull(); var ex = await Assert.ThrowsAsync <InvalidOperationException>(() => sut.Handle(topic, new byte[0], None)); Assert.Equal($"Topic '{topic}' has no message type registered with: {messageTypeTopicMap.GetType()}.", ex.Message); }
public async Task Publish_TopicMapNotDefined_ThrowsInvalidOperation( string message, [Frozen] IMessageTypeTopicMap messageTypeTopicMap, SerializedMessagePublisher sut) { messageTypeTopicMap.Get(message.GetType()).ReturnsNull(); var ex = await Assert.ThrowsAsync <InvalidOperationException>(() => sut.Publish(message, None)); Assert.Equal($"Message type {message.GetType()} is not registered with: {messageTypeTopicMap.GetType()}.", ex.Message); }
public async Task Handle_DeserializerReturnsNull_ThrowsInvalidOperation( string topic, byte[] message, [Frozen] IMessageTypeTopicMap messageTypeTopicMap, [Frozen] ISerializer serializer, DispatchingRawMessageHandler sut) { var messageType = GetType(); messageTypeTopicMap.Get(topic).Returns(messageType); serializer.Deserialize(messageType, message).ReturnsNull(); var ex = await Assert.ThrowsAsync <InvalidOperationException>(() => sut.Handle(topic, message, None)); Assert.Equal($"Serializer {serializer.GetType()} returned null for the {message.Length}-byte message of type {messageType}.", ex.Message); }
public async Task Publish_SerializerReturnsNull_ThrowsInvalidOperation( string topic, string message, [Frozen] IMessageTypeTopicMap messageTypeTopicMap, [Frozen] ISerializer serializer, SerializedMessagePublisher sut) { var messageType = GetType(); messageTypeTopicMap.Get(topic).Returns(messageType); serializer.Serialize(message).ReturnsNull(); var ex = await Assert.ThrowsAsync <InvalidOperationException>(() => sut.Publish(message, None)); Assert.Equal( $"Serializer {serializer.GetType()} returned null for message of type {message.GetType()}.", ex.Message); }
public async Task Handle_DeserializedMessage_CallsInvoker( string topic, byte[] message, object deserializedObject, [Frozen] IMessageHandlerInvoker messageHandlerInvoker, [Frozen] IMessageTypeTopicMap messageTypeTopicMap, [Frozen] ISerializer serializer, DispatchingRawMessageHandler sut) { // Arrange var messageType = GetType(); messageTypeTopicMap.Get(topic).Returns(messageType); serializer.Deserialize(messageType, message).Returns(deserializedObject); // Act await sut.Handle(topic, message, None); // Assert await messageHandlerInvoker.Received().Invoke(deserializedObject, None); }
public async Task Publish_SerializedMessage_CallsRawPublisher( string topic, bool message, byte[] serializedMessage, [Frozen] IRawMessagePublisher rawMessagePublisher, [Frozen] IMessageTypeTopicMap messageTypeTopicMap, [Frozen] ISerializer serializer, SerializedMessagePublisher sut) { // Arrange var messageType = message.GetType(); messageTypeTopicMap.Get(messageType).Returns(topic); serializer.Serialize(message).Returns(serializedMessage); // Act await sut.Publish(message, None); // Assert await rawMessagePublisher.Received().Publish(topic, serializedMessage, None); }