Inheritance: MonoBehaviour
        public void One_Publisher_One_Subscriber_Batch_Broadcast()
        {
            using (var publisher = new Publisher())
            using (var subscriber = new Subscriber())
            {
                var endpoint = GetEndpoint();
                publisher.Bind(endpoint);
                subscriber.Connect(endpoint);

                Thread.Sleep(100);

                var counterSignal = new CounterSignal(NumberOfMessagesToReceive);
                subscriber.MessageReceived += (s, m) => counterSignal.Increment();

                var messageSent = new TestMessage();

                var batch = new List<TestMessage>();
                for (var i = 0; i < NumberOfMessagesToReceive; i++)
                    batch.Add(messageSent);

                var sw = Stopwatch.StartNew();
                publisher.Broadcast(batch);
                Assert.IsTrue(counterSignal.Wait(TimeOut), "Timeout waiting for message");
                sw.Stop();

                Assert.Inconclusive("{0} elapsed reading {1} messages ({2:N0} per second)", sw.Elapsed, NumberOfMessagesToReceive, NumberOfMessagesToReceive / sw.Elapsed.TotalSeconds);
            }
        }
        public void SerialiseMessageWithGuid()
        {
            var message = new TestMessage { Id = Guid.Parse("C50DDB56-B827-46E3-9D7D-ACB701882624") };
             var serialisedMessage = this.componentUnderTest.Serialise(message);

             Assert.That(serialisedMessage, Is.EqualTo(MessageWithGuid));
        }
Esempio n. 3
0
		public void Should_properly_arrive_at_the_destination()
		{
			var serviceUri = new Uri("net.pipe://localhost/pipe");
			string pipeName = "test";

			var future = new Future<TestMessage>();
			var message = new TestMessage
				{
					Id = Guid.NewGuid(),
					Name = "Alpha",
				};

			UntypedChannel adapter = new ChannelAdapter();
			using (var remote = new WcfChannelHost(new SynchronousFiber(), adapter, serviceUri, pipeName))
			{
				using (adapter.Connect(x =>
					{
						x.AddConsumerOf<TestMessage>()
							.UsingConsumer(m => future.Complete(m));
					}))
				{
					var client = new WcfChannelProxy(new SynchronousFiber(), serviceUri, pipeName);

					client.Send(message);

					future.WaitUntilCompleted(2.Seconds()).ShouldBeTrue();
				}
			}

			future.Value.ShouldNotBeNull();
			future.Value.ShouldEqual(message);
			future.Value.ShouldNotBeTheSameAs(message);
		}
 public void ShouldForwardPolymorphicMessage()
 {
     var handler = new TestEventHandler();
     var message = new TestMessage();
     EventFns.Forward(handler, message);
     Assert.IsTrue(handler.IMessageHandled, "Message should have been handled");
 }
        public void ServiceQueue_1_Writer_1_Reader(ServiceQueueRotationAlgorithm algorithm)
        {
            using (var serviceQueue = new ServiceQueue(algorithm))
            using (var reader = new ServiceQueueReader())
            using (var writer = new ServiceQueueWriter())
            {
                var endpoint = GetEndpoint();
                serviceQueue.Bind(endpoint);

                var counterSignal = new CounterSignal(NumberOfMessages, 0);
                reader.MessageReceived += (s, m) => counterSignal.Increment();

                reader.Connect(endpoint);
                writer.Connect(endpoint);

                var messageSent = new TestMessage();

                var sw = Stopwatch.StartNew();
                for (var i = 0; i < NumberOfMessages; i++)
                {
                    writer.SendMessage(messageSent);
                }
                Assert.IsTrue(counterSignal.Wait(TimeOut), "Timeout waiting for message");
                sw.Stop();

                Assert.Inconclusive("{0} elapsed reading {1} messages ({2:N0} per second)", sw.Elapsed, NumberOfMessages, NumberOfMessages / sw.Elapsed.TotalSeconds);

            }
        }
        public void SetsTheValueOfTheMessageProperty()
        {
            var message = new TestMessage();

            var routeResult = new RouteResult(message, null);

            Assert.That(routeResult.Message, Is.SameAs(message));
        }
Esempio n. 7
0
        public void Should_be_able_to_serialize_and_deserialize_a_message()
        {
            var initialMessage = new TestMessage {Text = "Hello!"};
            var serializedMessage = serializer.MessageToBytes(initialMessage);
            var deserializedMessage = serializer.BytesToMessage<TestMessage>(serializedMessage);

            deserializedMessage.Text.ShouldEqual(initialMessage.Text);
        }
Esempio n. 8
0
 public void TestBroker()
 {
     TestMessage message = new TestMessage {Id = Guid.NewGuid(), Text = "Some text"};
     MessageBroker broker = new MessageBroker();
     broker.Write(message);
     TestMessage readMessage = broker.Read<TestMessage>(0);
     Assert.IsNotNull(readMessage);
 }
 public void GetInstance_NullInstanceContext()
 {
     var data = new ServiceImplementationData();
     var container = new ContainerBuilder().Build();
     var provider = new AutofacInstanceProvider(container, data);
     var message = new TestMessage();
     Assert.Throws<ArgumentNullException>(() => provider.GetInstance(null, message));
 }
		public void send_waiting_message_fires_event_hooks ()
		{
			var msg = new TestMessage();
			((SenderNode)_subject).SendMessage(msg);

			_eventHook1.Received().MessageSent(msg);
			_eventHook2.Received().MessageSent(msg);
		}
        public void Definition_should_allow_to_retrieve_proper_correlation_id()
        {
            var message = new TestMessage { FirstId = Guid.NewGuid(), SecondId = Guid.NewGuid() };
            var def1 = MessageDefinition.Create<TestMessage>(m => m.FirstId);
            var def2 = MessageDefinition.Create<TestMessage>(m => m.SecondId);

            Assert.That(def1.GetCorrelationId(message), Is.EqualTo(message.FirstId), "It should use FirstId");
            Assert.That(def2.GetCorrelationId(message), Is.EqualTo(message.SecondId), "It should use SecondId");
        }
		public void ExpectExceptionForUnreadableData()
		{
			var message = new TestMessage { content = "This message cannot be resolved!", ID = 0 };
			var memoryStream = new MemoryStream(new byte[64]);
			var binaryWriter = new BinaryWriter(memoryStream);
			binaryWriter.Write(BinaryDataExtensions.ToByteArray(message));
			memoryStream.Position = 0;
			var binaryReader = new BinaryReader(memoryStream);
			Assert.Throws<TypeLoadException>(() => binaryReader.Create());
		}
        public void Publish_calls_the_method_on_subscriber()
        {
            var simplePublishWay = new SimpleDispatcher();
            var message = new TestMessage();
            var handler = new TestHandler();

            simplePublishWay.Invoke(message, handler);

            Assert.That(handler.TestMessage, Is.SameAs(message));
        }
