diff --git a/core/build.gradle b/core/build.gradle index b4eeae7b0c5..1768cb703ff 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -49,13 +49,33 @@ tasks.japicmp { classExcludes = [ "org.testcontainers.utility.RyukResourceReaper", + "org.testcontainers.containers.FailureDetectingExternalResource", + "org.testcontainers.containers.ComposeContainer", + "org.testcontainers.containers.DockerComposeContainer", + "org.testcontainers.containers.GenericContainer" ] methodExcludes = [ "org.testcontainers.containers.Container#getDockerClient()", "org.testcontainers.containers.ContainerState#getDockerClient()", "org.testcontainers.containers.ContainerState#execInContainer(org.testcontainers.containers.ExecConfig)", - "org.testcontainers.containers.ContainerState#execInContainer(java.nio.charset.Charset,org.testcontainers.containers.ExecConfig)" + "org.testcontainers.containers.ContainerState#execInContainer(java.nio.charset.Charset,org.testcontainers.containers.ExecConfig)", + "org.testcontainers.containers.ComposeContainer#apply(org.junit.runners.model.Statement, org.junit.runner.Description)", + "org.testcontainers.containers.ComposeContainer#failed(java.lang.Throwable, org.junit.runner.Description)", + "org.testcontainers.containers.ComposeContainer#finished(org.junit.runner.Description)", + "org.testcontainers.containers.ComposeContainer#starting(org.junit.runner.Description)", + "org.testcontainers.containers.ComposeContainer#succeeded(org.junit.runner.Description)", + "org.testcontainers.containers.DockerComposeContainer#apply(org.junit.runners.model.Statement, org.junit.runner.Description)", + "org.testcontainers.containers.DockerComposeContainer#failed(java.lang.Throwable, org.junit.runner.Description)", + "org.testcontainers.containers.DockerComposeContainer#finished(org.junit.runner.Description)", + "org.testcontainers.containers.DockerComposeContainer#starting(org.junit.runner.Description)", + "org.testcontainers.containers.DockerComposeContainer#succeeded(org.junit.runner.Description)", + "org.testcontainers.containers.GenericContainer#apply(org.junit.runners.model.Statement, org.junit.runner.Description)", + "org.testcontainers.containers.GenericContainer#failed(java.lang.Throwable, org.junit.runner.Description)", + "org.testcontainers.containers.GenericContainer#finished(org.junit.runner.Description)", + "org.testcontainers.containers.GenericContainer#starting(org.junit.runner.Description)", + "org.testcontainers.containers.GenericContainer#succeeded(org.junit.runner.Description)", + 'org.testcontainers.containers.Network$NetworkImpl#after()' ] fieldExcludes = [] @@ -69,7 +89,6 @@ configurations.all { } dependencies { - api 'junit:junit:4.13.2' api 'org.slf4j:slf4j-api:1.7.36' compileOnly 'org.jetbrains:annotations:26.0.2-1' testCompileOnly 'org.jetbrains:annotations:26.0.2-1' diff --git a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java index 79d706d3b6a..e8061363a18 100644 --- a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java @@ -5,8 +5,6 @@ import lombok.NonNull; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.SystemUtils; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; import org.testcontainers.containers.output.OutputFrame; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.containers.wait.strategy.WaitStrategy; @@ -31,7 +29,7 @@ * It uses either Compose V2 contained within the Docker binary, or a containerised version of Compose V2. */ @Slf4j -public class ComposeContainer extends FailureDetectingExternalResource implements Startable { +public class ComposeContainer implements Startable { private final Map scalingPreferences = new HashMap<>(); @@ -93,32 +91,6 @@ public ComposeContainer(String identifier, List composeFiles) { this.project = this.composeDelegate.getProject(); } - @Override - @Deprecated - public Statement apply(Statement base, Description description) { - return super.apply(base, description); - } - - @Override - @Deprecated - public void starting(Description description) { - start(); - } - - @Override - @Deprecated - protected void succeeded(Description description) {} - - @Override - @Deprecated - protected void failed(Throwable e, Description description) {} - - @Override - @Deprecated - public void finished(Description description) { - stop(); - } - @Override public void start() { synchronized (MUTEX) { diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index 92dc75b6cde..dd06b181b42 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -5,8 +5,6 @@ import lombok.NonNull; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.SystemUtils; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; import org.testcontainers.containers.output.OutputFrame; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.containers.wait.strategy.WaitStrategy; @@ -30,9 +28,7 @@ * Container which launches Docker Compose, for the purposes of launching a defined set of containers. */ @Slf4j -public class DockerComposeContainer> - extends FailureDetectingExternalResource - implements Startable { +public class DockerComposeContainer> implements Startable { private final Map scalingPreferences = new HashMap<>(); @@ -99,32 +95,6 @@ public DockerComposeContainer(String identifier, List composeFiles) { this.project = this.composeDelegate.getProject(); } - @Override - @Deprecated - public Statement apply(Statement base, Description description) { - return super.apply(base, description); - } - - @Override - @Deprecated - public void starting(Description description) { - start(); - } - - @Override - @Deprecated - protected void succeeded(Description description) {} - - @Override - @Deprecated - protected void failed(Throwable e, Description description) {} - - @Override - @Deprecated - public void finished(Description description) { - stop(); - } - @Override public void start() { synchronized (MUTEX) { diff --git a/core/src/main/java/org/testcontainers/containers/FailureDetectingExternalResource.java b/core/src/main/java/org/testcontainers/containers/FailureDetectingExternalResource.java deleted file mode 100644 index 71344267d32..00000000000 --- a/core/src/main/java/org/testcontainers/containers/FailureDetectingExternalResource.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.testcontainers.containers; - -import org.junit.rules.TestRule; -import org.junit.runner.Description; -import org.junit.runners.model.MultipleFailureException; -import org.junit.runners.model.Statement; - -import java.util.ArrayList; -import java.util.List; - -/** - * {@link TestRule} which is called before and after each test, and also is notified on success/failure. - * - * This mimics the behaviour of TestWatcher to some degree, but failures occurring in this rule do not - * contribute to the overall failure count (which can otherwise cause strange negative test success - * figures). - */ -public class FailureDetectingExternalResource implements TestRule { - - @Override - public Statement apply(Statement base, Description description) { - return new Statement() { - @Override - public void evaluate() throws Throwable { - List errors = new ArrayList(); - - try { - starting(description); - base.evaluate(); - succeeded(description); - } catch (Throwable e) { - errors.add(e); - failed(e, description); - } finally { - finished(description); - } - - MultipleFailureException.assertEmpty(errors); - } - }; - } - - protected void starting(Description description) {} - - protected void succeeded(Description description) {} - - protected void failed(Throwable e, Description description) {} - - protected void finished(Description description) {} -} diff --git a/core/src/main/java/org/testcontainers/containers/GenericContainer.java b/core/src/main/java/org/testcontainers/containers/GenericContainer.java index acd70f69cab..0fe944433ae 100644 --- a/core/src/main/java/org/testcontainers/containers/GenericContainer.java +++ b/core/src/main/java/org/testcontainers/containers/GenericContainer.java @@ -32,8 +32,6 @@ import org.apache.commons.lang3.SystemUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; import org.rnorth.ducttape.unreliables.Unreliables; import org.slf4j.Logger; import org.testcontainers.DockerClientFactory; @@ -52,8 +50,6 @@ import org.testcontainers.images.builder.Transferable; import org.testcontainers.lifecycle.Startable; import org.testcontainers.lifecycle.Startables; -import org.testcontainers.lifecycle.TestDescription; -import org.testcontainers.lifecycle.TestLifecycleAware; import org.testcontainers.utility.Base58; import org.testcontainers.utility.CommandLine; import org.testcontainers.utility.DockerImageName; @@ -106,7 +102,6 @@ */ @Data public class GenericContainer> - extends FailureDetectingExternalResource implements Container, AutoCloseable, WaitStrategyTarget, Startable { public static final int CONTAINER_RUNNING_TIMEOUT_SEC = 30; @@ -1053,57 +1048,6 @@ public void addExposedPorts(int... ports) { this.containerDef.addExposedTcpPorts(ports); } - private TestDescription toDescription(Description description) { - return new TestDescription() { - @Override - public String getTestId() { - return description.getDisplayName(); - } - - @Override - public String getFilesystemFriendlyName() { - return description.getClassName() + "-" + description.getMethodName(); - } - }; - } - - @Override - @Deprecated - public Statement apply(Statement base, Description description) { - return super.apply(base, description); - } - - @Override - @Deprecated - protected void starting(Description description) { - if (this instanceof TestLifecycleAware) { - ((TestLifecycleAware) this).beforeTest(toDescription(description)); - } - this.start(); - } - - @Override - @Deprecated - protected void succeeded(Description description) { - if (this instanceof TestLifecycleAware) { - ((TestLifecycleAware) this).afterTest(toDescription(description), Optional.empty()); - } - } - - @Override - @Deprecated - protected void failed(Throwable e, Description description) { - if (this instanceof TestLifecycleAware) { - ((TestLifecycleAware) this).afterTest(toDescription(description), Optional.of(e)); - } - } - - @Override - @Deprecated - protected void finished(Description description) { - this.stop(); - } - /** * {@inheritDoc} */ diff --git a/core/src/main/java/org/testcontainers/containers/Network.java b/core/src/main/java/org/testcontainers/containers/Network.java index 88ddd6dd906..27cab80c652 100644 --- a/core/src/main/java/org/testcontainers/containers/Network.java +++ b/core/src/main/java/org/testcontainers/containers/Network.java @@ -4,8 +4,6 @@ import lombok.Builder; import lombok.Getter; import lombok.Singular; -import org.junit.rules.ExternalResource; -import org.junit.rules.TestRule; import org.testcontainers.DockerClientFactory; import org.testcontainers.utility.ResourceReaper; @@ -17,7 +15,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; -public interface Network extends AutoCloseable, TestRule { +public interface Network extends AutoCloseable { Network SHARED = new NetworkImpl(false, null, Collections.emptySet(), null) { @Override public void close() { @@ -40,7 +38,7 @@ static NetworkImpl.NetworkImplBuilder builder() { @Builder @Getter - class NetworkImpl extends ExternalResource implements Network { + class NetworkImpl implements Network { private final String name = UUID.randomUUID().toString(); @@ -100,11 +98,6 @@ private String create() { return createNetworkCmd.exec().getId(); } - @Override - protected void after() { - close(); - } - @Override public synchronized void close() { if (initialized.getAndSet(false)) { diff --git a/core/src/test/java/org/testcontainers/containers/ExposedHostTest.java b/core/src/test/java/org/testcontainers/containers/ExposedHostTest.java index 39c986d1f8a..50bd17d0f0d 100644 --- a/core/src/test/java/org/testcontainers/containers/ExposedHostTest.java +++ b/core/src/test/java/org/testcontainers/containers/ExposedHostTest.java @@ -7,8 +7,6 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; import org.testcontainers.DockerClientFactory; import org.testcontainers.TestImages; import org.testcontainers.Testcontainers; @@ -189,11 +187,6 @@ public String getId() { @Override public void close() {} - - @Override - public Statement apply(Statement base, Description description) { - return null; - } }; List networks = DockerClientFactory diff --git a/core/src/test/java/org/testcontainers/containers/FailureDetectingExternalResourceTest.java b/core/src/test/java/org/testcontainers/containers/FailureDetectingExternalResourceTest.java deleted file mode 100644 index b2abf02bce5..00000000000 --- a/core/src/test/java/org/testcontainers/containers/FailureDetectingExternalResourceTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.testcontainers.containers; - -import org.junit.jupiter.api.Test; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; - -class FailureDetectingExternalResourceTest { - - @Test - void finishedIsCalledForCleanupIfStartingThrows() { - FailureDetectingExternalResource res = spy(FailureDetectingExternalResource.class); - Statement stmt = res.apply(mock(Statement.class), Description.EMPTY); - doThrow(new RuntimeException()).when(res).starting(any()); - try { - stmt.evaluate(); - } catch (Throwable t) { - // ignore - } - verify(res).starting(any()); - verify(res).finished(any()); - } -} diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeLogConsumerTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeLogConsumerTest.java index a712fb19664..7b9100d1e35 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeLogConsumerTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeLogConsumerTest.java @@ -1,7 +1,6 @@ package org.testcontainers.junit; import org.junit.jupiter.api.Test; -import org.junit.runner.Description; import org.testcontainers.containers.DockerComposeContainer; import org.testcontainers.containers.output.OutputFrame.OutputType; import org.testcontainers.containers.output.WaitingConsumer; @@ -22,7 +21,7 @@ void testLogConsumer() throws TimeoutException { .withLogConsumer("redis_1", logConsumer); try { - environment.starting(Description.EMPTY); + environment.start(); logConsumer.waitUntil( frame -> { return ( @@ -34,7 +33,7 @@ void testLogConsumer() throws TimeoutException { TimeUnit.SECONDS ); } finally { - environment.finished(Description.EMPTY); + environment.stop(); } } } diff --git a/modules/junit-jupiter/src/test/java/org/testcontainers/junit/jupiter/TestLifecycleAwareExceptionCapturingTest.java b/modules/junit-jupiter/src/test/java/org/testcontainers/junit/jupiter/TestLifecycleAwareExceptionCapturingTest.java index 0e7a750ce22..a6647aa3e52 100644 --- a/modules/junit-jupiter/src/test/java/org/testcontainers/junit/jupiter/TestLifecycleAwareExceptionCapturingTest.java +++ b/modules/junit-jupiter/src/test/java/org/testcontainers/junit/jupiter/TestLifecycleAwareExceptionCapturingTest.java @@ -1,10 +1,10 @@ package org.testcontainers.junit.jupiter; -import org.junit.AssumptionViolatedException; import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; +import org.opentest4j.TestAbortedException; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assumptions.assumeThat; @@ -31,7 +31,7 @@ void failing_test_should_pass_throwable_to_testContainer() { @Order(2) void should_have_captured_thrownException() { Throwable capturedThrowable = startedTestContainer.getCapturedThrowable(); - assertThat(capturedThrowable).isInstanceOf(AssumptionViolatedException.class); + assertThat(capturedThrowable).isInstanceOf(TestAbortedException.class); assertThat(capturedThrowable.getMessage()).contains("Expecting value to be true but was false"); } } diff --git a/settings.gradle b/settings.gradle index 0d13ebcc3fe..6784ae93160 100644 --- a/settings.gradle +++ b/settings.gradle @@ -27,8 +27,6 @@ file('modules').eachDir { dir -> project(":testcontainers-${dir.name}").projectDir = dir } -include ':docs:examples:junit4:generic' -include ':docs:examples:junit4:redis' include ':docs:examples:junit5:redis' include ':docs:examples:spock:redis'