diff --git a/docker-compose-junit-jupiter/src/main/java/com/palantir/docker/compose/DockerComposeExtension.java b/docker-compose-junit-jupiter/src/main/java/com/palantir/docker/compose/DockerComposeExtension.java index 01ebddcd7..2b8834a2c 100644 --- a/docker-compose-junit-jupiter/src/main/java/com/palantir/docker/compose/DockerComposeExtension.java +++ b/docker-compose-junit-jupiter/src/main/java/com/palantir/docker/compose/DockerComposeExtension.java @@ -30,24 +30,14 @@ public abstract class DockerComposeExtension extends DockerComposeManager implements BeforeAllCallback, AfterAllCallback { - private boolean hasCalledAfterMethod; - @Override public void beforeAll(ExtensionContext unused) throws IOException, InterruptedException { - try { - before(); - } catch (RuntimeException e) { - after(); - hasCalledAfterMethod = true; - throw e; - } + before(); } @Override public void afterAll(ExtensionContext unused) { - if (!hasCalledAfterMethod) { - after(); - } + after(); } public static Builder builder() { diff --git a/docker-compose-junit-jupiter/src/test/java/com/palantir/docker/compose/DockerComposeExtensionTest.java b/docker-compose-junit-jupiter/src/test/java/com/palantir/docker/compose/DockerComposeExtensionTest.java index d859df9cd..2e10486b7 100644 --- a/docker-compose-junit-jupiter/src/test/java/com/palantir/docker/compose/DockerComposeExtensionTest.java +++ b/docker-compose-junit-jupiter/src/test/java/com/palantir/docker/compose/DockerComposeExtensionTest.java @@ -22,7 +22,6 @@ import com.palantir.docker.compose.configuration.DockerComposeFiles; import com.palantir.docker.compose.connection.waiting.ClusterWait; import com.palantir.docker.compose.events.EventConsumer; -import java.io.IOException; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import org.junit.jupiter.api.Test; @@ -32,7 +31,7 @@ public class DockerComposeExtensionTest { @Test - public void calls_after_only_once() throws IOException, InterruptedException { + public void calls_after_only_once() { AtomicInteger count = new AtomicInteger(); DockerComposeExtension dockerComposeExtension = new DockerComposeExtension() { @Override diff --git a/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/DockerComposeManager.java b/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/DockerComposeManager.java index d6d746078..589d70f54 100644 --- a/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/DockerComposeManager.java +++ b/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/DockerComposeManager.java @@ -76,6 +76,7 @@ public abstract class DockerComposeManager { public static final int DEFAULT_RETRY_ATTEMPTS = 2; private final RunRecorder runRecorder = RunRecorder.defaults(); + private boolean hasCalledAfterMethod; public DockerPort hostNetworkedPort(int port) { return new DockerPort(machine().getIp(), port, port); @@ -177,13 +178,19 @@ protected void setDescription(TestDescription testDescription) { } public void before() throws IOException, InterruptedException { - log.debug("Starting docker-compose cluster"); + try { + log.debug("Starting docker-compose cluster"); - runRecorder.before(() -> dockerCompose().config()); + runRecorder.before(() -> dockerCompose().config()); - pullBuildAndUp(); + pullBuildAndUp(); - emitEventsFor().waitingForServices(this::waitForServices); + emitEventsFor().waitingForServices(this::waitForServices); + } catch (RuntimeException e) { + after(); + hasCalledAfterMethod = true; + throw e; + } } private void pullBuildAndUp() throws IOException, InterruptedException { @@ -254,6 +261,10 @@ private void waitForAllClusterWaits(List allClusterWai } public void after() { + if (hasCalledAfterMethod) { + return; + } + try { emitEventsFor().shutdownStop(() -> shutdownStrategy().stop(this.dockerCompose()));