Esempio n. 14
0
        public async Task WaitsForFirstMessage() {
            var task = this.EventManager.WaitFor<TestMessage, SecondTestMessage>();
            var testMessage = new TestMessage();
            this.MessageBus.Send(testMessage);
            this.React();

            var result = await task;

            Assert.AreEqual(result, testMessage);
        }
        public void SerialiseAndDeserialiseMessage()
        {
            var componentUnderTest = new JsonMessageSerialiser();

             var message = new TestMessage();
             var serialisedMessage = componentUnderTest.Serialise(message);
             var deserialisedMessage = componentUnderTest.Deserialise(serialisedMessage, typeof(TestMessage));

             Assert.That(deserialisedMessage, Is.Not.Null);
        }
        private static void AssertDispatchesCall(SynchronizationContextDispatcher dispatcher)
        {
            var handler = new TestHandler();
            var message = new TestMessage();

            dispatcher.Invoke(message, handler);

            handler.Called.WaitOne(1000);

            Assert.That(handler.TestMessage, Is.SameAs(message));
        }
Esempio n. 17
0
        public void Should_no_throw_if_no_dispatcher_found_and_set_to_ignore()
        {
            var assignee = new SimpleSubscriber();
            var handler = new TestHandler();
            var message = new TestMessage();
            var publisher = new Publisher(new PublisherSettings{IgnoreNoDispatcher = true},assignee, new[] { new SimpleDispatcher(new Rule(x => false)) });

            assignee.Subscribe(handler);

            Should.NotThrow(() => publisher.Publish(message));
        }
 private void When_I_Send_A_Message()
 {
     try
     {
         _testMessage = new TestMessage();
         _messageBus.Send(_testMessage);
     }
     catch (NoHandlerException e)
     {
         _expectedException = e;
     }
 }
        public async Task Reply_ShouldContainMessageInRepliedMessages()
        {
            var context = new TestableMessageHandlerContext();
            var messageInstance = new TestMessage();
            var publishOptions = new ReplyOptions();

            await context.Reply(messageInstance, publishOptions);

            Assert.AreEqual(1, context.RepliedMessages.Length);
            Assert.AreSame(messageInstance, context.RepliedMessages[0].Message);
            Assert.AreSame(publishOptions, context.RepliedMessages[0].Options);
        }
        public void Publish_calls_the_method_on_subscriber()
        {
            var simplePublishWay = new SimpleDispatcher();
            var message = new TestMessage();
            var handler = new TestHandler();
            var tuple = new MessageHandlerTuple(message, handler);

            var result = simplePublishWay.TryInvoke(ref tuple);

            Assert.That(result, Is.True);
            Assert.That(handler.TestMessage, Is.SameAs(message));
        }
Esempio n. 21
0
        public void SubscribeAndPublish()
        {
            var message = new TestMessage (this);

            messenger.Subscribe<TestMessage> (m => {

                Assert.That (m, Is.EqualTo (message));
                Assert.That (m.Sender, Is.EqualTo (this));
            });

            messenger.Publish (message);
        }
Esempio n. 22
0
        public void Should_not_fail_if_onle_one_dispatcher_can_dispath_message()
        {
            var assignee = new SimpleSubscriber();
            var dispatcher = new SimpleDispatcher();
            var handler = new TestHandler();
            var message = new TestMessage();
            var publisher = new Publisher(assignee, new[] { dispatcher, new SimpleDispatcher(new Rule(x => false)) });

            assignee.Subscribe(handler);

            Should.NotThrow(() => publisher.Publish(message));
        }
Esempio n. 23
0
        public void Should_not_throw_if_multiple_dispather_can_dispatch_a_message_and_set_to_ignore()
        {
            var assignee = new SimpleSubscriber();
            var dispatcher = new SimpleDispatcher();
            var handler = new TestHandler();
            var message = new TestMessage();
            var publisher = new Publisher(new PublisherSettings{IgnoreMultipleDispatcher = true},  assignee, new[] { dispatcher, dispatcher });

            assignee.Subscribe(handler);

            Should.NotThrow(() => publisher.Publish(message));
        }
        public async Task Send_ShouldContainMessageInSentMessages()
        {
            var context = new TestableMessageHandlerContext();
            var messageInstance = new TestMessage();
            var sendOptions = new SendOptions();

            await context.Send(messageInstance, sendOptions);

            Assert.AreEqual(1, context.SentMessages.Length);
            Assert.AreSame(messageInstance, context.SentMessages[0].Message);
            Assert.AreSame(sendOptions, context.SentMessages[0].Options);
        }
            public async Task Verify_consumed_message_contains_property()
            {
                ITestMessage message = new TestMessage
                {
                    Data = new TestConcreteClass()
                };

                await InputQueueSendEndpoint.Send(message);

                ConsumeContext<ITestMessage> context = await _handled;

                Assert.IsInstanceOf<TestConcreteClass>(context.Message.Data);
            }
Esempio n. 26
0
        public void Publish_will_send_the_message_to_listner()
        {
            var assignee = new SimpleSubscriber();
            var dispatcher = new SimpleDispatcher();
            var handler = new TestHandler();
            var message = new TestMessage();
            var publisher = new Publisher(assignee, new[] {dispatcher});

            assignee.Subscribe(handler);

            publisher.Publish(message);

            Assert.That(handler.TestMessage, Is.SameAs(message));
        }
