public void A_consumer_is_subscribed_to_a_message()
        {
            Consumer = new ConsumerOf <SimpleMessage>();
            RemoteBus.SubscribeInstance(Consumer);

            LocalBus.ShouldHaveRemoteSubscriptionFor <SimpleMessage>();
        }
Esempio n. 2
0
        public void A_response_should_be_sent_directly_if_a_reply_address_is_specified()
        {
            var ping = new PingMessage();

            var otherConsumer = new TestMessageConsumer <PongMessage>();

            RemoteBus.SubscribeInstance(otherConsumer);

            var consumer = new TestCorrelatedConsumer <PongMessage, Guid>(ping.CorrelationId);

            LocalBus.SubscribeInstance(consumer);

            var pong = new FutureMessage <PongMessage>();

            RemoteBus.SubscribeHandler <PingMessage>(message =>
            {
                pong.Set(new PongMessage(message.CorrelationId));

                RemoteBus.Context().Respond(pong.Message);
            });

            RemoteBus.ShouldHaveRemoteSubscriptionFor <PongMessage>();
            LocalBus.ShouldHaveRemoteSubscriptionFor <PongMessage>();
            LocalBus.ShouldHaveRemoteSubscriptionFor <PingMessage>();

            LocalBus.Publish(ping, context => context.SendResponseTo(LocalBus));

            Assert.IsTrue(pong.IsAvailable(8.Seconds()), "No pong generated");

            consumer.ShouldHaveReceivedMessage(pong.Message, 8.Seconds());
            otherConsumer.ShouldNotHaveReceivedMessage(pong.Message, 1.Seconds());
        }
Esempio n. 3
0
        protected override void EstablishContext()
        {
            base.EstablishContext();

            _ping   = new PingMessage();
            _future = new FutureMessage <PingMessage, Guid>(_ping.CorrelationId);

            _unsubscribe = RemoteBus.SubscribeHandler <PingMessage>(message => { _future.Set(message); });


            RemoteBus.ShouldHaveRemoteSubscriptionFor <PingMessage>();

            LocalBus.ShouldHaveRemoteSubscriptionFor <PingMessage>();

            Trace.WriteLine("LocalBus");

            LocalBus.OutboundPipeline.Trace();

            Trace.WriteLine("RemoteBus");

            RemoteBus.OutboundPipeline.Trace();


            LocalBus.Publish(_ping);
        }
Esempio n. 4
0
        public void The_retry_count_should_be_set_on_the_message()
        {
            var future = new FutureMessage <PingMessage>();

            bool first = true;

            LocalBus.SubscribeHandler <PingMessage>(message =>
            {
                if (first)
                {
                    Assert.AreEqual(0, LocalBus.Context().RetryCount);

                    LocalBus.MessageContext <PingMessage>().RetryLater();

                    first = false;
                }
                else
                {
                    Assert.AreEqual(1, LocalBus.Context().RetryCount);

                    future.Set(message);
                }
            });

            LocalBus.ShouldHaveRemoteSubscriptionFor <PingMessage>();

            LocalBus.Publish(new PingMessage());

            Assert.IsTrue(future.IsAvailable(20.Seconds()));
        }
        protected override void EstablishContext()
        {
            base.EstablishContext();
            _faultFuture = new FutureMessage <Fault <PingMessage, Guid> >();

            LocalBus.SubscribeHandler <PingMessage>(message =>
            {
                using (new TransactionScope())
                {
                }
            });
            LocalBus.SubscribeHandler <Fault <PingMessage, Guid> >(message =>
            {
                if (_faultFuture.IsAvailable(TimeSpan.Zero))
                {
                    return;
                }

                _faultFuture.Set(message);
            });

            LocalBus.ShouldHaveRemoteSubscriptionFor <PingMessage>();
            LocalBus.ShouldHaveRemoteSubscriptionFor <Fault <PingMessage, Guid> >();

            _ping = new PingMessage();

            LocalBus.Publish(_ping);
        }
Esempio n. 6
0
        protected override void EstablishContext()
        {
            base.EstablishContext();

            LocalBus.ShouldHaveRemoteSubscriptionFor <PingMessage>();

            _pingReceived = new FutureMessage <PingMessage>();
        }
Esempio n. 7
0
        public void Should_not_remove_any_existing_subscriptions()
        {
            RemoteBus.SubscribeHandler <A>(x => { });
            RemoteBus.Dispose();

            ThreadUtil.Sleep(2.Seconds());

            LocalBus.ShouldHaveRemoteSubscriptionFor <A>();
        }
Esempio n. 8
0
        public void Should_remove_any_previous_subscriptions()
        {
            RemoteBus.SubscribeHandler <A>(x => { });
            RemoteBus.ShouldHaveSubscriptionFor <A>();
            LocalBus.ShouldHaveRemoteSubscriptionFor <A>();

            RemoteBus.Dispose();

            ThreadUtil.Sleep(2.Seconds());

            SetupRemoteBus();

            LocalBus.ShouldNotHaveSubscriptionFor <A>();
        }
