public async Task GetHandlerInfo_FindInnerClassHandlerInfo(
            string message,
            [Frozen] IMessageTypeTopicMap messageTypeTopicMap,
            MessageHandlerInfoProvider sut)
        {
            var messageType = typeof(string);

            messageTypeTopicMap.GetMessageTypes().Returns(new[] { messageType });

            var actual = sut.GetHandlerInfo();

            var handlerInfo = Assert.Single(actual);

            Assert.Equal(messageType, handlerInfo.messageType);
            Assert.Equal(typeof(IMessageHandler <string>), handlerInfo.handlerType);

            bool callbackFired = false;
            var  handler       = new TestStringHandler(m =>
            {
                callbackFired = true;
                Assert.Equal(message, m);
            });
            await handlerInfo.handleMethod(handler, message, None);

            Assert.True(callbackFired);
        }
        public void Constructor_NullMessageHandlerInvoker_ThrowsNullArgument(
            [Frozen] IMessageTypeTopicMap messageTypeTopicMap,
            [Frozen] ISerializer serializer)
        {
            var ex = Assert.Throws <ArgumentNullException>(() => new DispatchingRawMessageHandler(messageTypeTopicMap, serializer, null));

            Assert.Equal("messageHandlerInvoker", ex.ParamName);
        }
        public void Constructor_NullRawMessagePublisher_ThrowsNullArgument(
            [Frozen] IMessageTypeTopicMap messageTypeTopicMap,
            [Frozen] ISerializer serializer)
        {
            var ex = Assert.Throws <ArgumentNullException>(() =>
                                                           new SerializedMessagePublisher(messageTypeTopicMap, serializer, null));

            Assert.Equal("rawMessagePublisher", ex.ParamName);
        }
 public SerializedMessagePublisher(
     IMessageTypeTopicMap typeTopicMap,
     ISerializer serializer,
     IRawMessagePublisher rawMessagePublisher)
 {
     _typeTopicMap        = typeTopicMap ?? throw new ArgumentNullException(nameof(typeTopicMap));
     _rawMessagePublisher = rawMessagePublisher ?? throw new ArgumentNullException(nameof(rawMessagePublisher));
     _serializer          = serializer ?? throw new ArgumentNullException(nameof(serializer));
 }
예제 #5
0
 public DispatchingRawMessageHandler(
     IMessageTypeTopicMap typeTopicMap,
     ISerializer serializer,
     IMessageHandlerInvoker messageHandlerInvoker)
 {
     _messageHandlerInvoker = messageHandlerInvoker ?? throw new ArgumentNullException(nameof(messageHandlerInvoker));
     _typeTopicMap          = typeTopicMap ?? throw new ArgumentNullException(nameof(typeTopicMap));
     _serializer            = serializer ?? throw new ArgumentNullException(nameof(serializer));
 }
        /// <summary>
        /// Creates an instance of <see cref="MessageHandlerInfoProvider"/> with the specified <see cref="IMessageTypeTopicMap"/>
        /// </summary>
        /// <param name="typeTopicMap">A map between Topic names and Message types</param>
        public MessageHandlerInfoProvider(IMessageTypeTopicMap typeTopicMap)
        {
            _typeTopicMap = typeTopicMap ?? throw new ArgumentNullException(nameof(typeTopicMap));

            if (!_typeTopicMap.Any())
            {
                throw new ArgumentException($"{nameof(IMessageTypeTopicMap)} is empty.");
            }
        }
        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);
        }