コード例 #1
0
        public void ItWorks()
        {
            using (AppConfig.Change(AppConfigPath))
                using (var adapter = new BuiltinContainerAdapter())
                {
                    var messageHandled = new ManualResetEvent(false);

                    adapter.Handle <string>(s => messageHandled.Set());

                    var bus = Configure.With(adapter)
                              .Transport(t => t.UseMsmqAndGetInputQueueNameFromAppConfig())
                              .CreateBus()
                              .Start();

                    bus.SendLocal("hello there!");

                    messageHandled.WaitUntilSetOrDie(5.Seconds());
                }

            var auditedMessages = MsmqTestHelper
                                  .GetMessagesFrom(AuditQueue)
                                  .ToList();

            Assert.That(auditedMessages.Count, Is.EqualTo(1), "Expected to find exactly one copy of the sent message in the audit queue");
            Assert.That(auditedMessages.Single().Messages[0], Is.EqualTo("hello there!"));
        }
コード例 #2
0
        public void CanCopySuccessfullyHandledMessageToAuditQueue()
        {
            // arrange
            var fakeTime = DateTime.UtcNow;

            TimeMachine.FixTo(fakeTime);
            var resetEvent = new ManualResetEvent(false);

            adapter.Handle <string>(str => resetEvent.Set());

            // act
            adapter.Bus.SendLocal("yo!");

            // assert
            var message = MsmqTestHelper.GetMessagesFrom(AuditQueueName).Single();

            message.ShouldNotBe(null);

            var logicalMessages = message.Messages;
            var headers         = message.Headers;

            logicalMessages.Length.ShouldBe(1);
            logicalMessages[0].ShouldBe("yo!");

            headers.ShouldContainKeyAndValue(Headers.AuditReason, Headers.AuditReasons.Handled);
            headers.ShouldContainKeyAndValue(Headers.AuditMessageCopyTime, fakeTime.ToString("u"));
            headers.ShouldContainKeyAndValue(Headers.AuditSourceQueue, InputQueueAddress);
        }
コード例 #3
0
        public void CanCopyPublishedMessageToAuditQueue()
        {
            // arrange
            var fakeTime = DateTime.UtcNow;

            TimeMachine.FixTo(fakeTime);

            Thread.Sleep(1.Seconds());

            // act
            adapter.Bus.Publish("yo!");

            // assert
            var message = MsmqTestHelper.GetMessagesFrom(AuditQueueName).Single();

            message.ShouldNotBe(null);

            var logicalMessages = message.Messages;
            var headers         = message.Headers;

            logicalMessages.Length.ShouldBe(1);
            logicalMessages[0].ShouldBe("yo!");

            headers.ShouldContainKeyAndValue(Headers.AuditReason, Headers.AuditReasons.Published);
            headers.ShouldContainKeyAndValue(Headers.AuditMessageCopyTime, fakeTime.ToString("u"));
            headers.ShouldContainKeyAndValue(Headers.AuditSourceQueue, InputQueueAddress);
        }
コード例 #4
0
        public void PublishedMessageIsCopiedOnlyOnceRegardlessOfNumberOfSubscribers()
        {
            // arrange
            var fakeTime = DateTime.UtcNow;

            TimeMachine.FixTo(fakeTime);

            SetUpSubscriberThatDoesNotAuditMessages("test.audit.subscriber1");
            SetUpSubscriberThatDoesNotAuditMessages("test.audit.subscriber2");
            SetUpSubscriberThatDoesNotAuditMessages("test.audit.subscriber3");

            // act
            adapter.Bus.Publish("yo!");

            // assert
            var messages = MsmqTestHelper.GetMessagesFrom(AuditQueueName).ToList();

            Console.WriteLine(string.Join(Environment.NewLine, messages));

            messages.Count.ShouldBe(4);

            var stringMessages = messages.Where(m => m.Messages[0] is string).ToList();

            Assert.That(stringMessages.Count, Is.EqualTo(1), "We should have only one single copy of the published messages!");
        }