package uk.co.acuminous.julez.scenario.source; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static uk.co.acuminous.julez.util.JulezSugar.SCENARIOS; import static uk.co.acuminous.julez.util.JulezSugar.THREADS; import org.junit.Before; import org.junit.Test; import uk.co.acuminous.julez.event.Event; import uk.co.acuminous.julez.runner.ConcurrentScenarioRunner; import uk.co.acuminous.julez.scenario.Scenario; import uk.co.acuminous.julez.scenario.ScenarioEvent; import uk.co.acuminous.julez.scenario.ScenarioSource; import uk.co.acuminous.julez.scenario.limiter.SizeLimiter; import uk.co.acuminous.julez.test.NoOpScenario; import uk.co.acuminous.julez.test.TestEventRepository; public class SizeLimiterTest { private ConcurrentScenarioRunner runner; @Before public void init() { runner = new ConcurrentScenarioRunner(); } @Test public void capsNumberOfScenariosToSpecifiedSize() { ScenarioSource scenarios = new SizeLimiter().limit(new ScenarioRepeater(new NoOpScenario())).to(100, SCENARIOS); SizeLimiter limiter = new SizeLimiter(scenarios, 10); for (int i = 10; i > 0; i--) { assertNotNull(limiter.next()); } assertNull(limiter.next()); } @Test public void tolleratesUnderlyingSourceSmallerThanSpecifiedSize() { ScenarioSource scenarios = new ScenarioHopper(new NoOpScenario()); SizeLimiter limiter = new SizeLimiter(scenarios, 10); assertNotNull(limiter.next()); assertNull(limiter.next()); } @Test public void supportsMultiThreading() { TestEventRepository repository = new TestEventRepository(); Scenario scenario = new NoOpScenario().register(repository); ScenarioSource scenarios = new SizeLimiter().limit(new ScenarioRepeater(scenario)).to(200, SCENARIOS); SizeLimiter limiter = new SizeLimiter(scenarios, 100); runner.queue(limiter).allocate(10, THREADS).go(); assertEquals(100, repository.count(Event.TYPE, ScenarioEvent.BEGIN)); assertEquals(100, repository.count(Event.TYPE, ScenarioEvent.END)); } }