Esempio n. 1
0
        public void Handle_WithNull_DoesNothing()
        {
            // Arrange
            var dispatcher = new TopicDispatcher();

            // Act
            TestDelegate handle = () => dispatcher.Handle(subscriber, null);

            // Assert
            Assert.That(handle, Throws.Nothing);
        }
Esempio n. 2
0
        public void Register_WithAsyncTopicHandlerDelegate_WithUnserializableTopic_ThrowsUnserializableTypeException()
        {
            // Arrange
            var dispatcher = new TopicDispatcher();
            AsyncTopicHandlerDelegate <UnserializableTopic> handler = _ => Task.CompletedTask;

            // Act
            TestDelegate register = () => dispatcher.Register(handler);

            // Assert
            Assert.That(register, Throws.TypeOf <UnserializableTypeException>());
        }
Esempio n. 3
0
        public void Register_WithAsyncTopicHandler_WithUnserializableTopic_ThrowsUnserializableTypeException()
        {
            // Arrange
            var dispatcher = new TopicDispatcher();
            var handler    = new Mock <IAsyncTopicHandler <UnserializableTopic> >().Object;

            // Act
            TestDelegate register = () => dispatcher.Register(handler);

            // Assert
            Assert.That(register, Throws.TypeOf <UnserializableTypeException>());
        }
Esempio n. 4
0
        public void Handle_WithNoHandlerRegistered_DoesNothing()
        {
            // Arrange
            var dispatcher = new TopicDispatcher();
            var message    = new Topic();

            // Act
            TestDelegate handle = () => dispatcher.Handle(subscriber, message);

            // Assert
            Assert.That(handle, Throws.Nothing);
        }
Esempio n. 5
0
        public void Handle_WithBaseClassHandlerRegistered_DoesNothing()
        {
            // Arrange
            var dispatcher = new TopicDispatcher();

            dispatcher.Register(handler);
            var message = new SubTopic();

            // Act
            dispatcher.Handle(subscriber, message);

            // Assert
            mockHandler.Verify(m => m.Handle(It.IsAny <Topic>()), Times.Never);
        }
Esempio n. 6
0
        public void Handle_WithAsyncHandlerRegistered_CallsHandler()
        {
            // Arrange
            var dispatcher = new TopicDispatcher();

            dispatcher.Register(asyncHandler);
            var message = new Topic();

            // Act
            dispatcher.Handle(subscriber, message);

            // Assert
            mockAsyncHandler.Verify(m => m.Handle(It.IsIn(message)), Times.Once);
        }
Esempio n. 7
0
        public void Handle_WithHandlerDelegateRegistered_CallsHandler()
        {
            // Arrange
            var handled    = false;
            var dispatcher = new TopicDispatcher();
            var message    = new Topic();

            dispatcher.Register <Topic>(e => { handled = true; });

            // Act
            dispatcher.Handle(subscriber, message);

            // Assert
            Assert.That(handled, Is.True);
        }
Esempio n. 8
0
        public Builder(string name)
        {
            this.name          = name;
            TopicRouter        = new TopicRouter();
            MonitorCache       = new MonitorCache();
            RequestRouter      = new RequestRouter();
            PackageFactory     = new PackageFactory();
            TopicDispatcher    = new TopicDispatcher();
            RequestDispatcher  = new RequestDispatcher();
            SubscriptionsCache = new SubscriptionsCache();
            SerializerCache    = new SerializerCache();

            SenderCache     = new SenderCache(RequestRouter, MonitorCache);
            ReceiverCache   = new ReceiverCache(MonitorCache);
            PublisherCache  = new PublisherCache(MonitorCache);
            SubscriberCache = new SubscriberCache(TopicRouter, MonitorCache, SubscriptionsCache);
        }
Esempio n. 9
0
        public void Handle_WithAsyncHandlerDelegateRegistered_CallsHandler()
        {
            // Arrange
            var handled    = false;
            var dispatcher = new TopicDispatcher();
            var message    = new Topic();
            var wait       = new ManualResetEvent(false);

            dispatcher.Register <Topic>(e => Task.Run(() => { handled = true; wait.Set(); }));

            // Act
            dispatcher.Handle(subscriber, message);

            wait.WaitOne();

            // Assert
            Assert.That(handled, Is.True);
        }
