Exemplo n.º 1
0
        public void Should_handle_a_proxy_of_t()
        {
            var faulted  = new Future <Fault>();
            var received = new Future <Request <Simple> >();

            var engine = new DynamicRoutingEngine(new PoolFiber());

            engine.Configure(x =>
            {
                x.Receive <Fault>(faulted.Complete);
                x.Receive <Request <Simple> >(received.Complete);
            });

            engine.Send <Request <Simple> >();

            var completed = received.WaitUntilCompleted(4.Seconds());

            if (faulted.IsCompleted)
            {
                Trace.WriteLine("Fault" + faulted.Value.Message);
            }

            completed.ShouldBeTrue();
            received.Value.ShouldNotBeNull();
        }
Exemplo n.º 2
0
        public void Adding_a_request_message()
        {
            _fiber  = new SynchronousFiber();
            _engine = new DynamicRoutingEngine(_fiber);

            _engine.Request(new A(), new ShuntChannel());
        }
Exemplo n.º 3
0
        public void Should_have_the_bits_without_the_message_first()
        {
            var engine     = new DynamicRoutingEngine(new PoolFiber());
            var visualizer = new TraceRoutingEngineVisualizer();

            var received = new Future <A>();

            engine.Configure(x => x.Receive <A>(received.Complete));

            var block = new Future <int>();

            engine.Add(0, () =>
            {
                visualizer.Show(engine);
                block.Complete(0);
            });
            block.WaitUntilCompleted(2.Seconds());

            engine.Send(new A());
            received.WaitUntilCompleted(2.Seconds());

            engine.Send(new B());

            var receivedB = new Future <B>();

            engine.Configure(x => x.Receive <B>(receivedB.Complete));

            received.WaitUntilCompleted(8.Seconds()).ShouldBeTrue();
            receivedB.WaitUntilCompleted(8.Seconds()).ShouldBeTrue();

            //engine.Receive<A, B>(x => { });

            visualizer.Show(engine);
        }
Exemplo n.º 4
0
		public void Adding_a_request_message()
		{
			_fiber = new SynchronousFiber();
			_engine = new DynamicRoutingEngine(_fiber);

			_engine.Request(new A(), new ShuntChannel());
		}
Exemplo n.º 5
0
		public void Should_have_the_bits_without_the_message_first()
		{
			var engine = new DynamicRoutingEngine(new PoolFiber());
			var visualizer = new TraceRoutingEngineVisualizer();

			var received = new Future<A>();
			engine.Configure(x => x.Receive<A>(received.Complete));

			var block = new Future<int>();
			engine.Add(0, () =>
				{
					visualizer.Show(engine);
					block.Complete(0);
				});
			block.WaitUntilCompleted(2.Seconds());

			engine.Send(new A());
			received.WaitUntilCompleted(2.Seconds());

			engine.Send(new B());

			var receivedB = new Future<B>();
			engine.Configure(x => x.Receive<B>(receivedB.Complete));

			received.WaitUntilCompleted(8.Seconds()).ShouldBeTrue();
			receivedB.WaitUntilCompleted(8.Seconds()).ShouldBeTrue();

			//engine.Receive<A, B>(x => { });

			visualizer.Show(engine);
		}
Exemplo n.º 6
0
		public void Should_upconvert_to_a_message_of_t()
		{
			var received = new Future<Message<Simple>>();

			var engine = new DynamicRoutingEngine(new SynchronousFiber());
			engine.Receive<Message<Simple>>(received.Complete);

			engine.Send(new SimpleImpl());

			received.WaitUntilCompleted(2.Seconds()).ShouldBeTrue();
			received.Value.ShouldNotBeNull();
		}
Exemplo n.º 7
0
        public void Should_upconvert_to_a_request_of_t()
        {
            var received = new Future<Request<Simple>>();

            var engine = new DynamicRoutingEngine(new PoolFiber());
            engine.Configure(x => x.Receive<Request<Simple>>(received.Complete));

            engine.Send(new SimpleImpl());

            received.WaitUntilCompleted(6.Seconds()).ShouldBeTrue();
            received.Value.ShouldNotBeNull();
        }
Exemplo n.º 8
0
        public void Should_upconvert_to_a_request_of_t()
        {
            var received = new Future <Request <Simple> >();

            var engine = new DynamicRoutingEngine(new PoolFiber());

            engine.Configure(x => x.Receive <Request <Simple> >(received.Complete));

            engine.Send(new SimpleImpl());

            received.WaitUntilCompleted(6.Seconds()).ShouldBeTrue();
            received.Value.ShouldNotBeNull();
        }