Esempio n. 9
0
        public void The_system_should_be_ready_to_use_before_getting_underway()
        {
            var consumer          = new TestMessageConsumer <PingMessage>();
            var unsubscribeAction = RemoteBus.SubscribeInstance(consumer);

            LocalBus.ShouldHaveRemoteSubscriptionFor <PingMessage>();

            var message = new PingMessage();

            LocalBus.Publish(message);

            consumer.ShouldHaveReceivedMessage(message, 8.Seconds());

            unsubscribeAction();
        }
Esempio n. 10
0
        private void SetupHealthService()
        {
            _healthSagaHealthSagaRepository = SetupSagaRepository <HealthSaga>();

            HealthService = new HealthService(RemoteBus, _healthSagaHealthSagaRepository);

            HealthService.Start();

            Thread.Sleep(500);

            LocalBus.ShouldHaveRemoteSubscriptionFor <EndpointCameOnline>();
            LocalBus.ShouldHaveRemoteSubscriptionFor <Heartbeat>();
            LocalBus.ShouldHaveRemoteSubscriptionFor <EndpointWentOffline>();
            LocalBus.ShouldHaveRemoteSubscriptionFor <TimeoutExpired>();
            LocalBus.ShouldHaveRemoteSubscriptionFor <PingEndpointResponse>();
        }
Esempio n. 11
0
        public void Removing_a_subscription_twice_should_not_have_a_negative_impact()
        {
            Guid clientId  = CombGuid.Generate();
            Uri  clientUri = new Uri("loopback://localhost/monster_beats");

            var subscription = new SubscriptionInformation(clientId, 1, typeof(PingMessage), RemoteBus.Endpoint.Address.Uri);

            LocalControlBus.Endpoint.Send(new AddSubscriptionClient(clientId, clientUri, clientUri));
            LocalControlBus.Endpoint.Send(new AddSubscription(subscription));
            LocalBus.ShouldHaveRemoteSubscriptionFor <PingMessage>();

            LocalControlBus.Endpoint.Send(new RemoveSubscription(subscription));
            LocalControlBus.Endpoint.Send(new RemoveSubscription(subscription));

            LocalBus.ShouldNotHaveSubscriptionFor <PingMessage>();
        }
Esempio n. 12
0
        public void A_reply_should_be_received_by_the_requestor()
        {
            RemoteBus.ShouldHaveRemoteSubscriptionFor <PingMessage>();
            LocalBus.ShouldHaveRemoteSubscriptionFor <PingMessage>();

            var message = new PingMessage();

            var consumer = new TestCorrelatedConsumer <PongMessage, Guid>(message.CorrelationId);

            LocalBus.SubscribeInstance(consumer);

            RemoteBus.ShouldHaveRemoteSubscriptionFor <PongMessage>();

            LocalBus.Publish(message);

            TestConsumerBase <PingMessage> .AnyShouldHaveReceivedMessage(message, _timeout);

            consumer.ShouldHaveReceivedMessage(new PongMessage(message.CorrelationId), _timeout);
        }
        public void Should_create_outbound_sink_for_route()
        {
            var address = new Uri("loopback://localhost/test_target");

            var configurator = new RoutingConfigurator();

            configurator.Route <PingMessage>().To(address);
            configurator.Route <PongMessage>().To(address);

            IBusService busService = configurator.Create(LocalBus);

            busService.Start(LocalBus);

            LocalBus.ShouldHaveRemoteSubscriptionFor <PingMessage>();
            LocalBus.ShouldHaveRemoteSubscriptionFor <PongMessage>();

            busService.Stop();

            LocalBus.ShouldNotHaveSubscriptionFor <PingMessage>();

            busService.Dispose();
        }
Esempio n. 14
0
        protected override void EstablishContext()
        {
            base.EstablishContext();
            _faultFuture = new FutureMessage <Fault <PingMessage, Guid> >();

            LocalBus.SubscribeHandler <PingMessage>(message => { throw new NotSupportedException("I am a naughty consumer! I go boom!"); });
            LocalBus.SubscribeHandler <Fault <PingMessage, Guid> >(message =>
            {
                if (_faultFuture.IsAvailable(TimeSpan.Zero))
                {
                    return;
                }

                _faultFuture.Set(message);
            });

            LocalBus.ShouldHaveRemoteSubscriptionFor <PingMessage>();
            LocalBus.ShouldHaveRemoteSubscriptionFor <Fault <PingMessage, Guid> >();

            _ping = new PingMessage();

            LocalBus.Publish(_ping);
        }
Esempio n. 15
0
 public void Should_have_a_subscription_for_the_pending_command()
 {
     LocalBus.ShouldHaveRemoteSubscriptionFor <FirstPending>();
 }
Esempio n. 16
0
 public void Should_have_a_subscription_for_the_first_command()
 {
     LocalBus.ShouldHaveRemoteSubscriptionFor <FirstCommand>();
 }