Esempio n. 27
0
 public static string GetValue(TestMessage msg)
 {
     switch (msg)
     {
         case TestMessage.Error:
             return "ERROR";
         case TestMessage.Warning:
             return "WARNING";
         case TestMessage.Note:
             return "NOTE";
         default:
             return string.Empty;
     }
 }
            public void Should_decrement_projection()
            {
                // Arrange
                var message = new TestMessage();
                var projection = new TestProjection {ProjectionProperty = 5};
                var builder = new AddNewProjectionStrategyArguments<TestMessage, TestProjection>();
                builder.Decrement(p => p.ProjectionProperty);

                // Act
                builder.Mappers.Map(message, projection);

                // Assert
                Assert.AreEqual(4, projection.ProjectionProperty);
            }
            public void Should_do_lambda_expression()
            {
                // Arrange
                var message = new TestMessage {MessageProperty = 5};
                var projection = new TestProjection {ProjectionProperty = 5};
                var builder = new AddNewProjectionStrategyArguments<TestMessage, TestProjection>();
                builder.Do((e, p) => p.ProjectionProperty = p.ProjectionProperty*e.MessageProperty);

                // Act
                builder.Mappers.Map(message, projection);

                // Assert
                Assert.AreEqual(25, projection.ProjectionProperty);
            }
        private static void AssertDispatchesCall(SynchronizationContextDispatcher dispatcher)
        {
            var handler = new TestHandler();
            var message = new TestMessage();

            var tuple = new MessageHandlerTuple(message, handler);

            var invoked = dispatcher.TryInvoke(ref tuple);

            handler.Called.WaitOne(1000);

            Assert.That(invoked, Is.True);
            Assert.That(handler.TestMessage, Is.SameAs(message));
        }
Esempio n. 31
0
        public void When_Received_Succsessfully_With_Json_Then_True()
        {
            var services = new ServiceCollection();

            services
            .AddLogging()
            .AddMessaging(
                mc => mc
                .UseJsonPacker(jss => { })
                .UseRabbitMQ(cfb => cfb.Uri = new Uri("###")),
                sc => sc.AddSingleton <IMessageHandler <TestMessage>, TestMessageHandler>()
                );

            var serviceProvider = services.BuildServiceProvider();

            var publisher   = serviceProvider.GetRequiredService <IMessagePublisher>();
            var router      = serviceProvider.GetRequiredService <IMessageRouter>();
            var testMessage = new TestMessage();

            publisher.Publish(testMessage, CancellationToken.None).GetAwaiter().GetResult();

            router.Route(CancellationToken.None).GetAwaiter().GetResult();
        }
        public void Validate_NoError()
        {
            var message = new TestMessage()
            {
                HeaderEntity = new TestHeader()
                {
                    SourceEntity = new TestSource()
                    {
                        UKPRN = 123456
                    }
                }
            };

            var fileDataServiceMock = new Mock <IFileDataService>();

            fileDataServiceMock.Setup(fds => fds.FileName()).Returns("ILR_123456");
            fileDataServiceMock.Setup(fds => fds.FileNameUKPRN()).Returns(123456);

            using (var validationErrorHandlerMock = BuildValidationErrorHandlerMockForNoError())
            {
                NewRule(validationErrorHandler: validationErrorHandlerMock.Object, fileDataService: fileDataServiceMock.Object).Validate(message);
            }
        }
Esempio n. 33
0
        public void DefaultConstructorTest()
        {
            var newMessage = new TestMessage();

            Assert.AreEqual(0, newMessage.SourceID);
            Assert.IsNull(newMessage.ConversationID);
            Assert.IsNull(newMessage.MessageID);

            var sid = 1;
            var cid = "3-1-3";
            var mid = "4-2-3";

            var m = new TestMessage
            {
                SourceID       = sid,
                ConversationID = cid,
                MessageID      = mid
            };

            Assert.AreEqual(sid, m.SourceID);
            Assert.AreEqual(cid, m.ConversationID);
            Assert.AreEqual(mid, m.MessageID);
        }
        public void UniqueSTDCodesFromMessage_NullValues()
        {
            var message = new TestMessage()
            {
                Learners = new List <TestLearner>()
                {
                    new TestLearner()
                    {
                        LearningDeliveries = new List <TestLearningDelivery>()
                        {
                            new TestLearningDelivery()
                            {
                                StdCodeNullable = null
                            }
                        }
                    }
                }
            };

            var result = NewService().UniqueSTDCodesFromMessage(message);

            result.Should().BeEmpty();
        }
Esempio n. 35
0
        private static void Client_OnMessageReceived(string message)
        {
            ReceivedMessage receivedMessage = JsonConvert.DeserializeObject <ReceivedMessage>(message);

            if (receivedMessage != null && receivedMessage.Messages != null && receivedMessage.Messages.Count > 0)
            {
                foreach (var msg in receivedMessage.Messages)
                {
                    switch (msg.Method)
                    {
                    case "updateMsg":
                        TestMessage testMessage = JsonConvert.DeserializeObject <TestMessage>(msg.Values[0].ToString());
                        logger.InfoFormat("Received msg:{0}", testMessage.ToString());
                        break;

                    case "testMsg":
                        string ms = msg.Values[0].ToString();
                        logger.InfoFormat("Received msg:{0}", ms);
                        break;
                    }
                }
            }
        }
Esempio n. 36
0
    public async Task ShouldSend(
        [Frozen] Stream stream,
        [Frozen] Mock <IProtobufStreamSerializer> protobuf,
        [Frozen] Mock <IProtobufFieldNumberCache> cache,
        byte[] writtenBytes,
        TestMessage message,
        ProtobufConnection sut)
    {
        cache.Setup(x => x.GetFieldNumber(typeof(TestMessage)))
        .Returns(5);

        Stream writeStream = null !;

        protobuf.Setup(x => x.Serialize(It.IsAny <MemoryStream>(), message, 5))
        .Callback <Stream, object, int>((stream, message, fieldNumber) =>
        {
            writeStream = stream;
            writeStream.Write(writtenBytes, 0, writtenBytes.Length);
        });

        await sut.SendAsync(message, Cts.Token);

        protobuf.Verify(x => x.Serialize(It.IsAny <MemoryStream>(), message, 5));

        // Temporary stream should be disposed.
        Assert.Throws <ObjectDisposedException>(
            () => writeStream.Read(Array.Empty <byte>(), 0, 0));

        // Should write the value to stream.
        Assert.NotEmpty(writtenBytes);
        var resultBytes = new byte[writtenBytes.Length];

        stream.Seek(0, SeekOrigin.Begin);
        await stream.ReadAsync(resultBytes.AsMemory(0, writtenBytes.Length));

        Assert.Equal(writtenBytes, resultBytes);
    }
        public async Task WithMessageHandlerWithCustomContext_WithMessageContextFilterWithMessageBodySerializerWithMessageHandlerImplementationFactory_UsesSerializer(bool matches)
        {
            // Arrange
            var services        = new MessageHandlerCollection(new ServiceCollection());
            var expectedBody    = $"test-message-body-{Guid.NewGuid()}";
            var expectedMessage = new TestMessage();
            var expectedContext = TestMessageContext.Generate();
            var serializer      = new TestMessageBodySerializer(expectedBody, expectedMessage);
            var expectedHandler = new TestMessageHandler();

            // Act
            services.WithMessageHandler <TestMessageHandler, TestMessage, TestMessageContext>(
                messageContextFilter: context =>
            {
                Assert.Same(expectedContext, context);
                return(matches);
            },
                messageBodySerializer: serializer,
                messageHandlerImplementationFactory: serviceProvider => expectedHandler);

            // Assert
            IServiceProvider             provider = services.Services.BuildServiceProvider();
            IEnumerable <MessageHandler> handlers = MessageHandler.SubtractFrom(provider, NullLogger.Instance);

            Assert.NotNull(handlers);
            MessageHandler handler = Assert.Single(handlers);

            Assert.NotNull(handler);
            Assert.Same(expectedHandler, handler.GetMessageHandlerInstance());
            bool actual = handler.CanProcessMessageBasedOnContext(expectedContext);

            Assert.Equal(matches, actual);
            MessageResult result = await handler.TryCustomDeserializeMessageAsync(expectedBody);

            Assert.NotNull(result);
            Assert.Same(expectedMessage, result.DeserializedMessage);
        }
