package org.threadly.concurrent.wrapper.limiter; import static org.junit.Assert.*; import org.junit.Test; import org.threadly.concurrent.PrioritySchedulerTest.PrioritySchedulerFactory; import org.threadly.concurrent.SubmitterExecutor; import org.threadly.concurrent.SubmitterScheduler; import org.threadly.concurrent.SubmitterSchedulerInterfaceTest.SubmitterSchedulerFactory; @SuppressWarnings("javadoc") public class SubmitterSchedulerLimiterTest extends ExecutorLimiterTest { @Override protected SubmitterSchedulerLimiter getLimiter(int parallelCount) { return new SubmitterSchedulerLimiter(scheduler, parallelCount); } @Override protected SubmitterExecutorFactory getSubmitterExecutorFactory() { return new SchedulerLimiterFactory(); } @Override @Test @SuppressWarnings("unused") public void constructorFail() { try { new SubmitterSchedulerLimiter(null, 100); fail("Exception should have thrown"); } catch (IllegalArgumentException e) { // expected } try { new SubmitterSchedulerLimiter(scheduler, 0); fail("Exception should have thrown"); } catch (IllegalArgumentException e) { // expected } } protected static class SchedulerLimiterFactory implements SubmitterSchedulerFactory { private final PrioritySchedulerFactory schedulerFactory = new PrioritySchedulerFactory(); @Override public void shutdown() { schedulerFactory.shutdown(); } @Override public SubmitterExecutor makeSubmitterExecutor(int poolSize, boolean prestartIfAvailable) { return makeSubmitterScheduler(poolSize, prestartIfAvailable); } @Override public SubmitterScheduler makeSubmitterScheduler(int poolSize, boolean prestartIfAvailable) { SubmitterScheduler scheduler = schedulerFactory.makeSubmitterScheduler(poolSize, prestartIfAvailable); return new SubmitterSchedulerLimiter(scheduler, poolSize); } } }