Exemplo n.º 9
0
        bool RunTest <T1, T2>(int consumerCount, int messageCount, Future <int> complete, Func <T1> value1Provider,
                              Func <T2> value2Provider, out int totalMessageCount)
        {
            var engine = new DynamicRoutingEngine(new PoolFiber());

            int joinCount = (messageCount / 2) * (messageCount / 2) * consumerCount;

            totalMessageCount = consumerCount * messageCount + joinCount;
            var latch = new CountdownLatch(totalMessageCount, complete.Complete);

            int countA = 0;
            int countB = 0;
            int countC = 0;

            engine.Configure(x =>
            {
                for (int i = 0; i < consumerCount; i++)
                {
                    x.Receive <A>(m =>
                    {
                        Interlocked.Increment(ref countA);
                        latch.CountDown();
                    });
                    x.Receive <B>(m =>
                    {
                        Interlocked.Increment(ref countB);
                        latch.CountDown();
                    });
                }
            });

            //var visualizer = new RoutingEngineTextVisualizer();
            //visualizer.Output = s => Console.WriteLine(s);
            //visualizer.Visit(engine);

            for (int i = 0; i < messageCount; i += 2)
            {
                engine.Send(value1Provider());
                engine.Send(value2Provider());
            }

            bool waitUntilCompleted = complete.WaitUntilCompleted(30.Seconds());

            Console.WriteLine("Consumed A: " + countA);
            Console.WriteLine("Consumed B: " + countB);
            Console.WriteLine("Consumed C: " + countC);


            return(waitUntilCompleted);
        }
Exemplo n.º 10
0
        public void Two_receives_are_posted_for_a_message()
        {
            _first = new Future<IBottom>();
            _second = new Future<IBottom>();

            _engine = new DynamicRoutingEngine(new SynchronousFiber());
            _engine.Configure(x =>
                {
                    x.Receive<IBottom>(_first.Complete);
                    x.Receive<IBottom>(_second.Complete);
                });

            _engine.Send(new OverTheTop());
        }
Exemplo n.º 11
0
        public void Should_match_a_join_node()
        {
            RoutingEngine engine = new DynamicRoutingEngine(new PoolFiber());

            var called = new Future<Message<A>>();

            engine.Configure(x => { x.Receive<Message<A>>(called.Complete); });

            engine.Send<Message<A>>(new MessageImpl<A>(new A()));

            called.WaitUntilCompleted(5.Seconds()).ShouldBeTrue("Message was not delivered");

            // new RoutingEngineTextVisualizer().Visit(engine);
        }
Exemplo n.º 12
0
        public void Two_receives_are_posted_for_a_message()
        {
            _first  = new Future <IBottom>();
            _second = new Future <IBottom>();

            _engine = new DynamicRoutingEngine(new SynchronousFiber());
            _engine.Configure(x =>
            {
                x.Receive <IBottom>(_first.Complete);
                x.Receive <IBottom>(_second.Complete);
            });

            _engine.Send(new OverTheTop());
        }
Exemplo n.º 13
0
        public void Should_match_a_join_node()
        {
            RoutingEngine engine = new DynamicRoutingEngine(new PoolFiber());

            var called = new Future <Message <A> >();

            engine.Configure(x => { x.Receive <Message <A> >(called.Complete); });

            engine.Send <Message <A> >(new MessageImpl <A>(new A()));

            called.WaitUntilCompleted(5.Seconds()).ShouldBeTrue("Message was not delivered");

            // new RoutingEngineTextVisualizer().Visit(engine);
        }
Exemplo n.º 14
0
        public void Should_properly_invoke_the_message_receiver()
        {
            RoutingEngine engine = new DynamicRoutingEngine(new SynchronousFiber());

            Future<A> receivedA = new Future<A>();
            Future<B> receivedB = new Future<B>();

            engine.Receive<A>(receivedA.Complete);
            engine.Receive<B>(receivedB.Complete);

            engine.Send(new B());

            receivedA.WaitUntilCompleted(2.Seconds()).ShouldBeTrue("A not received");
            receivedB.WaitUntilCompleted(2.Seconds()).ShouldBeTrue("B not received");
        }
Exemplo n.º 15
0
		public void Should_display_the_empty_network()
		{
			var received = new Future<A>();

			var engine = new DynamicRoutingEngine(new PoolFiber());

			engine.Send(new A());

			Trace.WriteLine("Before Receive");
			var visualizer = new TraceRoutingEngineVisualizer();
			visualizer.Show(engine);

			engine.Configure(x => x.Receive<A>(received.Complete));

			Trace.WriteLine("After Receive");
			visualizer.Show(engine);

			received.WaitUntilCompleted(2.Seconds()).ShouldBeTrue();
		}
