package org.arquillian.cube.impl.client; import java.util.List; import org.arquillian.cube.spi.Cube; import org.arquillian.cube.spi.CubeRegistry; import org.jboss.arquillian.core.api.annotation.Observes; import org.jboss.arquillian.test.spi.event.suite.BeforeSuite; public class ForceStopDockerContainersShutdownHook { public void attachShutDownHookForceStopDcokerContainers(@Observes(precedence = 200) BeforeSuite event, final CubeRegistry cubeRegistry) { Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { final List<Cube<?>> cubes = cubeRegistry.getCubes(); for (Cube cube : cubes) { // If container is started, and we are exiting we need to stop it. // Notice that in case of STARTORCONNECT and STARTORCONNECTANDLEAVE the state is PRE_RUNNING // so they are not going to be stopped if (Cube.State.STARTED.equals(cube.state())) { cube.stop(); cube.destroy(); } } } }); } }