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); }
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)); } }
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); }
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); }