package examples.jbehave; import static org.jbehave.core.io.CodeLocations.codeLocationFromClass; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.jbehave.core.annotations.Given; import org.jbehave.core.annotations.Then; import org.jbehave.core.annotations.When; import uk.co.acuminous.julez.event.handler.ResultMonitor; 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.scenario.JBehaveStoryRunnerScenario; import uk.co.acuminous.julez.scenario.Scenario; import uk.co.acuminous.julez.scenario.source.ScenarioHopper; import uk.co.acuminous.julez.util.PerformanceAssert; import static uk.co.acuminous.julez.util.JulezSugar.*; public class InceptionSteps { private ThroughputMonitor throughputMonitor; private ResultMonitor resultMonitor; private FanOutPipe monitors = new FanOutPipe(); @Given("a throughput monitor") public void aThroughputMonitor() { throughputMonitor = new ThroughputMonitor(); monitors.register(throughputMonitor); } @Given("a result monitor") public void aResultMonitor() { resultMonitor = new ResultMonitor(); monitors.register(resultMonitor); } @When("I run $numStories $story scenarios from $n threads") public void run(int numStories, String story, int numThreads) { URL scenarioLocation = codeLocationFromClass(this.getClass()); List<Scenario> list = new ArrayList<Scenario>(); String storyPath = String.format("jbehave/" + story + ".txt"); for (int i = 0; i < numStories; i++) { JBehaveStoryRunnerScenario scenario = new JBehaveStoryRunnerScenario(scenarioLocation, storyPath, new CalculatorSteps()); scenario.register(monitors); list.add(scenario); } new ConcurrentScenarioRunner().register(monitors).allocate(numThreads, THREADS).queue(new ScenarioHopper(list)).go(); } @Then("the minimum throughput should be $minimumThroughput $scenarios per second") public void verifyThroughput(int minimumThroughput) { PerformanceAssert.assertMinimumThroughput(minimumThroughput, throughputMonitor.getThroughput()); } @Then("$percent% of scenarios should be successful") public void verifyPassMark(int percent) { PerformanceAssert.assertMinimumPasses(percent, throughputMonitor.getThroughput()); } }