package org.threadly.concurrent.wrapper;
import org.threadly.concurrent.PrioritySchedulerTest.PrioritySchedulerFactory;
import org.threadly.concurrent.SubmitterScheduler;
import org.threadly.concurrent.SubmitterSchedulerInterfaceTest;
@SuppressWarnings("javadoc")
public class KeyDistributedSchedulerKeySchedulerTest extends SubmitterSchedulerInterfaceTest {
@Override
protected SubmitterSchedulerFactory getSubmitterSchedulerFactory() {
return new KeyBasedSubmitterSchedulerFactory();
}
@Override
protected boolean isSingleThreaded() {
return true;
}
private class KeyBasedSubmitterSchedulerFactory implements SubmitterSchedulerFactory {
private final PrioritySchedulerFactory schedulerFactory = new PrioritySchedulerFactory();
@Override
public SubmitterScheduler makeSubmitterExecutor(int poolSize, boolean prestartIfAvailable) {
return makeSubmitterScheduler(poolSize, prestartIfAvailable);
}
@Override
public SubmitterScheduler makeSubmitterScheduler(int poolSize, boolean prestartIfAvailable) {
SubmitterScheduler scheduler = schedulerFactory.makeSubmitterScheduler(poolSize, prestartIfAvailable);
KeyDistributedScheduler distributor = new KeyDistributedScheduler(poolSize, scheduler);
return distributor.getSchedulerForKey(this);
}
@Override
public void shutdown() {
schedulerFactory.shutdown();
}
}
}