Esempio n. 38
0
        public async Task WhenReceiveShouldValidateMaxNumberOfMessages(int maxNumberOfMessages)
        {
            //Arrange
            var amazonSqsMock     = new Mock <IAmazonSQS>();
            var configurationMock = new Mock <IConfiguration>();

            var messageQueueOptions = new MessageQueueOptions();
            var msg = new TestMessage()
            {
                Id = Guid.NewGuid().ToString()
            };

            amazonSqsMock.Setup(x => x.ReceiveMessageAsync(It.IsAny <ReceiveMessageRequest>(), CancellationToken.None))
            .ReturnsAsync(new ReceiveMessageResponse()
            {
                Messages = new List <Message>()
                {
                    new Message()
                    {
                        Body          = JsonConvert.SerializeObject(msg),
                        ReceiptHandle = Guid.NewGuid().ToString()
                    }
                }
            })
            .Verifiable();
            configurationMock.SetupGet(x => x[It.IsAny <string>()]).Returns(string.Empty);

            var queue = new MessageQueueSqs(amazonSqsMock.Object, messageQueueOptions, new MessageQueueInfo(messageQueueOptions, configurationMock.Object));

            //Act
            async Task act() => await queue.Receive <TestMessage>(maxNumberOfMessages)
            .GetAsyncEnumerator()
            .MoveNextAsync();

            //Assert
            await Assert.ThrowsAsync <ArgumentException>(act);
        }
Esempio n. 39
0
        public void TestIocMessageBus()
        {
            IKernel kernel = new StandardKernel();

            //inital service locator
            ServiceLocator.SetLocatorProvider(() => new NinjectServiceLocator(kernel));

            //we can also use IoC, instead of "new IoC.MessageBus()"
            kernel.Bind <IMessageBus>().To <Messaging.IoC.MessageBus>().InSingletonScope(); //make it singleton

            var msg = new TestMessage();

            //get instance of bus
            IMessageBus bus = kernel.Get <IMessageBus>();

            //see what will happen if publish right away
            Assert.IsFalse(bus.Publish(msg)); //return false if no handlers
            Assert.IsFalse(msg.Handled);      //not handled, since no handlers in bus yet

            //configure the handlers
            kernel.Bind <IHandler <TestMessage> >().To <TertiaryTestMessageHandler>();
            kernel.Bind <IHandler <TestMessage> >().To <PrimaryTestMessageHandler>();
            kernel.Bind <IHandler <TestMessage> >().To <SecondaryTestMessageHandler>();


            Stopwatch sw = Stopwatch.StartNew();

            bus.Publish(msg);
            sw.Stop();
            Console.WriteLine(sw.ElapsedMilliseconds);
            Assert.IsTrue(msg.Handled);

            //also handled sequentially
            Assert.AreEqual(typeof(PrimaryTestMessageHandler).Name, msg.HandledBy[0]);
            Assert.AreEqual(typeof(SecondaryTestMessageHandler).Name, msg.HandledBy[1]);
            Assert.AreEqual(typeof(TertiaryTestMessageHandler).Name, msg.HandledBy[2]);
        }
Esempio n. 40
0
        public void MessageDescriptor_Should_Properly_Pack_A_Message_Proto(int messageType, string data, params string[] arguments)
        {
            var protobufMessage = new TestMessage {
                Data = data
            };
            var protobufMessageSerialized = protobufMessage.ToByteArray();
            var argumentsDescriptors      = GetArgumentsDescriptors(arguments);
            var totalLength = protobufMessageSerialized.Length + argumentsDescriptors.Sum(argument => argument.Argument.Length + ProtobufHubProtocolConstants.ARGUMENT_HEADER_LENGTH) + 4; //Int => // ProtobufMessageLength

            ReadOnlySpan <byte> messagePacked = MessageDescriptor.PackMessage(messageType, protobufMessageSerialized, argumentsDescriptors);

            Assert.Equal(messageType, messagePacked[0]);
            Assert.Equal(totalLength, BitConverter.ToInt32(messagePacked.Slice(1, 4)));
            Assert.Equal(protobufMessageSerialized.Length, BitConverter.ToInt32(messagePacked.Slice(5, 4)));
            var protobufObject = new TestMessage();

            protobufObject.MergeFrom(messagePacked.Slice(ProtobufHubProtocolConstants.MESSAGE_HEADER_LENGTH, protobufMessageSerialized.Length).ToArray());
            Assert.Equal(protobufMessage, protobufObject);

            var serializedArguments = messagePacked.Slice(ProtobufHubProtocolConstants.MESSAGE_HEADER_LENGTH + protobufMessageSerialized.Length);

            var i = 0;

            while (!serializedArguments.IsEmpty)
            {
                var argumentType   = BitConverter.ToInt32(serializedArguments.Slice(0, 4));
                var argumentLength = BitConverter.ToInt32(serializedArguments.Slice(4, 4));
                var argument       = serializedArguments.Slice(ProtobufHubProtocolConstants.ARGUMENT_HEADER_LENGTH, argumentLength).ToArray();

                protobufObject.MergeFrom(argument);

                Assert.Equal(ARGUMENT_TYPE, argumentType);
                Assert.Equal(arguments[i++], protobufObject.Data);

                serializedArguments = serializedArguments.Slice(ProtobufHubProtocolConstants.ARGUMENT_HEADER_LENGTH + argumentLength);
            }
        }