Esempio n. 10
0
        private static void BackPressureTest()
        {
            var topicDispatcher = new TopicDispatcher();
            var threadBoundaryMonitor = new ThreadBoundaryMonitor();

            var reporting    = threadBoundaryMonitor.Wrap(new ReportingSystem(topicDispatcher));
            var cashierInner = new Cashier(topicDispatcher);
            var cashier      = threadBoundaryMonitor.Wrap(cashierInner);
            var assManager   = threadBoundaryMonitor.Wrap(new AssistantManager(topicDispatcher));
            var cooks        = new[]
            {
                threadBoundaryMonitor.Wrap(new Cook(topicDispatcher, 20)),
                threadBoundaryMonitor.Wrap(new Cook(topicDispatcher, 50)),
                threadBoundaryMonitor.Wrap(new Cook(topicDispatcher, 90))
            };
            var cookDispatcher =
                TTLSettingHandler.Wrap(
                    threadBoundaryMonitor.Wrap(
                        RetryDispatcher.Wrap(
                            TTLFilteringHandler.Wrap(
                                SmartDispatcher.Wrap(cooks, maxQueueLength: 15)))),
                    10);

            var waiter = new Waiter("Neil", topicDispatcher);

            topicDispatcher.Subscribe(cashier);
            topicDispatcher.Subscribe(cookDispatcher);
            topicDispatcher.Subscribe(assManager);
            topicDispatcher.Subscribe(reporting);
            topicDispatcher.Subscribe(threadBoundaryMonitor.Wrap(new Logger()));

            topicDispatcher.Subscribe(new SelfUnsubscribingOrderSampler(topicDispatcher));

            topicDispatcher.Subscribe(threadBoundaryMonitor.Wrap<OrderTaken>(new OrderFulfillmentCoordinator(topicDispatcher)));
            threadBoundaryMonitor.Start();

            RunTest(waiter, cashierInner, orderCount: 5000);
        }
Esempio n. 11
0
        private static void BackPressureTest()
        {
            var topicDispatcher       = new TopicDispatcher();
            var threadBoundaryMonitor = new ThreadBoundaryMonitor();

            ThreadBoundary <Report> reporting = threadBoundaryMonitor.Wrap(new ReportingSystem(topicDispatcher));
            var cashierInner = new Cashier(topicDispatcher);
            ThreadBoundary <QueueOrderForPayment> cashier    = threadBoundaryMonitor.Wrap(cashierInner);
            ThreadBoundary <PriceFood>            assManager = threadBoundaryMonitor.Wrap(new AssistantManager(topicDispatcher));
            var cooks = new[]
            {
                threadBoundaryMonitor.Wrap(new Cook(topicDispatcher, 20)),
                threadBoundaryMonitor.Wrap(new Cook(topicDispatcher, 50)),
                threadBoundaryMonitor.Wrap(new Cook(topicDispatcher, 90))
            };
            TTLSettingHandler <CookFood> cookDispatcher =
                TTLSettingHandler.Wrap(
                    threadBoundaryMonitor.Wrap(
                        RetryDispatcher.Wrap(
                            TTLFilteringHandler.Wrap(
                                SmartDispatcher.Wrap(cooks, 15)))),
                    10);

            var waiter = new Waiter("Neil", topicDispatcher);

            topicDispatcher.Subscribe(cashier);
            topicDispatcher.Subscribe(cookDispatcher);
            topicDispatcher.Subscribe(assManager);
            topicDispatcher.Subscribe(reporting);
            topicDispatcher.Subscribe(threadBoundaryMonitor.Wrap(new Logger()));

            topicDispatcher.Subscribe(new SelfUnsubscribingOrderSampler(topicDispatcher));

            topicDispatcher.Subscribe(threadBoundaryMonitor.Wrap <OrderTaken>(new OrderFulfillmentCoordinator(topicDispatcher)));
            threadBoundaryMonitor.Start();

            RunTest(waiter, cashierInner, 5000);
        }
Esempio n. 12
0
 public Builder WithAsyncTopicHandler <TTopic>(AsyncTopicHandlerDelegate <TTopic> handler)
 {
     TopicDispatcher.Register(handler);
     return(this);
 }
Esempio n. 13
0
 public Builder WithTopicHandler <TTopic>(ITopicHandler <TTopic> handler)
 {
     TopicDispatcher.Register(handler);
     return(this);
 }