package examples.jbehave;
import static org.jbehave.core.io.CodeLocations.codeLocationFromClass;
import static uk.co.acuminous.julez.util.PerformanceAssert.assertMinimumThroughput;
import static uk.co.acuminous.julez.util.PerformanceAssert.assertPassMark;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
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.JBehaveEmbedderScenario;
import uk.co.acuminous.julez.scenario.JBehaveStoryRunnerScenario;
import uk.co.acuminous.julez.scenario.Scenario;
import uk.co.acuminous.julez.scenario.ScenarioSource;
import uk.co.acuminous.julez.scenario.source.ScenarioHopper;
import static uk.co.acuminous.julez.util.JulezSugar.*;
public class ConcurrentJBehaveTest {
private URL scenarioLocation;
@Before
public void init() {
scenarioLocation = codeLocationFromClass(this.getClass());
}
@Test
public void demonstrateTheJBehaveStoryRunnerScenario() {
ThroughputMonitor throughputMonitor = new ThroughputMonitor();
ResultMonitor resultMonitor = new ResultMonitor();
FanOutPipe monitors = new FanOutPipe(throughputMonitor, resultMonitor);
List<Scenario> list = new ArrayList<Scenario>();
for (int i = 0; i < 500; i++) {
JBehaveStoryRunnerScenario scenario = new JBehaveStoryRunnerScenario(scenarioLocation, "examples/jbehave/calculator.story", new CalculatorSteps());
scenario.register(monitors);
list.add(scenario);
}
ScenarioSource scenarios = new ScenarioHopper(list);
new ConcurrentScenarioRunner().register(throughputMonitor).allocate(4, THREADS).queue(scenarios).go();
assertMinimumThroughput(100, throughputMonitor.getThroughput());
assertPassMark(100, resultMonitor.getPercentage());
}
@Test
public void demonstrateTheJBehaveEmbedderScenario() {
ThroughputMonitor throughputMonitor = new ThroughputMonitor();
ResultMonitor resultMonitor = new ResultMonitor();
FanOutPipe monitors = new FanOutPipe(throughputMonitor, resultMonitor);
List<Scenario> list = new ArrayList<Scenario>();
for (int i = 0; i < 500; i++) {
JBehaveEmbedderScenario scenario = new JBehaveEmbedderScenario(scenarioLocation, "examples/jbehave/calculator.story", new CalculatorSteps());
scenario.register(monitors);
list.add(scenario);
}
ScenarioSource scenarios = new ScenarioHopper(list);
new ConcurrentScenarioRunner().register(throughputMonitor).allocate(4, THREADS).queue(scenarios).go();
assertMinimumThroughput(5, throughputMonitor.getThroughput());
assertPassMark(100, resultMonitor.getPercentage());
}
}