Esempio n. 41
0
        private static async Task RunDataExecutionEngineAsync()
        {
            await Console.Out.WriteLineAsync("Starting SimpleClient w/ Encryption As An DataExecutionEngine...").ConfigureAwait(false);

            var letterTemplate = new Letter("", "TestRabbitServiceQueue", null, new LetterMetadata());
            var rabbitService  = new RabbitService("Config.json", "passwordforencryption", "saltforencryption");

            await rabbitService
            .Topologer
            .CreateQueueAsync("TestRabbitServiceQueue")
            .ConfigureAwait(false);

            // Produce Messages
            for (ulong i = 0; i < 100; i++)
            {
                var letter = letterTemplate.Clone();
                letter.LetterId = i;
                var sentMessage = new TestMessage {
                    Message = "Sensitive Message"
                };
                sentMessage.Message += $" {i}";
                letter.Body          = JsonSerializer.SerializeToUtf8Bytes(sentMessage);
                await rabbitService
                .Publisher
                .QueueLetterAsync(letter);
            }

            // Start Consumer As An Execution Engine
            var consumer = rabbitService.GetConsumer("ConsumerFromConfig");
            await consumer
            .StartConsumerAsync(false, true)
            .ConfigureAwait(false);

            _ = Task.Run(() => consumer.DataflowExecutionEngineAsync(ConsumerWorkerAsync, 7));

            await Console.In.ReadLineAsync().ConfigureAwait(false);
        }
        public async Task when_publish_message_to_topic_and_there_is_no_subscribers_then_server_notifies(int count)
        {
            string      topic     = Guid.NewGuid().ToString();
            IMqttClient publisher = await GetClientAsync();

            int topicsNotSubscribedCount = 0;
            ManualResetEventSlim topicsNotSubscribedDone = new ManualResetEventSlim();

            Server.MessageUndelivered += (sender, e) =>
            {
                Interlocked.Increment(ref topicsNotSubscribedCount);

                if (topicsNotSubscribedCount == count)
                {
                    topicsNotSubscribedDone.Set();
                }
            };

            List <Task> tasks = new List <Task>();

            for (int i = 1; i <= count; i++)
            {
                TestMessage            testMessage = GetTestMessage(i);
                MqttApplicationMessage message     = new MqttApplicationMessage(topic, Serializer.Serialize(testMessage));

                tasks.Add(publisher.PublishAsync(message, MqttQualityOfService.AtMostOnce));
            }

            await Task.WhenAll(tasks);

            bool success = topicsNotSubscribedDone.Wait(TimeSpan.FromSeconds(KeepAliveSecs * 2));

            topicsNotSubscribedCount.Should().Be(count);
            Assert.True(success);

            publisher.Dispose();
        }
Esempio n. 43
0
        public void Msmq_Send()
        {
            var msmq = DistributedApplication.ClusterChannel as MsmqChannelProvider;

            // init: purge queues
            msmq._receiveQueue.Purge();
            for (var i = 0; i < msmq._sendQueues.Count; i++)
            {
                var sendqueue = msmq._sendQueues[i];
                sendqueue.Purge();
            }

            // distribute a single message, and check remote queues if message arrived
            var msg = new TestMessage();

            msg.Send();

            var formatter = new BinaryMessageFormatter();

            try
            {
                for (var i = 0; i < msmq._sendQueues.Count; i++)
                {
                    var sendqueue   = msmq._sendQueues[i];
                    var recvmsg     = sendqueue.Receive(TimeSpan.FromSeconds(3));
                    var recvtestmsg = formatter.Deserialize(recvmsg.Body as Stream) as TestMessage;
                    Assert.IsTrue(recvtestmsg.Message == msg.Message, "Received message differs from message that was sent.");  // check if we received the message that we have sent
                }
            }
            catch (System.Messaging.MessageQueueException mex)
            {
                if (mex.MessageQueueErrorCode == System.Messaging.MessageQueueErrorCode.IOTimeout)
                {
                    Assert.Fail("Receiving test message from remote queue timed out.");
                }
            }
        }
Esempio n. 44
0
        /// <summary>
        /// Runs the test specified by this test descriptor.
        /// </summary>
        /// <param name="testConfiguration">The test configuration to use for running the test.</param>
        public virtual void RunTest(WriterTestConfiguration testConfiguration, BaselineLogger logger)
        {
            if (this.ShouldSkipForTestConfiguration(testConfiguration))
            {
                return;
            }

            // Wrap the memory stream in a non-disposing stream so we can dump the message content
            // even in the case of a failure where the message stream normally would get disposed.
            logger.LogConfiguration(testConfiguration);
            logger.LogModelPresence(this.Model);
            this.messageStream = new NonDisposingStream(new MemoryStream());
            TestMessage message = this.CreateOutputMessage(this.messageStream, testConfiguration);
            IEdmModel   model   = this.GetMetadataProvider();
            WriterTestExpectedResults expectedResult = this.GetExpectedResult(testConfiguration);

            ExceptionUtilities.Assert(expectedResult != null, "The expected result could not be determined for the test. Did you specify it?");

            Exception exception = TestExceptionUtils.RunCatching(() =>
            {
                using (ODataMessageWriterTestWrapper messageWriterWrapper = TestWriterUtils.CreateMessageWriter(message, model, testConfiguration, this.settings.Assert))
                {
                    this.WritePayload(messageWriterWrapper, testConfiguration);
                    expectedResult.VerifyResult(message, this.PayloadKind, testConfiguration, logger);
                }
            });

            try
            {
                expectedResult.VerifyException(exception);
            }
            catch (Exception failureException)
            {
                this.TraceFailureInformation(message, this.messageStream, testConfiguration);
                throw failureException;
            }
        }
