public void ShouldFilter() { var documentItFiltered = "document.it.filtered"; var commandFilterThis = "command.filter.this"; var consumedEvent = new AutoResetEvent(false); var storage = new InMemoryKeyValueStorage <ExpandoObject>(); var filter = new DynamicFilter <ExpandoObject>((m, s) => true, storage); this.StartBus( "pipeline", cfg => { cfg.On(commandFilterThis) .ReactWith(new PipelineConsumerOf <ExpandoObject>(filter, new StaticRouter(documentItFiltered))) .RequiresAccept(); cfg.Route(documentItFiltered); }); var producer = this.StartBus( "producer", cfg => { cfg.Route(commandFilterThis); }); this.StartBus( "consumer", cfg => { cfg.On(documentItFiltered) .ReactWith <ExpandoObject>((m, ctx) => { consumedEvent.Set(); }); }); producer.Emit(commandFilterThis, new { }); var consumed = consumedEvent.WaitOne(5000); consumed.Should().BeTrue("Должно быть получено сообщение обработанное фильтом."); }
public void ShouldRoute() { var documentItRouted = "document.it.routed"; var commandRouteThis = "command.route.this"; var consumedEvent = new AutoResetEvent(false); var storage = new InMemoryKeyValueStorage<ExpandoObject>(); var router = new DynamicRouter<ExpandoObject>((m, s) => documentItRouted.ToMessageLabel(), storage); this.StartBus( "pipeline", cfg => { cfg.On(commandRouteThis) .ReactWith(new PipelineConsumerOf<ExpandoObject>(router)) .RequiresAccept(); cfg.Route(documentItRouted); }); var producer = this.StartBus( "producer", cfg => { cfg.Route(commandRouteThis); }); this.StartBus( "consumer", cfg => { cfg.On(documentItRouted) .ReactWith<ExpandoObject>((m, ctx) => { consumedEvent.Set(); }); }); producer.Emit(commandRouteThis, new { }); var consumed = consumedEvent.WaitOne(5000); consumed.Should() .BeTrue("Должно быть получено сообщение перенаправленое роутером."); }
public void StaticDataTests() { var storage = new InMemoryKeyValueStorage <Guid, Book>(RandomDataGenerator.SampleData()); Assert.AreEqual(storage.Count, (uint)2); Assert.AreEqual(storage.Get(RandomDataGenerator.theHobbit.Key), RandomDataGenerator.theHobbit.Value); Assert.AreEqual(storage.Get(RandomDataGenerator.theLordOfTheRings.Key), RandomDataGenerator.theLordOfTheRings.Value); Assert.AreEqual(storage.Get(Guid.NewGuid()), default(Book)); }
//Load.File("C:\Temp\MandolineCache\IND_DB\aug136fdbin_mandoline.db.fcst.rawdic"); static void Main(string[] args) { var repl = new Replify.ClearScriptRepl(); var randomData = RandomDataGenerator.RandomData(100000).ToArray(); var storage = new InMemoryKeyValueStorage <Guid, Book>(randomData); repl.AddHostObject("inmemory", storage); repl.AddHostObject("Mode", typeof(Tester.Mode)); repl.AddHostObject("test", new Tester()); repl.AddHostObject("Load", new Loader()); repl.StartReplLoop(args); }
public void ShouldChangeFilterCondition() { var documentItFiltered = "document.it.fitered"; var commandFilterThis = "command.filter.this"; var commandChangeFilter = "command.change.filter"; var key = "key"; var switchCondition = 4; var callCount = 0; var filteredEvent = new AutoResetEvent(false); var consumedEvent = new ManualResetEvent(false); var storage = new InMemoryKeyValueStorage <ExpandoObject>(); var filter = new DynamicFilter <ExpandoObject>( (m, s) => { dynamic data = s.Get(key); filteredEvent.Set(); return(!(data == null || data.Count < switchCondition)); }, storage); var control = new DynamicRouter <ExpandoObject> .DynamicRouterControlConsumer <ExpandoObject>( (message, filterStorage) => { dynamic data = filterStorage.Get(key); if (data == null) { dynamic item = new ExpandoObject(); item.Count = 1; filterStorage.Set(key, item); filteredEvent.Set(); return; } data.Count++; filterStorage.Set(key, data); filteredEvent.Set(); }, storage); this.StartBus( "pipeline", cfg => { cfg.On(commandFilterThis) .ReactWith(new PipelineConsumerOf <ExpandoObject>(filter, new StaticRouter(documentItFiltered))) .RequiresAccept(); cfg.On(commandChangeFilter) .ReactWith(control); cfg.Route(documentItFiltered); }); var producer = this.StartBus( "producer", cfg => { cfg.Route(commandFilterThis); cfg.Route(commandChangeFilter); }); this.StartBus( "consumer", cfg => { cfg.On(documentItFiltered) .ReactWith <ExpandoObject>( (m, ctx) => { callCount++; consumedEvent.Set(); }); }); for (int i = 0; i <= switchCondition; i++) { producer.Emit(commandFilterThis, new { }); filteredEvent.WaitOne(); producer.Emit(commandChangeFilter, new { }); filteredEvent.WaitOne(); } consumedEvent.WaitOne().Should().BeTrue("Должно быть получено сообщение перенаправленое роутером."); callCount.Should().Be(1, "Сообщение должно быть получено только один раз."); }
public void ShouldChangeRoute() { var documentItRouted = "document.it.routed"; var documentItDirected = "document.it.directed"; var commandRouteThis = "command.route.this"; var commandChangeRoute = "command.change.route"; var key = "key"; var switchCondition = 4; var consumedEvent = new AutoResetEvent(false); var directedEvent = new AutoResetEvent(false); var storage = new InMemoryKeyValueStorage <ExpandoObject>(); var router = new DynamicRouter <ExpandoObject>( (m, s) => { dynamic data = s.Get(key); if (data == null || data.Count < switchCondition) { return(documentItRouted.ToMessageLabel()); } return(documentItDirected.ToMessageLabel()); }, storage); var control = new DynamicRouter <ExpandoObject> .DynamicRouterControlConsumer <ExpandoObject>( (message, routeStorage) => { dynamic data = routeStorage.Get(key); if (data == null) { dynamic item = new ExpandoObject(); item.Count = 1; routeStorage.Set(key, item); directedEvent.Set(); return; } data.Count++; routeStorage.Set(key, data); directedEvent.Set(); }, storage); this.StartBus( "pipeline", cfg => { cfg.On(commandRouteThis) .ReactWith(new PipelineConsumerOf <ExpandoObject>(router)) .RequiresAccept(); cfg.On(commandChangeRoute) .ReactWith(control); cfg.Route(documentItRouted); cfg.Route(documentItDirected); }); var producer = this.StartBus( "producer", cfg => { cfg.Route(commandRouteThis); }); this.StartBus( "director", cfg => { cfg.On(documentItRouted) .ReactWith <ExpandoObject>( (m, ctx) => { ctx.Bus.Emit(commandChangeRoute, new { }); }); cfg.Route(commandChangeRoute); }); this.StartBus( "consumer", cfg => { cfg.On(documentItDirected) .ReactWith <ExpandoObject>((m, ctx) => { consumedEvent.Set(); }); }); for (int i = 0; i <= switchCondition; i++) { producer.Emit(commandRouteThis, new { }); if (i < switchCondition) { directedEvent.WaitOne(5000).Should().BeTrue("Сообщение должно быть обработано."); } } consumedEvent.WaitOne(5000).Should().BeTrue("Должно быть получено сообщение перенаправленое роутером."); }