Exemplo n.º 16
0
        public void Should_display_the_empty_network()
        {
            var received = new Future <A>();

            var engine = new DynamicRoutingEngine(new PoolFiber());

            engine.Send(new A());

            Trace.WriteLine("Before Receive");
            var visualizer = new TraceRoutingEngineVisualizer();

            visualizer.Show(engine);

            engine.Configure(x => x.Receive <A>(received.Complete));

            Trace.WriteLine("After Receive");
            visualizer.Show(engine);

            received.WaitUntilCompleted(2.Seconds()).ShouldBeTrue();
        }
Exemplo n.º 17
0
        public void Should_navigate_properly()
        {
            RoutingEngine engine = new DynamicRoutingEngine(new PoolFiber());

            var foundA = new Future<AlphaNode<Message<A>>>();
            var foundJoin = new Future<JoinNode<Message<A>>>();

            engine.Configure(x =>
                {
                    new MatchAlphaNode<Message<A>>(engine, alphaNode =>
                        {
                            foundA.Complete(alphaNode);

                            new MatchJoinNode<Message<A>>(alphaNode, joinNode => { foundJoin.Complete(joinNode); });
                        });
                });

            foundA.WaitUntilCompleted(5.Seconds()).ShouldBeTrue("Message A alpha node not found");
            foundJoin.WaitUntilCompleted(5.Seconds()).ShouldBeTrue("Message A constant join node not found");

            // new RoutingEngineTextVisualizer().Visit(engine);
        }
Exemplo n.º 18
0
        public void Should_navigate_properly()
        {
            RoutingEngine engine = new DynamicRoutingEngine(new PoolFiber());

            var foundA    = new Future <AlphaNode <Message <A> > >();
            var foundJoin = new Future <JoinNode <Message <A> > >();

            engine.Configure(x =>
            {
                new MatchAlphaNode <Message <A> >(engine, alphaNode =>
                {
                    foundA.Complete(alphaNode);

                    new MatchJoinNode <Message <A> >(alphaNode, joinNode => { foundJoin.Complete(joinNode); });
                });
            });

            foundA.WaitUntilCompleted(5.Seconds()).ShouldBeTrue("Message A alpha node not found");
            foundJoin.WaitUntilCompleted(5.Seconds()).ShouldBeTrue("Message A constant join node not found");

            // new RoutingEngineTextVisualizer().Visit(engine);
        }
Exemplo n.º 19
0
        public void Should_handle_a_proxy_of_t()
        {
            var faulted = new Future<Fault>();
            var received = new Future<Request<Simple>>();

            var engine = new DynamicRoutingEngine(new PoolFiber());
            engine.Configure(x =>
                {
                    x.Receive<Fault>(faulted.Complete);
                    x.Receive<Request<Simple>>(received.Complete);
                });

            engine.Send<Request<Simple>>();

            var completed = received.WaitUntilCompleted(4.Seconds());

            if(faulted.IsCompleted)
            {
                Trace.WriteLine("Fault" + faulted.Value.Message);
            }

            completed.ShouldBeTrue();
            received.Value.ShouldNotBeNull();
        }
 public DynamicRoutingEngineConfiguratorContext(DynamicRoutingEngine engine)
 {
     _engine = engine;
 }
 public DynamicRoutingEngineConfigurator(DynamicRoutingEngine engine)
 {
     _engine = engine;
     _configurators = new List<RoutingConfigurator>();
 }
Exemplo n.º 22
0
        protected override bool Visit(DynamicRoutingEngine engine)
        {
            AppendLine(engine.GetType().ToShortTypeName());

            return(base.Visit(engine));
        }
Exemplo n.º 23
0
        public void An_inheritance_chain_is_part_of_a_message()
        {
            _engine = new DynamicRoutingEngine(new SynchronousFiber());

            _engine.Send(new OverTheTop());
        }
Exemplo n.º 24
0
 protected virtual bool Visit(DynamicRoutingEngine engine)
 {
     Visit(engine.Root);
     return(true);
 }
 public DynamicRoutingEngineConfigurator(DynamicRoutingEngine engine)
 {
     _engine    = engine;
     _joinNodes = new DictionaryCache <Type, object>();
 }
Exemplo n.º 26
0
        public void An_inheritance_chain_is_part_of_a_message()
        {
            _engine = new DynamicRoutingEngine(new SynchronousFiber());

            _engine.Send(new OverTheTop());
        }