Esempio n. 45
0
        /// <summary>
        /// Runs the test specified by this test descriptor.
        /// </summary>
        /// <param name="testConfiguration">The test configuration to use for running the test.</param>
        public override void RunTest(WriterTestConfiguration testConfiguration, BaselineLogger logger = null)
        {
            //TODO: Use Logger to verify result, right now this change is only to unblock writer testcase checkin

            if (this.ShouldSkipForTestConfiguration(testConfiguration))
            {
                return;
            }

            // Generate a StreamingTestStream with a NonDisposingStream.
            this.messageStream = new StreamingTestStream(new NonDisposingStream(new MemoryStream()));
            TestMessage message = this.CreateOutputMessage(this.messageStream, testConfiguration);
            IEdmModel   model   = this.GetMetadataProvider();
            StreamingWriterTestExpectedResults expectedResult = (StreamingWriterTestExpectedResults)this.GetExpectedResult(testConfiguration);

            ExceptionUtilities.Assert(expectedResult != null, "The expected result could not be determined for the test. Did you specify it?");

            Exception exception = TestExceptionUtils.RunCatching(() =>
            {
                using (ODataMessageWriterTestWrapper messageWriterWrapper = TestWriterUtils.CreateMessageWriter(message, model, testConfiguration, this.settings.Assert))
                {
                    this.WritePayload(messageWriterWrapper, testConfiguration);
                    expectedResult.ObservedElement = this.readObject;
                    expectedResult.VerifyResult(message, this.PayloadKind, testConfiguration);
                }
            });

            try
            {
                expectedResult.VerifyException(exception);
            }
            catch (Exception failureException)
            {
                this.TraceFailureInformation(message, this.messageStream, testConfiguration);
                throw failureException;
            }
        }
        public async Task ExecuteAsync()
        {
            IMessage           message           = new TestMessage();
            var                referenceData     = new ReferenceDataRoot();
            IExternalDataCache externalDataCache = new ExternalDataCache();
            var                externalData      = "ExtermalData";
            var                cancellationToken = CancellationToken.None;

            var fundingServiceContextMock           = new Mock <IFundingServiceContext>();
            var jsonSerializationServiceMock        = new Mock <IJsonSerializationService>();
            var ilrFileProviderServiceMock          = new Mock <IFileProviderService <IMessage> >();
            var ilrReferenceDataProviderServiceMock = new Mock <IFileProviderService <ReferenceDataRoot> >();
            var externalCachePopulationServiceMock  = new Mock <IExternalDataCachePopulationService>();
            var fundingTaskProviderMock             = new Mock <IFundingTaskProvider>();
            var loggerMock = new Mock <ILogger>();

            ilrFileProviderServiceMock.Setup(sm => sm.ProvideAsync(fundingServiceContextMock.Object, cancellationToken)).Returns(Task.FromResult(message)).Verifiable();
            ilrReferenceDataProviderServiceMock.Setup(sm => sm.ProvideAsync(fundingServiceContextMock.Object, cancellationToken)).Returns(Task.FromResult(referenceData)).Verifiable();
            externalCachePopulationServiceMock.Setup(sm => sm.PopulateAsync(referenceData, cancellationToken)).Returns(externalDataCache).Verifiable();
            jsonSerializationServiceMock.Setup(sm => sm.Serialize(externalDataCache)).Returns(externalData).Verifiable();

            fundingTaskProviderMock.Setup(sm => sm.ProvideAsync(fundingServiceContextMock.Object, message, externalData, cancellationToken)).Returns(Task.FromResult(true)).Verifiable();

            await NewService(
                jsonSerializationServiceMock.Object,
                ilrFileProviderServiceMock.Object,
                ilrReferenceDataProviderServiceMock.Object,
                externalCachePopulationServiceMock.Object,
                fundingTaskProviderMock.Object,
                loggerMock.Object).ExecuteAsync(fundingServiceContextMock.Object, cancellationToken);

            jsonSerializationServiceMock.VerifyAll();
            ilrFileProviderServiceMock.VerifyAll();
            ilrReferenceDataProviderServiceMock.VerifyAll();
            externalCachePopulationServiceMock.VerifyAll();
            fundingTaskProviderMock.VerifyAll();
        }
Esempio n. 47
0
        public TestMessage BuildMessage(string input)
        {
            TestMessage message = null;

            input = input.Replace("##", Environment.NewLine).Trim();
            var direction = input[0];

            if (direction == '>') // To bot (request)
            {
                message = new ToBotMessage()
                {
                    RawTextContent = input.Substring(1).Trim()
                };
            }
            else if (direction == '<') // From bot (response)
            {
                message = GetMessageFromContent(input.Substring(1).Trim());
            }
            else
            {
                message = new UnexpectedTestMessage();
            }
            return(message);
        }
Esempio n. 48
0
        /// <summary>
        /// Called to write the payload to the specified <paramref name="messageWriter"/>.
        /// </summary>
        /// <param name="messageWriter">The <see cref="ODataMessageWriterTestWrapper"/> to use for writing the payload.</param>
        /// <param name="testConfiguration">The test configuration to generate the payload for.</param>
        protected override void WritePayload(ODataMessageWriterTestWrapper messageWriter, WriterTestConfiguration testConfiguration)
        {
            Debug.Assert(this.messageStream != null, "Streaming test stream must have been created.");
            TestMessage testMessage = this.CreateInputMessageFromStream((TestStream)this.messageStream, testConfiguration, this.PayloadKind, string.Empty, this.UrlResolver);

            testMessage.SetContentType(testConfiguration.Format, this.PayloadKind);

            Exception exception = TestExceptionUtils.RunCatching(() =>
            {
                ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings(this.settings.MessageReaderSettings)
                {
                    DisableMessageStreamDisposal = testConfiguration.MessageWriterSettings.DisableMessageStreamDisposal,
                    EnableAtom = true
                };

                ReaderTestConfiguration readerConfig = new ReaderTestConfiguration(
                    testConfiguration.Format,
                    readerSettings,
                    testConfiguration.IsRequest,
                    testConfiguration.Synchronous);

                IEdmModel model = this.GetMetadataProvider();
                using (ODataMessageReaderTestWrapper messageReaderWrapper = TestReaderUtils.CreateMessageReader(testMessage, model, readerConfig))
                {
                    ODataPayloadElementToObjectModelConverter payloadElementToOMConverter = new ODataPayloadElementToObjectModelConverter(!testConfiguration.IsRequest);
                    ObjectModelToPayloadElementConverter reverseConverter = new ObjectModelToPayloadElementConverter();
                    ObjectModelWriteReadStreamer streamer = new ObjectModelWriteReadStreamer();
                    if (testConfiguration.Format == ODataFormat.Atom)
                    {
                        this.PayloadElement.Accept(new AddFeedIDFixup());
                    }

                    this.readObject = reverseConverter.Convert(streamer.WriteMessage(messageWriter, messageReaderWrapper, this.PayloadKind, payloadElementToOMConverter.Convert(this.PayloadElement)), !testConfiguration.IsRequest);
                }
            });
        }
