Class Scheduler
java.lang.Object
org.apache.maven.surefire.junitcore.pc.Scheduler
- All Implemented Interfaces:
org.junit.runners.model.RunnerScheduler
Schedules tests, controls thread resources, awaiting tests and other schedulers finished, and
a master scheduler can shutdown slaves.
The scheduler objects should be first created (and wired) and set in runners
A new instance of scheduling strategy should be passed to the constructor of this scheduler.
The scheduler objects should be first created (and wired) and set in runners
ParentRunner.setScheduler(org.junit.runners.model.RunnerScheduler).
A new instance of scheduling strategy should be passed to the constructor of this scheduler.
- Since:
- 2.16
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate final classIf this is a master scheduler, the slaves can stop scheduling by the master through the controller.classThere is a way to shutdown the hierarchy of schedulers. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final Balancerprivate final org.junit.runner.Descriptionprivate booleanprivate final ConsoleLoggerprivate Scheduler.Controllerprivate booleanprivate final Set<Scheduler.Controller> private booleanprivate final SchedulingStrategy -
Constructor Summary
ConstructorsConstructorDescriptionScheduler(ConsoleLogger logger, org.junit.runner.Description description, Scheduler masterScheduler, SchedulingStrategy strategy) Should be used with individual pools on suites, classes and methods, seeParallelComputerBuilder.useSeparatePools().Scheduler(ConsoleLogger logger, org.junit.runner.Description description, Scheduler masterScheduler, SchedulingStrategy strategy, int concurrency) Scheduler(ConsoleLogger logger, org.junit.runner.Description description, Scheduler masterScheduler, SchedulingStrategy strategy, Balancer balancer) Can be used by e.g.Scheduler(ConsoleLogger logger, org.junit.runner.Description description, SchedulingStrategy strategy) Use e.g.Scheduler(ConsoleLogger logger, org.junit.runner.Description description, SchedulingStrategy strategy, int concurrency) Should be used if schedulers in parallel children and parent use one instance of bounded thread pool.Scheduler(ConsoleLogger logger, org.junit.runner.Description description, SchedulingStrategy strategy, Balancer balancer) New instances should be used by schedulers with limited concurrency bybalanceragainst other groups of schedulers. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidprotected voidprivate booleanprotected ShutdownResultdescribeStopped(boolean stopNow) Attempts to stop all actively executing tasks and immediately returns a collection of descriptions of those tasks which have started prior to this call.voidfinished()protected voidlogQuietly(String msg) protected voidprotected Scheduler.ShutdownHandlerprivate booleanvoidprivate voidsetController(Scheduler.Controller masterController) protected booleanprivate voidstop(Collection<org.junit.runner.Description> executedTests, Collection<org.junit.runner.Description> incompleteTests, boolean tryCancelFutures, boolean stopNow) Stop/Shutdown/Interrupt scheduler and its children (if any).private Runnable
-
Field Details
-
balancer
-
strategy
-
slaves
-
description
private final org.junit.runner.Description description -
logger
-
shutdown
private volatile boolean shutdown -
started
private volatile boolean started -
finished
private volatile boolean finished -
masterController
-
-
Constructor Details
-
Scheduler
public Scheduler(ConsoleLogger logger, org.junit.runner.Description description, SchedulingStrategy strategy) Use e.g. parallel classes have own non-shared thread pool, and methods another pool.
You can use it with one infinite thread pool shared in strategies across all suites, class runners, etc.- Parameters:
logger- console loggerdescription- JUnit description of classstrategy- scheduling strategy
-
Scheduler
public Scheduler(ConsoleLogger logger, org.junit.runner.Description description, SchedulingStrategy strategy, int concurrency) Should be used if schedulers in parallel children and parent use one instance of bounded thread pool.
Set this scheduler in a e.g. one suite of classes, then every individual class runner should referenceScheduler(ConsoleLogger, org.junit.runner.Description, Scheduler, SchedulingStrategy)orScheduler(ConsoleLogger, org.junit.runner.Description, Scheduler, SchedulingStrategy, int).- Parameters:
logger- current logger implementationdescription- description of current runnerstrategy- scheduling strategy with a shared thread poolconcurrency- determines maximum concurrent children scheduled a time viaschedule(Runnable)- Throws:
NullPointerException- if nullstrategy
-
Scheduler
public Scheduler(ConsoleLogger logger, org.junit.runner.Description description, SchedulingStrategy strategy, Balancer balancer) New instances should be used by schedulers with limited concurrency bybalanceragainst other groups of schedulers. The schedulers share one pool.
Unlike inScheduler(ConsoleLogger, org.junit.runner.Description, SchedulingStrategy, int)which was limiting theconcurrencyof children of a runner where this scheduler was set,thisbalanceris limiting the concurrency of all children in runners having schedulers created by this constructor.- Parameters:
logger- current logger implementationdescription- description of current runnerstrategy- scheduling strategy which may share threads with other strategybalancer- determines maximum concurrent children scheduled a time viaschedule(Runnable)- Throws:
NullPointerException- if nullstrategyorbalancer
-
Scheduler
public Scheduler(ConsoleLogger logger, org.junit.runner.Description description, Scheduler masterScheduler, SchedulingStrategy strategy, Balancer balancer) Can be used by e.g. a runner having parallel classes in use case with parallel suites, classes and methods sharing the same thread pool.- Parameters:
logger- current logger implementationdescription- description of current runnermasterScheduler- scheduler sharing own threads with this slavestrategy- scheduling strategy for this schedulerbalancer- determines maximum concurrent children scheduled a time viaschedule(Runnable)- Throws:
NullPointerException- if nullmasterScheduler,strategyorbalancer
-
Scheduler
public Scheduler(ConsoleLogger logger, org.junit.runner.Description description, Scheduler masterScheduler, SchedulingStrategy strategy, int concurrency) - Parameters:
logger- console loggerdescription- JUnit description of classmasterScheduler- a reference toScheduler(ConsoleLogger, org.junit.runner.Description, SchedulingStrategy, int)orScheduler(ConsoleLogger, org.junit.runner.Description, SchedulingStrategy)strategy- scheduling strategyconcurrency- determines maximum concurrent children scheduled a time viaschedule(Runnable)- See Also:
-
Scheduler
public Scheduler(ConsoleLogger logger, org.junit.runner.Description description, Scheduler masterScheduler, SchedulingStrategy strategy) Should be used with individual pools on suites, classes and methods, seeParallelComputerBuilder.useSeparatePools().
Cached thread pool is infinite and can be always shared.- Parameters:
logger- console loggerdescription- JUnit description of classmasterScheduler- parent schedulerstrategy- scheduling strategy
-
-
Method Details
-
setController
-
register
- Parameters:
slave- a slave scheduler to register- Returns:
trueif successfully registered theslave.
-
canSchedule
private boolean canSchedule()- Returns:
trueif new tasks can be scheduled.
-
logQuietly
-
logQuietly
-
describeStopped
Attempts to stop all actively executing tasks and immediately returns a collection of descriptions of those tasks which have started prior to this call.
This scheduler and other registered schedulers will stop, seeregister(Scheduler). IfshutdownNowis set, waiting methods will be interrupted viaThread.interrupt().- Parameters:
stopNow- iftrueinterrupts waiting test methods- Returns:
- collection of descriptions started before shutting down
-
stop
private void stop(Collection<org.junit.runner.Description> executedTests, Collection<org.junit.runner.Description> incompleteTests, boolean tryCancelFutures, boolean stopNow) Stop/Shutdown/Interrupt scheduler and its children (if any).- Parameters:
executedTests- Started tests which have finished normally or abruptly till called this method.incompleteTests- Started tests which have finished incomplete due to shutdown.tryCancelFutures- Useful to set tofalseif a timeout is specified in plugin config. When the runner ofComputer.getSuite(org.junit.runners.model.RunnerBuilder, Class[])is finished inParentRunner.run(org.junit.runner.notification.RunNotifier)all the thread-pools created byParallelComputerBuilder.PCare already dead. See the unit testParallelComputerBuilder#timeoutAndForcedShutdown().stopNow- Interrupting tests byExecutorService.shutdownNow()orFuture#cancel(true)orThread.interrupt().
-
shutdownThreadPoolsAwaitingKilled
protected boolean shutdownThreadPoolsAwaitingKilled() -
beforeExecute
protected void beforeExecute() -
afterExecute
protected void afterExecute() -
schedule
- Specified by:
schedulein interfaceorg.junit.runners.model.RunnerScheduler
-
finished
public void finished()- Specified by:
finishedin interfaceorg.junit.runners.model.RunnerScheduler
-
wrapTask
-
newShutdownHandler
-