package examples.basics; import static uk.co.acuminous.julez.util.JulezSugar.*; import static uk.co.acuminous.julez.util.PerformanceAssert.assertMinimumThroughput; import org.junit.Test; import uk.co.acuminous.julez.event.handler.ThroughputMonitor; import uk.co.acuminous.julez.event.pipe.FanOutPipe; import uk.co.acuminous.julez.runner.ConcurrentScenarioRunner; import uk.co.acuminous.julez.runner.MultiConcurrentScenarioRunner; import uk.co.acuminous.julez.scenario.BaseScenario; import uk.co.acuminous.julez.scenario.Scenario; import uk.co.acuminous.julez.scenario.ScenarioSource; import uk.co.acuminous.julez.scenario.limiter.SizeLimiter; import uk.co.acuminous.julez.scenario.source.ScenarioRepeater; public class MultipleConcurrentScenariosTest { @Test public void demonstrateRunningMultipleScenariosConcurrently() { ThroughputMonitor combinedMonitor = new ThroughputMonitor(); ThroughputMonitor monitor1 = new ThroughputMonitor(); ThroughputMonitor monitor2 = new ThroughputMonitor(); Scenario helloWorldScenario = new HelloWorldScenario().register(new FanOutPipe(monitor1, combinedMonitor)); ScenarioSource helloWorldScenarios = new SizeLimiter().limit(new ScenarioRepeater(helloWorldScenario)).to(100, SCENARIOS); ConcurrentScenarioRunner runner1 = new ConcurrentScenarioRunner().register(monitor1).allocate(10, THREADS).queue(helloWorldScenarios); Scenario goodbyeWorldScenario = new GoodbyeWorldScenario().register(new FanOutPipe(monitor2, combinedMonitor)); ScenarioSource goodbyeWorldScenarios = new SizeLimiter().limit(new ScenarioRepeater(goodbyeWorldScenario)).to(100, SCENARIOS); ConcurrentScenarioRunner runner2 = new ConcurrentScenarioRunner().register(monitor2).allocate(10, THREADS).queue(goodbyeWorldScenarios); new MultiConcurrentScenarioRunner(runner1, runner2).register(combinedMonitor).go(); assertMinimumThroughput(500, monitor1.getThroughput()); assertMinimumThroughput(250, monitor2.getThroughput()); assertMinimumThroughput(750, combinedMonitor.getThroughput()); } class HelloWorldScenario extends BaseScenario { public void run() { handler.onEvent(eventFactory.begin()); System.out.print("Hello World "); handler.onEvent(eventFactory.end()); } } class GoodbyeWorldScenario extends BaseScenario { public void run() { handler.onEvent(eventFactory.begin()); System.out.print("Goodbye World "); handler.onEvent(eventFactory.end()); } } }