Esempio n. 49
0
        //чтение текста из файлов и инциализация
        private static void ReadFiles(TcpClient testingTcpClient, TcpClient availableThreadClient, string directoryPath)
        {
            var filePaths = Directory.GetFiles(directoryPath, "*.txt");

            if (filePaths.Length > 127)
            {
                Console.WriteLine("В выбранной дериктории слишком много файлов, установленно базовое ограниечение в 127");
            }
            else
            {
                var testingStream         = testingTcpClient.GetStream();
                var availableThreadStream = availableThreadClient.GetStream();
                var responseStream        = new TcpClient("127.0.0.1", 3458).GetStream();
                //для проверки доступных потоков создается еще одно подключение
                foreach (var filePath in filePaths)
                {
                    var reader  = new StreamReader(filePath);
                    var text    = reader.ReadToEnd();
                    var message = new TestMessage(Path.GetFileName(filePath), text);
                    SendMessage(availableThreadStream, testingStream, message);
                    GetResponse(responseStream);
                }
            }
        }
        public async Task ValidateErnsAsyncReturnsValidErns()
        {
            var message = new TestMessage();
            var empIds  = new List <int> {
                1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 30, 31, 32, 33, 34, 35
            };

            var loggerMock = new Mock <ILogger>();

            var mapperMock = new Mock <IEmpIdMapper>();

            mapperMock.Setup(m => m.MapEmpIdsFromMessage(message)).Returns(empIds);

            var clientServiceMock = new Mock <IEDRSClientService>();

            clientServiceMock
            .Setup(m => m.GetInvalidErns(empIds, CancellationToken.None))
            .ReturnsAsync(Enumerable.Empty <int>());

            var service = NewService(mapperMock.Object, clientServiceMock.Object, loggerMock.Object);
            var result  = await service.ValidateErnsAsync(message, CancellationToken.None);

            result.Should().BeEquivalentTo(empIds);
        }
Esempio n. 51
0
        public void ExecuteSubjectTest()
        {
            var subscriber = new TestSubscriber();

            MessageSenderService.ExecuteSubject.Subscribe(subscriber);

            var messageSenderService = new MessageSenderService();
            var testMessage          = new TestMessage
            {
                Title = "Test Message"
            };

            messageSenderService.Send <TestMessageSender, TestMessage>(testMessage);

            Thread.Sleep(TimeSpan.FromSeconds(1));
            Assert.AreEqual(1, TestSubscriber.ActionContexts.Count);
            var actionContext = TestSubscriber.ActionContexts[0];
            var data          = JsonConvert.DeserializeObject <TestMessage>(actionContext.Data);

            Assert.AreEqual(testMessage.Title, data.Title);
            Assert.AreEqual("Message Sent", actionContext.Action);
            Assert.AreEqual(typeof(TestMessageSender), actionContext.MessageSenderType);
            Assert.AreEqual(typeof(TestMessage), actionContext.MessageType);
        }
        public void MustReturnUnknownMessageAsDefault()
        {
            sut.AuthenticationToken = Guid.Empty;

            var token   = sut.Connect(Guid.Empty).CommunicationToken.Value;
            var message = new TestMessage {
                CommunicationToken = token
            } as Message;
            var response = sut.Send(message);

            Assert.IsNotNull(response);
            Assert.IsInstanceOfType(response, typeof(SimpleResponse));
            Assert.AreEqual(SimpleResponsePurport.UnknownMessage, (response as SimpleResponse)?.Purport);

            message = new SimpleMessage(default(SimpleMessagePurport))
            {
                CommunicationToken = token
            };
            response = sut.Send(message);

            Assert.IsNotNull(response);
            Assert.IsInstanceOfType(response, typeof(SimpleResponse));
            Assert.AreEqual(SimpleResponsePurport.UnknownMessage, (response as SimpleResponse)?.Purport);
        }
        public void BuildValidLearnRefNumbers()
        {
            var invalidLearnRefNumbers = new List <string>()
            {
                "a", "b"
            };

            var message = new TestMessage()
            {
                Learners = new List <TestLearner>()
                {
                    new TestLearner()
                    {
                        LearnRefNumber = "a"
                    },
                    new TestLearner()
                    {
                        LearnRefNumber = "b"
                    },
                    new TestLearner()
                    {
                        LearnRefNumber = "c"
                    },
                    new TestLearner()
                    {
                        LearnRefNumber = "d"
                    },
                    new TestLearner()
                    {
                        LearnRefNumber = "e"
                    },
                }
            };

            NewService().BuildValidLearnRefNumbers(message, invalidLearnRefNumbers).Should().BeEquivalentTo("c", "d", "e");
        }
Esempio n. 54
0
        public void GivenIHaveRegisteredForAMessageType_WhenIUnregisterForThatMessageType_ThenNoMoreMessagesAreReceived()
        {
            // Arrange
            IMessageBroker messageBroker = new MessageBroker();

            bool actionExecuted = false;
            Action <TestMessage> testMessageAction = x => actionExecuted = true;

            messageBroker.Register(this, testMessageAction);

            var testMessage = new TestMessage();

            messageBroker.Send(testMessage);

            Assert.That(actionExecuted, Is.True);
            actionExecuted = false;

            // Act
            messageBroker.Unregister(this, testMessageAction);

            // Assert
            messageBroker.Send(testMessage);
            Assert.That(actionExecuted, Is.False);
        }
