public void Bus_BusMessage_HeadersAndPropertiesUsage()
        {
            const string busId = "Bus";

            using (MessageBus.Core.RabbitMQBus bus = new MessageBus.Core.RabbitMQBus(c => c.SetBusId(busId)))
            {
                BusMessage <Person> message = new BusMessage <Person>
                {
                    Data = new Person {
                        Id = 5
                    }
                };
                message.Headers.Add(new BusHeader
                {
                    Name = "Version", Value = "Ver1"
                });

                BusMessage <Person> received = null;

                ManualResetEvent ev = new ManualResetEvent(false);

                DateTime sent;
                using (ISubscriber subscriber = bus.CreateSubscriber(c => c.SetReceiveSelfPublish()))
                {
                    subscriber.Subscribe((Action <BusMessage <Person> >)(m =>
                    {
                        received = m;
                        ev.Set();
                    }));

                    subscriber.Open();

                    using (IPublisher publisher = bus.CreatePublisher())
                    {
                        sent = DateTime.Now;
                        publisher.Send(message);
                    }

                    bool wait = ev.WaitOne(TimeSpan.FromSeconds(5));

                    wait.Should().BeTrue();
                }

                received.ShouldBeEquivalentTo(message, options => options.Excluding(m => m.BusId).Excluding(m => m.Sent));

                received.BusId.Should().Be(busId);
                received.Sent.Should().BeCloseTo(sent, 1000);
            }
        }
        public void Bus_MessageBaseSubscribtion_CallReceived()
        {
            ManualResetEvent ev = new ManualResetEvent(false);

            MessageBasedImplementation implementation = new MessageBasedImplementation(ev);

            using (IBus bus = new RabbitMQBus())
            {
                using (ISubscription subscription = bus.RegisterSubscription(implementation))
                {
                    subscription.Open();

                    using (IPublisher publisher = bus.CreatePublisher())
                    {
                        Person person = new Person {
                            Id = 5
                        };

                        BusMessage <Person> busMessage = new BusMessage <Person>
                        {
                            Data = person
                        };

                        busMessage.Headers.Add(new BusHeader
                        {
                            Name  = "Header",
                            Value = "RightValue"
                        });

                        publisher.Send(busMessage);

                        bool waitOne = ev.WaitOne(TimeSpan.FromSeconds(5));

                        waitOne.Should().BeTrue();

                        busMessage.ShouldBeEquivalentTo(implementation.Message,
                                                        options =>
                                                        options.Excluding(message => message.BusId)
                                                        .Excluding(message => message.Sent));
                    }
                }
            }
        }