package com.pedjak.gradle.plugins.dockerizedtest; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.gradle.api.internal.tasks.testing.WorkerTestClassProcessorFactory; import org.gradle.api.internal.tasks.testing.worker.TestWorker; public class ForciblyStoppableTestWorker extends TestWorker { private static final int SHUTDOWN_TIMEOUT = 60; // secs public ForciblyStoppableTestWorker(WorkerTestClassProcessorFactory factory) { super(factory); } @Override public void stop() { new Timer(true).schedule(new TimerTask() { @Override public void run() { System.err.println("Worker process did not shutdown gracefully within "+SHUTDOWN_TIMEOUT+"s, forcing it now"); Runtime.getRuntime().halt(-100); } }, TimeUnit.SECONDS.toMillis(SHUTDOWN_TIMEOUT)); super.stop(); } }