Esempio n. 55
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");



            var testMessage = new TestMessage();

            testMessage.Msg = 3.14f;

            using (MemoryStream stream = new MemoryStream())
            {
                // Save the person to a stream
                testMessage.WriteTo(stream);
                byte[] bytes = stream.ToArray();

                for (int i = 0; i < bytes.Length; i++)
                {
                    Console.Write(String.Format("{0:X2}", bytes[i]));
                }

                Console.WriteLine();

                UdpClient udpClient = new UdpClient(4049);
                try{
                    udpClient.Connect("192.168.10.196", 4049);

                    udpClient.Send(bytes, bytes.Length);

                    udpClient.Close();
                }
                catch (Exception e) {
                    Console.WriteLine(e.ToString());
                }
            }
        }
        private void Given()
        {
            _it = new AwakeReaderService();

            _eventRecord = new EventRecord(
                100,
                new PrepareLogRecord(
                    1500, Guid.NewGuid(), Guid.NewGuid(), 1500, 0, "Stream", 99, DateTime.UtcNow, PrepareFlags.Data,
                    "event", new byte[0], null));
            _eventCommitted = new StorageMessage.EventCommitted(2000, _eventRecord, isTfEof: true);
            _publisher = new InMemoryBus("bus");
            _envelope = new PublishEnvelope(_publisher);
            _handler = new TestHandler<TestMessage>();
            _publisher.Subscribe(_handler);
            _reply1 = new TestMessage(1);
            _reply2 = new TestMessage(2);
            _reply3 = new TestMessage(3);
            _reply4 = new TestMessage(4);
            _reply5 = new TestMessage(5);

            _it.Handle(
                new AwakeReaderServiceMessage.SubscribeAwake(
                    _envelope, Guid.NewGuid(), "Stream", new TFPos(1000, 500), _reply1));
            _it.Handle(
                new AwakeReaderServiceMessage.SubscribeAwake(
                    _envelope, Guid.NewGuid(), "Stream", new TFPos(100000, 99500), _reply2));
            _it.Handle(
                new AwakeReaderServiceMessage.SubscribeAwake(
                    _envelope, Guid.NewGuid(), "Stream2", new TFPos(1000, 500), _reply3));
            _it.Handle(
                new AwakeReaderServiceMessage.SubscribeAwake(
                    _envelope, Guid.NewGuid(), null, new TFPos(1000, 500), _reply4));
            _it.Handle(
                new AwakeReaderServiceMessage.SubscribeAwake(
                    _envelope, Guid.NewGuid(), null, new TFPos(100000, 99500), _reply5));
        }
Esempio n. 57
0
    public async Task Test_LockError_MessageFlow()
    {
        await ServiceBusFixture.ServiceBusNamespace.ScorchNamespace();

        using (var ts = new CancellationTokenSource())
            using (var msn = new Messenger(ServiceBusFixture.ConfigSettings.ServiceBusConnectionString, ServiceBusFixture.ConfigSettings.AzureSubscriptionId))
            {
                var message = new TestMessage();
                await msn.Send(message);

                msn.Receive <TestMessage>(
                    async m =>
                {
                    await msn.Lock(m);
                    await Task.Delay(TimeSpan.FromSeconds(5), ts.Token);
                    await msn.Error(m);

                    ts.Cancel(); // kill switch
                });

                try
                {
                    await Task.Delay(TimeSpan.FromMinutes(2), ts.Token);
                }
                catch (TaskCanceledException) { /* soak the kill switch */ }

                var receiver = new MessageReceiver(ServiceBusFixture.ConfigSettings.ServiceBusConnectionString, EntityNameHelper.FormatDeadLetterPath(typeof(TestMessage).GetEntityName()), ReceiveMode.ReceiveAndDelete);
                var rMessage = (await receiver.ReadBatchAsync <TestMessage>(1)).FirstOrDefault();

                rMessage.Should().NotBeNull();
                rMessage.Should().BeEquivalentTo(message);

                ((QueueAdapter <TestMessage>)msn.ServiceBusAdapters[typeof(TestMessage).GetEntityName()]).Messages.Should().BeEmpty();
                ((QueueAdapter <TestMessage>)msn.ServiceBusAdapters[typeof(TestMessage).GetEntityName()]).LockTimers.Should().BeEmpty();
            }
    }
Esempio n. 58
0
        public void TestSendMultipleRecipients()
        {
            ILoggerFactory           loggerFactory = new LoggerFactory();
            ILogger <MessageService> logger        = loggerFactory.CreateLogger <MessageService>();

            string testMessageContent        = "This is a test";
            int    numCalls1                 = 0;
            Action <TestMessage> testAction1 = (testMessage) =>
            {
                ++numCalls1;
                if (testMessage.Text != testMessageContent)
                {
                    throw new InvalidOperationException();
                }
            };
            int numCalls2 = 0;
            Action <TestMessage> testAction2 = (testMessage) =>
            {
                ++numCalls2;
                if (testMessage.Text != testMessageContent)
                {
                    throw new InvalidOperationException();
                }
            };

            var messageService = new MessageService(loggerFactory);

            messageService.Register <TestMessage>(testAction1);
            messageService.Register <TestMessage>(testAction2);
            var message = new TestMessage(testMessageContent);

            messageService.Send(message);

            Assert.AreEqual(1, numCalls1);
            Assert.AreEqual(1, numCalls2);
        }
Esempio n. 59
0
        public void UniqueUKPRNsFromMessage_EPAOrgIds()
        {
            var epaOrgId = "EpaOrg001";

            var message = new TestMessage
            {
                Learners = new List <TestLearner>
                {
                    new TestLearner
                    {
                        LearningDeliveries = new List <TestLearningDelivery>
                        {
                            new TestLearningDelivery
                            {
                                EPAOrgID = epaOrgId
                            }
                        }
                    }
                }
            };

            var epaOrganisationsDataRetrievalServiceMock = new Mock <EPAOrganisationsDataRetrievalService> {
                CallBase = true
            };

            epaOrganisationsDataRetrievalServiceMock.Setup(s => s.UniqueEpaOrgIdsFromMessage(message)).Returns(new List <string> {
                epaOrgId
            });

            var epaOrganisations = epaOrganisationsDataRetrievalServiceMock.Object.UniqueEpaOrgIdsFromMessage(message).ToList();

            epaOrganisations.Should().HaveCount(1);
            epaOrganisations.Should().BeEquivalentTo(new List <string> {
                epaOrgId
            });
        }
        public async Task WithMessageHandlerWithCustomContext_WithMessageBodySerializer_UsesSerializer()
        {
            // Arrange
            var services        = new MessageHandlerCollection(new ServiceCollection());
            var expectedBody    = $"test-message-body-{Guid.NewGuid()}";
            var expectedMessage = new TestMessage();
            var serializer      = new TestMessageBodySerializer(expectedBody, expectedMessage);

            // Act
            services.WithMessageHandler <TestMessageHandler, TestMessage, TestMessageContext>(messageBodySerializer: serializer);

            // Assert
            IServiceProvider             provider = services.Services.BuildServiceProvider();
            IEnumerable <MessageHandler> handlers = MessageHandler.SubtractFrom(provider, NullLogger.Instance);

            Assert.NotNull(handlers);
            MessageHandler handler = Assert.Single(handlers);

            Assert.NotNull(handler);
            MessageResult result = await handler.TryCustomDeserializeMessageAsync(expectedBody);

            Assert.NotNull(result);
            Assert.Same(expectedMessage, result.DeserializedMessage);
        }