Exemplo n.º 1
0
        public async Task TestRules()
        {
            var store = new RouteStore(new Dictionary <string, RouterConfig>
            {
                { "hub1", new RouterConfig(AllEndpoints, new List <Route> {
                        Route1
                    }) }
            });
            var underlying = new Mock <IRoutingService>();
            var client     = new FilteringRoutingService(underlying.Object, store, NullNotifierFactory.Instance);

            await client.RouteAsync("hub1", new[] { Message1, Message2 });

            underlying.Verify(s => s.RouteAsync("hub1", new[] { Message1 }), Times.Once);
        }
Exemplo n.º 2
0
        public async Task TestClose()
        {
            var underlying = new Mock <IRoutingService>();

            using (var client = new FilteringRoutingService(underlying.Object, RouteStore, NullNotifierFactory.Instance))
            {
                // Create at least one evaluator
                await client.RouteAsync("hub1", Message1);

                await client.CloseAsync(CancellationToken.None);

                // can close twice
                await client.CloseAsync(CancellationToken.None);

                await Assert.ThrowsAsync <InvalidOperationException>(() => client.RouteAsync("hub1", Message1));
            }
        }
Exemplo n.º 3
0
        public async Task TestChangingHub()
        {
            var notifier        = new TestNotifier();
            var notifierFactory = new TestNotifierFactory(notifier);
            var underlying      = new Mock <IRoutingService>();
            var store           = new Mock <IRouteStore>();

            store.Setup(s => s.GetRouterConfigAsync("hub1", It.IsAny <CancellationToken>())).ReturnsAsync(new RouterConfig(AllEndpoints, new[] { Route1 }, Option.None <Route>()));
            store.Setup(s => s.GetRouterConfigAsync("hub2", It.IsAny <CancellationToken>())).ReturnsAsync(new RouterConfig(AllEndpoints, new[] { Route2 }, Option.None <Route>()));

            var client = new FilteringRoutingService(underlying.Object, store.Object, notifierFactory);
            await client.RouteAsync("hub1", new[] { Message1, Message2, Message3 });

            await client.RouteAsync("hub2", new[] { Message1, Message2, Message3 });

            underlying.Verify(s => s.RouteAsync("hub1", new[] { Message1 }), Times.Once);
            underlying.Verify(s => s.RouteAsync("hub2", new[] { Message2 }), Times.Once);

            // change hub1
            underlying.ResetCalls();
            store.Setup(s => s.GetRouterConfigAsync("hub1", It.IsAny <CancellationToken>())).ReturnsAsync(new RouterConfig(AllEndpoints, new[] { Route2 }, Option.None <Route>()));
            await notifier.Change("hub1");

            await client.RouteAsync("hub1", new[] { Message1, Message2, Message3 });

            await client.RouteAsync("hub2", new[] { Message1, Message2, Message3 });

            underlying.Verify(s => s.RouteAsync("hub1", new[] { Message2 }), Times.Once);
            underlying.Verify(s => s.RouteAsync("hub2", new[] { Message2 }), Times.Once);

            // change hub2
            underlying.ResetCalls();
            store.Setup(s => s.GetRouterConfigAsync("hub2", It.IsAny <CancellationToken>())).ReturnsAsync(new RouterConfig(AllEndpoints, new[] { Route3 }, Option.None <Route>()));
            await notifier.Change("hub2");

            await client.RouteAsync("hub1", new[] { Message1, Message2, Message3 });

            await client.RouteAsync("hub2", new[] { Message1, Message2, Message3 });

            underlying.Verify(s => s.RouteAsync("hub1", new[] { Message2 }), Times.Once);
            underlying.Verify(s => s.RouteAsync("hub2", new[] { Message3 }), Times.Once);
        }
Exemplo n.º 4
0
        public async Task SmokeTest()
        {
            var underlying = new Mock <IRoutingService>();
            var client     = new FilteringRoutingService(underlying.Object, RouteStore, NullNotifierFactory.Instance);

            // Check proxies methods
            await client.StartAsync();

            underlying.Verify(s => s.StartAsync(), Times.Once);

            // Check lets messages through
            await client.RouteAsync("hub1", Message1);

            underlying.Verify(s => s.RouteAsync("hub1", new[] { Message1 }), Times.Once);

            await client.RouteAsync("hub1", new[] { Message2, Message3 });

            underlying.Verify(s => s.RouteAsync("hub1", new[] { Message2, Message3 }), Times.Once);

            // Check filters out messages
            await client.RouteAsync("hub2", new[] { Message2, Message3 });

            underlying.Verify(s => s.RouteAsync("hub2", It.IsAny <IEnumerable <IMessage> >()), Times.Never);
        }