diff --git a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java index e8061363a18..539ca957764 100644 --- a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java @@ -16,6 +16,7 @@ import java.time.Duration; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -59,7 +60,7 @@ public class ComposeContainer implements Startable { public static final String COMPOSE_EXECUTABLE = SystemUtils.IS_OS_WINDOWS ? "docker.exe" : "docker"; - private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("docker:24.0.2"); + private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("docker"); private final ComposeDelegate composeDelegate; @@ -67,28 +68,92 @@ public class ComposeContainer implements Startable { private List filesInDirectory = new ArrayList<>(); + /** + * Creates a new ComposeContainer using the specified Docker image and compose files. + * + * @param image The Docker image to use for the container + * @param composeFiles One or more Docker Compose configuration files + */ + public ComposeContainer(DockerImageName image, File... composeFiles) { + this(image, Arrays.asList(composeFiles)); + } + + /** + * Creates a new ComposeContainer using the specified Docker image and compose files. + * + * @param image The Docker image to use for the container + * @param composeFiles A list of Docker Compose configuration files + */ + public ComposeContainer(DockerImageName image, List composeFiles) { + this(image, Base58.randomString(6).toLowerCase(), composeFiles); + } + + /** + * Creates a new ComposeContainer with the specified Docker image, identifier, and compose files. + * + * @param image The Docker image to use for the container + * @param identifier A unique identifier for this compose environment + * @param composeFiles One or more Docker Compose configuration files + */ + public ComposeContainer(DockerImageName image, String identifier, File... composeFiles) { + this(image, identifier, Arrays.asList(composeFiles)); + } + + /** + * Creates a new ComposeContainer with the specified Docker image, identifier, and a single compose file. + * + * @param image The Docker image to use for the container + * @param identifier A unique identifier for this compose environment + * @param composeFile A Docker Compose configuration file + */ + public ComposeContainer(DockerImageName image, String identifier, File composeFile) { + this(image, identifier, Collections.singletonList(composeFile)); + } + + /** + * Creates a new ComposeContainer with the specified Docker image, identifier, and compose files. + * + * @param image The Docker image to use for the container + * @param identifier A unique identifier for this compose environment + * @param composeFiles A list of Docker Compose configuration files + */ + public ComposeContainer(DockerImageName image, String identifier, List composeFiles) { + image.assertCompatibleWith(DEFAULT_IMAGE_NAME); + this.composeDelegate = + new ComposeDelegate(ComposeDelegate.ComposeVersion.V2, composeFiles, identifier, COMPOSE_EXECUTABLE, image); + this.project = this.composeDelegate.getProject(); + } + + /** + * Use the new constructor {@link #ComposeContainer(DockerImageName image, File... composeFiles)} + */ public ComposeContainer(File... composeFiles) { - this(Arrays.asList(composeFiles)); + this(DEFAULT_IMAGE_NAME, Arrays.asList(composeFiles)); + this.localCompose = true; } + /** + * Use the new constructor {@link #ComposeContainer(DockerImageName image, List composeFiles)} + */ public ComposeContainer(List composeFiles) { - this(Base58.randomString(6).toLowerCase(), composeFiles); + this(DEFAULT_IMAGE_NAME, composeFiles); + this.localCompose = true; } + /** + * Use the new constructor {@link #ComposeContainer(DockerImageName image, String identifier, File... composeFile)} + */ public ComposeContainer(String identifier, File... composeFiles) { - this(identifier, Arrays.asList(composeFiles)); + this(DEFAULT_IMAGE_NAME, identifier, Arrays.asList(composeFiles)); + this.localCompose = true; } + /** + * Use the new constructor {@link #ComposeContainer(DockerImageName image, String identifier, List composeFiles)} + */ public ComposeContainer(String identifier, List composeFiles) { - this.composeDelegate = - new ComposeDelegate( - ComposeDelegate.ComposeVersion.V2, - composeFiles, - identifier, - COMPOSE_EXECUTABLE, - DEFAULT_IMAGE_NAME - ); - this.project = this.composeDelegate.getProject(); + this(DEFAULT_IMAGE_NAME, identifier, composeFiles); + this.localCompose = true; } @Override @@ -234,16 +299,6 @@ public ComposeContainer withEnv(Map env) { return this; } - /** - * Use a local Docker Compose binary instead of a container. - * - * @return this instance, for chaining - */ - public ComposeContainer withLocalCompose(boolean localCompose) { - this.localCompose = localCompose; - return this; - } - /** * Whether to pull images first. * diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index dd06b181b42..bfdaf169dd5 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -16,6 +16,7 @@ import java.time.Duration; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -58,31 +59,103 @@ public class DockerComposeContainer> i public static final String COMPOSE_EXECUTABLE = SystemUtils.IS_OS_WINDOWS ? "docker-compose.exe" : "docker-compose"; - private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("docker/compose:1.29.2"); - private final ComposeDelegate composeDelegate; private String project; private List filesInDirectory = new ArrayList<>(); - @Deprecated + /** + * Creates a new DockerComposeContainer using the specified Docker image and compose files. + * + * @param image The Docker image to use for the container + * @param composeFiles One or more Docker Compose configuration files + */ + public DockerComposeContainer(DockerImageName image, File... composeFiles) { + this(image, Arrays.asList(composeFiles)); + } + + /** + * Creates a new DockerComposeContainer using the specified Docker image and compose files. + * + * @param image The Docker image to use for the container + * @param composeFiles A list of Docker Compose configuration files + */ + public DockerComposeContainer(DockerImageName image, List composeFiles) { + this(image, Base58.randomString(6).toLowerCase(), composeFiles); + } + + /** + * Creates a new DockerComposeContainer with the specified Docker image, identifier, and compose files. + * + * @param image The Docker image to use for the container + * @param identifier A unique identifier for this compose environment + * @param composeFiles One or more Docker Compose configuration files + */ + public DockerComposeContainer(DockerImageName image, String identifier, File... composeFiles) { + this(image, identifier, Arrays.asList(composeFiles)); + } + + /** + * Creates a new DockerComposeContainer with the specified Docker image, identifier, and a single compose file. + * + * @param image The Docker image to use for the container + * @param identifier A unique identifier for this compose environment + * @param composeFile A Docker Compose configuration file + */ + public DockerComposeContainer(DockerImageName image, String identifier, File composeFile) { + this(image, identifier, Collections.singletonList(composeFile)); + } + + /** + * Creates a new DockerComposeContainer with the specified Docker image, identifier, and compose files. + * + * @param image The Docker image to use for the container + * @param identifier A unique identifier for this compose environment + * @param composeFiles A list of Docker Compose configuration files + */ + public DockerComposeContainer(DockerImageName image, String identifier, List composeFiles) { + this.composeDelegate = + new ComposeDelegate(ComposeDelegate.ComposeVersion.V1, composeFiles, identifier, COMPOSE_EXECUTABLE, image); + this.project = this.composeDelegate.getProject(); + } + + /** + * Use the new constructor {@link #DockerComposeContainer(DockerImageName image, String identifier, File composeFile)} + */ public DockerComposeContainer(File composeFile, String identifier) { this(identifier, composeFile); + this.localCompose = true; } + /** + * Use the new constructor {@link #DockerComposeContainer(DockerImageName image, List composeFiles)} + */ public DockerComposeContainer(File... composeFiles) { this(Arrays.asList(composeFiles)); + this.localCompose = true; } + /** + * Use the new constructor {@link #DockerComposeContainer(DockerImageName image, List composeFiles)} + */ + @Deprecated public DockerComposeContainer(List composeFiles) { this(Base58.randomString(6).toLowerCase(), composeFiles); + this.localCompose = true; } + /** + * Use the new constructor {@link #DockerComposeContainer(DockerImageName image, String identifier, File... composeFiles)} + */ public DockerComposeContainer(String identifier, File... composeFiles) { this(identifier, Arrays.asList(composeFiles)); + this.localCompose = true; } + /** + * Use the new constructor {@link #DockerComposeContainer(DockerImageName image, String identifier, List composeFiles)} + */ public DockerComposeContainer(String identifier, List composeFiles) { this.composeDelegate = new ComposeDelegate( @@ -90,9 +163,10 @@ public DockerComposeContainer(String identifier, List composeFiles) { composeFiles, identifier, COMPOSE_EXECUTABLE, - DEFAULT_IMAGE_NAME + DockerImageName.parse("docker/compose:1.29.2") ); this.project = this.composeDelegate.getProject(); + this.localCompose = true; } @Override @@ -234,16 +308,6 @@ public SELF withEnv(Map env) { return self(); } - /** - * Use a local Docker Compose binary instead of a container. - * - * @return this instance, for chaining - */ - public SELF withLocalCompose(boolean localCompose) { - this.localCompose = localCompose; - return self(); - } - /** * Whether to pull images first. * diff --git a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java new file mode 100644 index 00000000000..cee985d36df --- /dev/null +++ b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java @@ -0,0 +1,49 @@ +package org.testcontainers.containers; + +import org.junit.jupiter.api.Test; +import org.testcontainers.utility.DockerImageName; + +import java.io.File; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; + +class ComposeContainerTest { + + public static final String DOCKER_IMAGE = "docker:25.0.2"; + + private static final String COMPOSE_FILE_PATH = "src/test/resources/v2-compose-test.yml"; + + @Test + void testWithCustomDockerImage() { + ComposeContainer composeContainer = new ComposeContainer( + DockerImageName.parse(DOCKER_IMAGE), + new File(COMPOSE_FILE_PATH) + ); + composeContainer.start(); + verifyContainerCreation(composeContainer); + composeContainer.stop(); + } + + @Test + void testWithCustomDockerImageAndIdentifier() { + ComposeContainer composeContainer = new ComposeContainer( + DockerImageName.parse(DOCKER_IMAGE), + "myidentifier", + new File(COMPOSE_FILE_PATH) + ); + composeContainer.start(); + verifyContainerCreation(composeContainer); + composeContainer.stop(); + } + + private void verifyContainerCreation(ComposeContainer composeContainer) { + Optional redis = composeContainer.getContainerByServiceName("redis"); + assertThat(redis) + .hasValueSatisfying(container -> { + assertThat(container.isRunning()).isTrue(); + assertThat(container.getContainerInfo().getConfig().getLabels()) + .containsEntry("com.docker.compose.version", "2.24.5"); + }); + } +} diff --git a/core/src/test/java/org/testcontainers/containers/ComposeContainerWithServicesTest.java b/core/src/test/java/org/testcontainers/containers/ComposeContainerWithServicesTest.java index 6d141ac08f1..8b3b3fa8fa5 100644 --- a/core/src/test/java/org/testcontainers/containers/ComposeContainerWithServicesTest.java +++ b/core/src/test/java/org/testcontainers/containers/ComposeContainerWithServicesTest.java @@ -3,6 +3,7 @@ import org.junit.jupiter.api.Test; import org.rnorth.ducttape.TimeoutException; import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.utility.DockerImageName; import java.io.File; import java.time.Duration; @@ -29,7 +30,10 @@ class ComposeContainerWithServicesTest { @Test void testDesiredSubsetOfServicesAreStarted() { - try (ComposeContainer compose = new ComposeContainer(SIMPLE_COMPOSE_FILE).withServices("redis")) { + try ( + ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:24.0.2"), SIMPLE_COMPOSE_FILE) + .withServices("redis") + ) { compose.start(); verifyStartedContainers(compose, "redis-1"); @@ -38,7 +42,10 @@ void testDesiredSubsetOfServicesAreStarted() { @Test void testDesiredSubsetOfScaledServicesAreStarted() { - try (ComposeContainer compose = new ComposeContainer(SIMPLE_COMPOSE_FILE).withScaledService("redis", 2)) { + try ( + ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:24.0.2"), SIMPLE_COMPOSE_FILE) + .withScaledService("redis", 2) + ) { compose.start(); verifyStartedContainers(compose, "redis-1", "redis-2"); @@ -48,7 +55,7 @@ void testDesiredSubsetOfScaledServicesAreStarted() { @Test void testDesiredSubsetOfSpecifiedAndScaledServicesAreStarted() { try ( - ComposeContainer compose = new ComposeContainer(SIMPLE_COMPOSE_FILE) + ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:24.0.2"), SIMPLE_COMPOSE_FILE) .withServices("redis") .withScaledService("redis", 2) ) { @@ -61,7 +68,7 @@ void testDesiredSubsetOfSpecifiedAndScaledServicesAreStarted() { @Test void testDesiredSubsetOfSpecifiedOrScaledServicesAreStarted() { try ( - ComposeContainer compose = new ComposeContainer(SIMPLE_COMPOSE_FILE) + ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:24.0.2"), SIMPLE_COMPOSE_FILE) .withServices("other") .withScaledService("redis", 2) ) { @@ -73,7 +80,9 @@ void testDesiredSubsetOfSpecifiedOrScaledServicesAreStarted() { @Test void testAllServicesAreStartedIfNotSpecified() { - try (ComposeContainer compose = new ComposeContainer(SIMPLE_COMPOSE_FILE)) { + try ( + ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:24.0.2"), SIMPLE_COMPOSE_FILE) + ) { compose.start(); verifyStartedContainers(compose, "redis-1", "other-1"); @@ -82,7 +91,12 @@ void testAllServicesAreStartedIfNotSpecified() { @Test void testScaleInComposeFileIsRespected() { - try (ComposeContainer compose = new ComposeContainer(COMPOSE_FILE_WITH_INLINE_SCALE)) { + try ( + ComposeContainer compose = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), + COMPOSE_FILE_WITH_INLINE_SCALE + ) + ) { compose.start(); // the compose file includes `scale: 3` for the redis container @@ -95,7 +109,10 @@ void testStartupTimeoutSetsTheHighestTimeout() { assertThat( catchThrowable(() -> { try ( - ComposeContainer compose = new ComposeContainer(SIMPLE_COMPOSE_FILE) + ComposeContainer compose = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), + SIMPLE_COMPOSE_FILE + ) .withServices("redis") .withStartupTimeout(Duration.ofMillis(1)) .withExposedService( @@ -115,7 +132,10 @@ void testStartupTimeoutSetsTheHighestTimeout() { @Test void testWaitingForHealthcheck() { try ( - ComposeContainer compose = new ComposeContainer(COMPOSE_FILE_WITH_HEALTHCHECK) + ComposeContainer compose = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), + COMPOSE_FILE_WITH_HEALTHCHECK + ) .waitingFor("redis", Wait.forHealthcheck().withStartupTimeout(Duration.ofMinutes(2))) ) { compose.start(); @@ -127,7 +147,10 @@ void testWaitingForHealthcheck() { @Test void testWaitingForHealthcheckWithRestartDoesNotCrash() { try ( - ComposeContainer compose = new ComposeContainer(COMPOSE_FILE_WITH_HEALTHCHECK) + ComposeContainer compose = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), + COMPOSE_FILE_WITH_HEALTHCHECK + ) .waitingFor("redis", Wait.forHealthcheck().withStartupTimeout(Duration.ofMinutes(1))) ) { compose.start(); diff --git a/core/src/test/java/org/testcontainers/containers/ComposeOverridesTest.java b/core/src/test/java/org/testcontainers/containers/ComposeOverridesTest.java index 1ed03ae9315..ed948df5bd3 100644 --- a/core/src/test/java/org/testcontainers/containers/ComposeOverridesTest.java +++ b/core/src/test/java/org/testcontainers/containers/ComposeOverridesTest.java @@ -7,6 +7,7 @@ import org.junit.jupiter.params.provider.MethodSource; import org.rnorth.ducttape.unreliables.Unreliables; import org.testcontainers.utility.CommandLine; +import org.testcontainers.utility.DockerImageName; import java.io.BufferedReader; import java.io.File; @@ -47,47 +48,49 @@ public static Iterable data() { @ParameterizedTest(name = "{index}: local[{0}], composeFiles[{2}], expectedEnvVar[{1}]") @MethodSource("data") void test(boolean localMode, String expectedEnvVar, File... composeFiles) { + ComposeContainer compose; if (localMode) { Assumptions .assumeThat(CommandLine.executableExists(DOCKER_EXECUTABLE)) .as("docker executable exists") .isTrue(); + compose = new ComposeContainer(composeFiles).withExposedService(SERVICE_NAME, SERVICE_PORT); + } else { + compose = + new ComposeContainer(DockerImageName.parse("docker:25.0.2"), composeFiles) + .withExposedService(SERVICE_NAME, SERVICE_PORT); } - try ( - ComposeContainer compose = new ComposeContainer(composeFiles) - .withLocalCompose(localMode) - .withExposedService(SERVICE_NAME, SERVICE_PORT) - ) { - compose.start(); - - BufferedReader br = Unreliables.retryUntilSuccess( - 10, - TimeUnit.SECONDS, - () -> { - Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); - - Socket socket = new Socket( - compose.getServiceHost(SERVICE_NAME, SERVICE_PORT), - compose.getServicePort(SERVICE_NAME, SERVICE_PORT) - ); - return new BufferedReader(new InputStreamReader(socket.getInputStream())); - } - ); - - Unreliables.retryUntilTrue( - 10, - TimeUnit.SECONDS, - () -> { - while (br.ready()) { - String line = br.readLine(); - if (line.contains(expectedEnvVar)) { - return true; - } + + compose.start(); + + BufferedReader br = Unreliables.retryUntilSuccess( + 10, + TimeUnit.SECONDS, + () -> { + Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); + + Socket socket = new Socket( + compose.getServiceHost(SERVICE_NAME, SERVICE_PORT), + compose.getServicePort(SERVICE_NAME, SERVICE_PORT) + ); + return new BufferedReader(new InputStreamReader(socket.getInputStream())); + } + ); + + Unreliables.retryUntilTrue( + 10, + TimeUnit.SECONDS, + () -> { + while (br.ready()) { + String line = br.readLine(); + if (line.contains(expectedEnvVar)) { + return true; } - Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS); - return false; } - ); - } + Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS); + return false; + } + ); + compose.stop(); } } diff --git a/core/src/test/java/org/testcontainers/containers/ComposeProfilesOptionTest.java b/core/src/test/java/org/testcontainers/containers/ComposeProfilesOptionTest.java index 8a176fdcddb..3770d617ebb 100644 --- a/core/src/test/java/org/testcontainers/containers/ComposeProfilesOptionTest.java +++ b/core/src/test/java/org/testcontainers/containers/ComposeProfilesOptionTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.testcontainers.utility.CommandLine; +import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -20,21 +21,24 @@ public static Boolean[] local() { @ParameterizedTest @MethodSource("local") void testProfileOption(boolean localMode) { + ComposeContainer compose; if (localMode) { Assumptions .assumeThat(CommandLine.executableExists(ComposeContainer.COMPOSE_EXECUTABLE)) .as("docker executable exists") .isTrue(); - } - try ( // composeContainerWithLocalCompose { - ComposeContainer compose = new ComposeContainer(COMPOSE_FILE) - .withLocalCompose(true) - // } - .withOptions("--profile=cache") - ) { - compose.start(); - assertThat(compose.listChildContainers()).hasSize(1); + compose = + new ComposeContainer(COMPOSE_FILE) + // } + .withOptions("--profile=cache"); + } else { + compose = + new ComposeContainer(DockerImageName.parse("docker:25.0.2"), COMPOSE_FILE) + .withOptions("--profile=cache"); } + compose.start(); + assertThat(compose.listChildContainers()).hasSize(1); + compose.stop(); } } diff --git a/core/src/test/java/org/testcontainers/containers/DockerComposeContainerCustomImageTest.java b/core/src/test/java/org/testcontainers/containers/DockerComposeContainerCustomImageTest.java new file mode 100644 index 00000000000..46ee86a8c23 --- /dev/null +++ b/core/src/test/java/org/testcontainers/containers/DockerComposeContainerCustomImageTest.java @@ -0,0 +1,50 @@ +package org.testcontainers.containers; + +import org.junit.jupiter.api.Test; +import org.testcontainers.utility.DockerImageName; + +import java.io.File; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; + +class DockerComposeContainerCustomImageTest { + + public static final String DOCKER_IMAGE = "docker/compose:debian-1.29.2"; + + private static final String COMPOSE_FILE_PATH = "src/test/resources/scaled-compose-test.yml"; + + @Test + void testWithCustomDockerImage() { + DockerComposeContainer composeContainer = new DockerComposeContainer<>( + DockerImageName.parse(DOCKER_IMAGE), + "testing", + new File(COMPOSE_FILE_PATH) + ); + composeContainer.start(); + verifyContainerCreation(composeContainer); + composeContainer.stop(); + } + + @Test + void testWithCustomDockerImageAndIdentifier() { + DockerComposeContainer composeContainer = new DockerComposeContainer( + DockerImageName.parse(DOCKER_IMAGE), + "myidentifier", + new File(COMPOSE_FILE_PATH) + ); + composeContainer.start(); + verifyContainerCreation(composeContainer); + composeContainer.stop(); + } + + private void verifyContainerCreation(DockerComposeContainer composeContainer) { + Optional redis = composeContainer.getContainerByServiceName("redis"); + assertThat(redis) + .hasValueSatisfying(container -> { + assertThat(container.isRunning()).isTrue(); + assertThat(container.getContainerInfo().getConfig().getLabels()) + .containsEntry("com.docker.compose.version", "1.29.2"); + }); + } +} diff --git a/core/src/test/java/org/testcontainers/containers/DockerComposeContainerWithServicesTest.java b/core/src/test/java/org/testcontainers/containers/DockerComposeContainerWithServicesTest.java index cc6c124fde0..52d8d003003 100644 --- a/core/src/test/java/org/testcontainers/containers/DockerComposeContainerWithServicesTest.java +++ b/core/src/test/java/org/testcontainers/containers/DockerComposeContainerWithServicesTest.java @@ -3,6 +3,7 @@ import org.junit.jupiter.api.Test; import org.rnorth.ducttape.TimeoutException; import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.utility.DockerImageName; import java.io.File; import java.time.Duration; @@ -30,7 +31,11 @@ class DockerComposeContainerWithServicesTest { @Test void testDesiredSubsetOfServicesAreStarted() { try ( - DockerComposeContainer compose = new DockerComposeContainer<>(SIMPLE_COMPOSE_FILE).withServices("redis") + DockerComposeContainer compose = new DockerComposeContainer<>( + DockerImageName.parse("docker/compose:debian-1.29.2"), + SIMPLE_COMPOSE_FILE + ) + .withServices("redis") ) { compose.start(); @@ -41,7 +46,10 @@ void testDesiredSubsetOfServicesAreStarted() { @Test void testDesiredSubsetOfScaledServicesAreStarted() { try ( - DockerComposeContainer compose = new DockerComposeContainer<>(SIMPLE_COMPOSE_FILE) + DockerComposeContainer compose = new DockerComposeContainer<>( + DockerImageName.parse("docker/compose:debian-1.29.2"), + SIMPLE_COMPOSE_FILE + ) .withScaledService("redis", 2) ) { compose.start(); @@ -53,7 +61,10 @@ void testDesiredSubsetOfScaledServicesAreStarted() { @Test void testDesiredSubsetOfSpecifiedAndScaledServicesAreStarted() { try ( - DockerComposeContainer compose = new DockerComposeContainer<>(SIMPLE_COMPOSE_FILE) + DockerComposeContainer compose = new DockerComposeContainer<>( + DockerImageName.parse("docker/compose:debian-1.29.2"), + SIMPLE_COMPOSE_FILE + ) .withServices("redis") .withScaledService("redis", 2) ) { @@ -66,7 +77,10 @@ void testDesiredSubsetOfSpecifiedAndScaledServicesAreStarted() { @Test void testDesiredSubsetOfSpecifiedOrScaledServicesAreStarted() { try ( - DockerComposeContainer compose = new DockerComposeContainer<>(SIMPLE_COMPOSE_FILE) + DockerComposeContainer compose = new DockerComposeContainer<>( + DockerImageName.parse("docker/compose:debian-1.29.2"), + SIMPLE_COMPOSE_FILE + ) .withServices("other") .withScaledService("redis", 2) ) { @@ -78,7 +92,12 @@ void testDesiredSubsetOfSpecifiedOrScaledServicesAreStarted() { @Test void testAllServicesAreStartedIfNotSpecified() { - try (DockerComposeContainer compose = new DockerComposeContainer<>(SIMPLE_COMPOSE_FILE)) { + try ( + DockerComposeContainer compose = new DockerComposeContainer<>( + DockerImageName.parse("docker/compose:debian-1.29.2"), + SIMPLE_COMPOSE_FILE + ) + ) { compose.start(); verifyStartedContainers(compose, "redis_1", "other_1"); @@ -87,7 +106,12 @@ void testAllServicesAreStartedIfNotSpecified() { @Test void testScaleInComposeFileIsRespected() { - try (DockerComposeContainer compose = new DockerComposeContainer<>(COMPOSE_FILE_WITH_INLINE_SCALE)) { + try ( + DockerComposeContainer compose = new DockerComposeContainer<>( + DockerImageName.parse("docker/compose:debian-1.29.2"), + COMPOSE_FILE_WITH_INLINE_SCALE + ) + ) { compose.start(); // the compose file includes `scale: 3` for the redis container @@ -100,7 +124,10 @@ void testStartupTimeoutSetsTheHighestTimeout() { assertThat( catchThrowable(() -> { try ( - DockerComposeContainer compose = new DockerComposeContainer<>(SIMPLE_COMPOSE_FILE) + DockerComposeContainer compose = new DockerComposeContainer<>( + DockerImageName.parse("docker/compose:debian-1.29.2"), + SIMPLE_COMPOSE_FILE + ) .withServices("redis") .withStartupTimeout(Duration.ofMillis(1)) .withExposedService( @@ -120,7 +147,10 @@ void testStartupTimeoutSetsTheHighestTimeout() { @Test void testWaitingForHealthcheck() { try ( - DockerComposeContainer compose = new DockerComposeContainer<>(COMPOSE_FILE_WITH_HEALTHCHECK) + DockerComposeContainer compose = new DockerComposeContainer<>( + DockerImageName.parse("docker/compose:debian-1.29.2"), + COMPOSE_FILE_WITH_HEALTHCHECK + ) .waitingFor("redis", Wait.forHealthcheck().withStartupTimeout(Duration.ofMinutes(2))) ) { compose.start(); @@ -132,7 +162,10 @@ void testWaitingForHealthcheck() { @Test void testWaitingForHealthcheckWithRestartDoesNotCrash() { try ( - DockerComposeContainer compose = new DockerComposeContainer<>(COMPOSE_FILE_WITH_HEALTHCHECK) + DockerComposeContainer compose = new DockerComposeContainer<>( + DockerImageName.parse("docker/compose:debian-1.29.2"), + COMPOSE_FILE_WITH_HEALTHCHECK + ) .waitingFor("redis", Wait.forHealthcheck().withStartupTimeout(Duration.ofMinutes(1))) ) { compose.start(); diff --git a/core/src/test/java/org/testcontainers/containers/DockerComposeOverridesTest.java b/core/src/test/java/org/testcontainers/containers/DockerComposeOverridesTest.java index eb66fbabc38..e3bd499cc45 100644 --- a/core/src/test/java/org/testcontainers/containers/DockerComposeOverridesTest.java +++ b/core/src/test/java/org/testcontainers/containers/DockerComposeOverridesTest.java @@ -6,6 +6,7 @@ import org.junit.jupiter.params.provider.MethodSource; import org.rnorth.ducttape.unreliables.Unreliables; import org.testcontainers.utility.CommandLine; +import org.testcontainers.utility.DockerImageName; import java.io.BufferedReader; import java.io.File; @@ -44,6 +45,7 @@ public static Iterable data() { @ParameterizedTest(name = "{index}: local[{0}], composeFiles[{2}], expectedEnvVar[{1}]") @MethodSource("data") void test(boolean localMode, String expectedEnvVar, File... composeFiles) { + DockerComposeContainer compose; if (localMode) { Assumptions .assumeThat(CommandLine.executableExists(DockerComposeContainer.COMPOSE_EXECUTABLE)) @@ -52,42 +54,44 @@ void test(boolean localMode, String expectedEnvVar, File... composeFiles) { Assumptions .assumeThat(CommandLine.runShellCommand("docker-compose", "--version")) .doesNotStartWith("Docker Compose version v2"); + + compose = new DockerComposeContainer(composeFiles).withExposedService(SERVICE_NAME, SERVICE_PORT); + } else { + compose = + new DockerComposeContainer(DockerImageName.parse("docker/compose:debian-1.29.2"), composeFiles) + .withExposedService(SERVICE_NAME, SERVICE_PORT); } - try ( - DockerComposeContainer compose = new DockerComposeContainer(composeFiles) - .withLocalCompose(localMode) - .withExposedService(SERVICE_NAME, SERVICE_PORT) - ) { - compose.start(); - - BufferedReader br = Unreliables.retryUntilSuccess( - 10, - TimeUnit.SECONDS, - () -> { - Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); - - Socket socket = new Socket( - compose.getServiceHost(SERVICE_NAME, SERVICE_PORT), - compose.getServicePort(SERVICE_NAME, SERVICE_PORT) - ); - return new BufferedReader(new InputStreamReader(socket.getInputStream())); - } - ); - - Unreliables.retryUntilTrue( - 10, - TimeUnit.SECONDS, - () -> { - while (br.ready()) { - String line = br.readLine(); - if (line.contains(expectedEnvVar)) { - return true; - } + + compose.start(); + + BufferedReader br = Unreliables.retryUntilSuccess( + 10, + TimeUnit.SECONDS, + () -> { + Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); + + Socket socket = new Socket( + compose.getServiceHost(SERVICE_NAME, SERVICE_PORT), + compose.getServicePort(SERVICE_NAME, SERVICE_PORT) + ); + return new BufferedReader(new InputStreamReader(socket.getInputStream())); + } + ); + + Unreliables.retryUntilTrue( + 10, + TimeUnit.SECONDS, + () -> { + while (br.ready()) { + String line = br.readLine(); + if (line.contains(expectedEnvVar)) { + return true; } - Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS); - return false; } - ); - } + Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS); + return false; + } + ); + compose.stop(); } } diff --git a/core/src/test/java/org/testcontainers/containers/DockerComposeProfilesOptionTest.java b/core/src/test/java/org/testcontainers/containers/DockerComposeProfilesOptionTest.java index 20a52566201..46f29b0a281 100644 --- a/core/src/test/java/org/testcontainers/containers/DockerComposeProfilesOptionTest.java +++ b/core/src/test/java/org/testcontainers/containers/DockerComposeProfilesOptionTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.testcontainers.utility.CommandLine; +import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -15,14 +16,13 @@ public static Boolean[] local() { return new Boolean[] { Boolean.TRUE, Boolean.FALSE }; } - public boolean localMode; - public static final File COMPOSE_FILE = new File("src/test/resources/compose-profile-option/compose-test.yml"); @ParameterizedTest(name = "{0}") @MethodSource("local") - void testProfileOption() { - if (this.localMode) { + void testProfileOption(boolean localMode) { + DockerComposeContainer compose; + if (localMode) { Assumptions .assumeThat(CommandLine.executableExists(DockerComposeContainer.COMPOSE_EXECUTABLE)) .as("docker-compose executable exists") @@ -30,14 +30,16 @@ void testProfileOption() { Assumptions .assumeThat(CommandLine.runShellCommand("docker-compose", "--version")) .doesNotStartWith("Docker Compose version v2"); + + compose = new DockerComposeContainer<>(COMPOSE_FILE).withOptions("--profile=cache"); + } else { + compose = + new DockerComposeContainer<>(DockerImageName.parse("docker/compose:debian-1.29.2"), COMPOSE_FILE) + .withOptions("--profile=cache"); } - try ( - DockerComposeContainer compose = new DockerComposeContainer<>(COMPOSE_FILE) - .withOptions("--profile=cache") - .withLocalCompose(this.localMode) - ) { - compose.start(); - assertThat(compose.listChildContainers()).hasSize(1); - } + + compose.start(); + assertThat(compose.listChildContainers()).hasSize(1); + compose.stop(); } } diff --git a/core/src/test/java/org/testcontainers/junit/BaseComposeTest.java b/core/src/test/java/org/testcontainers/junit/BaseComposeTest.java index fc28f771749..334b69740b7 100644 --- a/core/src/test/java/org/testcontainers/junit/BaseComposeTest.java +++ b/core/src/test/java/org/testcontainers/junit/BaseComposeTest.java @@ -58,7 +58,7 @@ void secondTest() { assertThat(jedis.get("test")).as("Tests use fresh container instances").isEqualTo("3"); // if these end up using the same container one of the test methods will fail. - // However, @Rule creates a separate DockerComposeContainer instance per test, so this just shouldn't happen + // However, @Rule creates a separate ComposeContainer instance per test, so this just shouldn't happen } @BeforeEach diff --git a/core/src/test/java/org/testcontainers/junit/BaseDockerComposeTest.java b/core/src/test/java/org/testcontainers/junit/BaseDockerComposeTest.java index 926fa301836..58459c2d807 100644 --- a/core/src/test/java/org/testcontainers/junit/BaseDockerComposeTest.java +++ b/core/src/test/java/org/testcontainers/junit/BaseDockerComposeTest.java @@ -2,7 +2,6 @@ import com.github.dockerjava.api.model.Network; import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -16,6 +15,7 @@ import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assumptions.assumeThat; /** * Created by rnorth on 21/05/2016. @@ -30,7 +30,7 @@ public abstract class BaseDockerComposeTest { @BeforeAll public static void checkVersion() { - Assumptions.assumeTrue(TestEnvironment.dockerApiAtLeast("1.22")); + assumeThat(TestEnvironment.dockerApiAtLeast("1.22")).isTrue(); } @Test diff --git a/core/src/test/java/org/testcontainers/junit/ComposeContainerOverrideTest.java b/core/src/test/java/org/testcontainers/junit/ComposeContainerOverrideTest.java index 8e5651903f6..028d883b320 100644 --- a/core/src/test/java/org/testcontainers/junit/ComposeContainerOverrideTest.java +++ b/core/src/test/java/org/testcontainers/junit/ComposeContainerOverrideTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import org.testcontainers.containers.ComposeContainer; import org.testcontainers.containers.ContainerState; +import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -17,7 +18,10 @@ class ComposeContainerOverrideTest { @Test void readEnvironment() { - try (ComposeContainer compose = new ComposeContainer(BASE).withExposedService("redis", 6379)) { + try ( + ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:24.0.2"), BASE) + .withExposedService("redis", 6379) + ) { compose.start(); InspectContainerResponse container = compose .getContainerByServiceName("redis-1") @@ -29,7 +33,10 @@ void readEnvironment() { @Test void resetEnvironment() { - try (ComposeContainer compose = new ComposeContainer(BASE, OVERRIDE).withExposedService("redis", 6379)) { + try ( + ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:24.0.2"), BASE, OVERRIDE) + .withExposedService("redis", 6379) + ) { compose.start(); InspectContainerResponse container = compose .getContainerByServiceName("redis-1") diff --git a/core/src/test/java/org/testcontainers/junit/ComposeContainerPortViaEnvTest.java b/core/src/test/java/org/testcontainers/junit/ComposeContainerPortViaEnvTest.java index dfe51acbebb..b45db1a4f8a 100644 --- a/core/src/test/java/org/testcontainers/junit/ComposeContainerPortViaEnvTest.java +++ b/core/src/test/java/org/testcontainers/junit/ComposeContainerPortViaEnvTest.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.AutoClose; import org.testcontainers.containers.ComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -9,6 +10,7 @@ class ComposeContainerPortViaEnvTest extends BaseComposeTest { @AutoClose public ComposeContainer environment = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), new File("src/test/resources/v2-compose-test-port-via-env.yml") ) .withExposedService("redis-1", REDIS_PORT) diff --git a/core/src/test/java/org/testcontainers/junit/ComposeContainerScalingTest.java b/core/src/test/java/org/testcontainers/junit/ComposeContainerScalingTest.java index 7614b49e303..50c6ef062ef 100644 --- a/core/src/test/java/org/testcontainers/junit/ComposeContainerScalingTest.java +++ b/core/src/test/java/org/testcontainers/junit/ComposeContainerScalingTest.java @@ -6,6 +6,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.testcontainers.containers.ComposeContainer; +import org.testcontainers.utility.DockerImageName; import org.testcontainers.utility.TestEnvironment; import redis.clients.jedis.Jedis; @@ -26,6 +27,7 @@ public static void checkVersion() { @AutoClose public ComposeContainer environment = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), new File("src/test/resources/composev2/scaled-compose-test.yml") ) .withScaledService("redis", 3) diff --git a/core/src/test/java/org/testcontainers/junit/ComposeContainerTest.java b/core/src/test/java/org/testcontainers/junit/ComposeContainerTest.java index 2d87cd3aa49..9e68c7513df 100644 --- a/core/src/test/java/org/testcontainers/junit/ComposeContainerTest.java +++ b/core/src/test/java/org/testcontainers/junit/ComposeContainerTest.java @@ -3,7 +3,7 @@ import org.junit.jupiter.api.Test; import org.testcontainers.containers.ComposeContainer; import org.testcontainers.containers.ContainerState; -import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; import java.io.IOException; @@ -18,6 +18,7 @@ class ComposeContainerTest extends BaseComposeTest { // composeContainerConstructor { public ComposeContainer environment = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), new File("src/test/resources/composev2/compose-test.yml") ) .withExposedService("redis-1", REDIS_PORT) @@ -86,7 +87,8 @@ void shouldCreateContainerWhenFileNotPrefixedWithPath() throws IOException { filePathNotStartWithDotSlash.deleteOnExit(); Files.write(filePathNotStartWithDotSlash.toPath(), validYaml.getBytes(StandardCharsets.UTF_8)); - final DockerComposeContainer dockerComposeContainer = new DockerComposeContainer<>( + final ComposeContainer dockerComposeContainer = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), filePathNotStartWithDotSlash ); assertThat(dockerComposeContainer).as("Container created using docker compose file").isNotNull(); diff --git a/core/src/test/java/org/testcontainers/junit/ComposeContainerVolumeRemovalTest.java b/core/src/test/java/org/testcontainers/junit/ComposeContainerVolumeRemovalTest.java index 1898f5d580b..cebfc2a9706 100644 --- a/core/src/test/java/org/testcontainers/junit/ComposeContainerVolumeRemovalTest.java +++ b/core/src/test/java/org/testcontainers/junit/ComposeContainerVolumeRemovalTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.params.provider.MethodSource; import org.testcontainers.DockerClientFactory; import org.testcontainers.containers.ComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; import java.util.LinkedHashSet; @@ -28,7 +29,7 @@ void performTest(boolean removeVolumes, boolean shouldVolumesBePresentAfterRunni final AtomicReference volumeName = new AtomicReference<>(""); try ( - ComposeContainer environment = new ComposeContainer(composeFile) + ComposeContainer environment = new ComposeContainer(DockerImageName.parse("docker:24.0.2"), composeFile) .withExposedService("redis", 6379) .withRemoveVolumes(removeVolumes) .withRemoveImages(ComposeContainer.RemoveImages.ALL) diff --git a/core/src/test/java/org/testcontainers/junit/ComposeContainerWithBuildTest.java b/core/src/test/java/org/testcontainers/junit/ComposeContainerWithBuildTest.java index 589766f9184..03ced374f70 100644 --- a/core/src/test/java/org/testcontainers/junit/ComposeContainerWithBuildTest.java +++ b/core/src/test/java/org/testcontainers/junit/ComposeContainerWithBuildTest.java @@ -7,6 +7,7 @@ import org.rnorth.ducttape.unreliables.Unreliables; import org.testcontainers.DockerClientFactory; import org.testcontainers.containers.ComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; import java.util.concurrent.TimeUnit; @@ -37,7 +38,7 @@ void performTest( final AtomicReference builtImageName = new AtomicReference<>(""); final AtomicReference pulledImageName = new AtomicReference<>(""); try ( - ComposeContainer environment = new ComposeContainer(composeFile) + ComposeContainer environment = new ComposeContainer(DockerImageName.parse("docker:24.0.2"), composeFile) .withExposedService("customredis", 6379) .withBuild(true) .withRemoveImages(removeMode) diff --git a/core/src/test/java/org/testcontainers/junit/ComposeContainerWithCopyFilesTest.java b/core/src/test/java/org/testcontainers/junit/ComposeContainerWithCopyFilesTest.java index 33dc092cc51..cc9c2dad594 100644 --- a/core/src/test/java/org/testcontainers/junit/ComposeContainerWithCopyFilesTest.java +++ b/core/src/test/java/org/testcontainers/junit/ComposeContainerWithCopyFilesTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import org.testcontainers.containers.ComposeContainer; import org.testcontainers.containers.ContainerLaunchException; +import org.testcontainers.utility.DockerImageName; import java.io.File; import java.io.IOException; @@ -17,6 +18,7 @@ class ComposeContainerWithCopyFilesTest { void testShouldCopyAllFilesByDefault() throws IOException { try ( ComposeContainer environment = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), new File("src/test/resources/compose-file-copy-inclusions/compose.yml") ) .withExposedService("app", 8080) @@ -32,6 +34,7 @@ void testShouldCopyAllFilesByDefault() throws IOException { void testWithFileCopyInclusionUsingFilePath() throws IOException { try ( ComposeContainer environment = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), new File("src/test/resources/compose-file-copy-inclusions/compose-root-only.yml") ) .withExposedService("app", 8080) @@ -51,6 +54,7 @@ void testWithFileCopyInclusionUsingDirectoryPath() throws IOException { try ( // composeContainerWithCopyFiles { ComposeContainer environment = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), new File("src/test/resources/compose-file-copy-inclusions/compose-test-only.yml") ) .withExposedService("app", 8080) @@ -69,6 +73,7 @@ void testWithFileCopyInclusionUsingDirectoryPath() throws IOException { void testShouldNotBeAbleToStartIfNeededEnvFileIsNotCopied() { try ( ComposeContainer environment = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), new File("src/test/resources/compose-file-copy-inclusions/compose-test-only.yml") ) .withExposedService("app", 8080) diff --git a/core/src/test/java/org/testcontainers/junit/ComposeContainerWithOptionsTest.java b/core/src/test/java/org/testcontainers/junit/ComposeContainerWithOptionsTest.java index e8bca173a54..800da177137 100644 --- a/core/src/test/java/org/testcontainers/junit/ComposeContainerWithOptionsTest.java +++ b/core/src/test/java/org/testcontainers/junit/ComposeContainerWithOptionsTest.java @@ -7,6 +7,7 @@ import org.junit.jupiter.params.provider.MethodSource; import org.testcontainers.containers.ComposeContainer; import org.testcontainers.utility.CommandLine; +import org.testcontainers.utility.DockerImageName; import java.io.File; import java.util.Set; @@ -21,7 +22,7 @@ class ComposeContainerWithOptionsTest { public static Stream params() { return Stream.of( - // Test the happy day case. THe compatibility option should be accepted by docker-compose. + // Test the happy day case. The compatibility option should be accepted by docker-compose. Arguments.of( new File("src/test/resources/compose-options-test/with-deploy-block.yml"), false, @@ -55,19 +56,23 @@ public static Stream params() { @ParameterizedTest(name = "docker-compose test [compose file: {0}, local: {1}, options: {2}, expected result: {3}]") @MethodSource("params") void performTest(File composeFile, boolean localMode, Set options, boolean expectError) { + ComposeContainer environment; if (localMode) { Assumptions .assumeThat(CommandLine.executableExists(ComposeContainer.COMPOSE_EXECUTABLE)) .as("docker executable exists") .isTrue(); + environment = new ComposeContainer(composeFile).withOptions(options.stream().toArray(String[]::new)); + } else { + environment = + new ComposeContainer(DockerImageName.parse("docker:25.0.2"), composeFile) + .withOptions(options.stream().toArray(String[]::new)); } - try ( - ComposeContainer environment = new ComposeContainer(composeFile) - .withOptions(options.stream().toArray(String[]::new)) - .withLocalCompose(localMode) - ) { + + try { environment.start(); assertThat(expectError).isFalse(); + environment.stop(); } catch (Exception e) { assertThat(expectError).isTrue(); } diff --git a/core/src/test/java/org/testcontainers/junit/ComposeContainerWithWaitStrategies.java b/core/src/test/java/org/testcontainers/junit/ComposeContainerWithWaitStrategies.java index 82a1a5e57ad..07ce8e41ef1 100644 --- a/core/src/test/java/org/testcontainers/junit/ComposeContainerWithWaitStrategies.java +++ b/core/src/test/java/org/testcontainers/junit/ComposeContainerWithWaitStrategies.java @@ -3,6 +3,7 @@ import org.junit.jupiter.api.Test; import org.testcontainers.containers.ComposeContainer; import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.utility.DockerImageName; import java.io.File; import java.time.Duration; @@ -17,7 +18,10 @@ class ComposeContainerWithWaitStrategies { void testComposeContainerConstructor() { try ( // composeContainerWithCombinedWaitStrategies { - ComposeContainer compose = new ComposeContainer(new File("src/test/resources/composev2/compose-test.yml")) + ComposeContainer compose = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), + new File("src/test/resources/composev2/compose-test.yml") + ) .withExposedService("redis-1", REDIS_PORT, Wait.forSuccessfulCommand("redis-cli ping")) .withExposedService("db-1", 3306, Wait.forLogMessage(".*ready for connections.*\\n", 1)) // } @@ -31,7 +35,10 @@ void testComposeContainerConstructor() { void testComposeContainerWaitForPortWithTimeout() { try ( // composeContainerWaitForPortWithTimeout { - ComposeContainer compose = new ComposeContainer(new File("src/test/resources/composev2/compose-test.yml")) + ComposeContainer compose = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), + new File("src/test/resources/composev2/compose-test.yml") + ) .withExposedService( "redis-1", REDIS_PORT, diff --git a/core/src/test/java/org/testcontainers/junit/ComposeErrorHandlingTest.java b/core/src/test/java/org/testcontainers/junit/ComposeErrorHandlingTest.java index a5e8e77c12f..acabcaf9e87 100644 --- a/core/src/test/java/org/testcontainers/junit/ComposeErrorHandlingTest.java +++ b/core/src/test/java/org/testcontainers/junit/ComposeErrorHandlingTest.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.Test; import org.testcontainers.containers.ComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -14,7 +15,10 @@ class ComposeErrorHandlingTest { void simpleTest() { assertThat( catchThrowable(() -> { - ComposeContainer environment = new ComposeContainer(new File("src/test/resources/invalid-compose.yml")) + ComposeContainer environment = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), + new File("src/test/resources/invalid-compose.yml") + ) .withExposedService("something", 123); }) ) diff --git a/core/src/test/java/org/testcontainers/junit/ComposePassthroughTest.java b/core/src/test/java/org/testcontainers/junit/ComposePassthroughTest.java index 97ea43d38c9..7bc47d79c9d 100644 --- a/core/src/test/java/org/testcontainers/junit/ComposePassthroughTest.java +++ b/core/src/test/java/org/testcontainers/junit/ComposePassthroughTest.java @@ -7,6 +7,7 @@ import org.testcontainers.containers.ComposeContainer; import org.testcontainers.containers.ContainerState; import org.testcontainers.containers.wait.strategy.HostPortWaitStrategy; +import org.testcontainers.utility.DockerImageName; import org.testcontainers.utility.TestEnvironment; import java.io.File; @@ -26,6 +27,7 @@ public static void checkVersion() { @AutoClose public ComposeContainer compose = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), new File("src/test/resources/v2-compose-test-passthrough.yml") ) .withEnv("foo", "bar") diff --git a/core/src/test/java/org/testcontainers/junit/ComposeWaitStrategyTest.java b/core/src/test/java/org/testcontainers/junit/ComposeWaitStrategyTest.java index 73553f70fdf..2bec1aec819 100644 --- a/core/src/test/java/org/testcontainers/junit/ComposeWaitStrategyTest.java +++ b/core/src/test/java/org/testcontainers/junit/ComposeWaitStrategyTest.java @@ -7,6 +7,7 @@ import org.testcontainers.containers.ComposeContainer; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.containers.wait.strategy.WaitStrategy; +import org.testcontainers.utility.DockerImageName; import java.io.File; import java.time.Duration; @@ -23,7 +24,11 @@ class ComposeWaitStrategyTest { @BeforeEach public final void setUp() { - environment = new ComposeContainer(new File("src/test/resources/composev2/compose-test.yml")); + environment = + new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), + new File("src/test/resources/composev2/compose-test.yml") + ); } @AfterEach diff --git a/core/src/test/java/org/testcontainers/junit/ComposeWithIdentifierTest.java b/core/src/test/java/org/testcontainers/junit/ComposeWithIdentifierTest.java index 71d80918d7c..c02b9874126 100644 --- a/core/src/test/java/org/testcontainers/junit/ComposeWithIdentifierTest.java +++ b/core/src/test/java/org/testcontainers/junit/ComposeWithIdentifierTest.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.AutoClose; import org.testcontainers.containers.ComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -9,6 +10,7 @@ class ComposeWithIdentifierTest extends BaseComposeTest { @AutoClose public ComposeContainer environment = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), "TEST", new File("src/test/resources/v2-compose-test.yml") ) diff --git a/core/src/test/java/org/testcontainers/junit/ComposeWithNetworkTest.java b/core/src/test/java/org/testcontainers/junit/ComposeWithNetworkTest.java index cfda1971600..1003c3d5404 100644 --- a/core/src/test/java/org/testcontainers/junit/ComposeWithNetworkTest.java +++ b/core/src/test/java/org/testcontainers/junit/ComposeWithNetworkTest.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.AutoClose; import org.testcontainers.containers.ComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -9,6 +10,7 @@ class ComposeWithNetworkTest extends BaseComposeTest { @AutoClose public ComposeContainer environment = new ComposeContainer( + DockerImageName.parse("docker:24.0.2"), new File("src/test/resources/v2-compose-test-with-network.yml") ) .withExposedService("redis-1", REDIS_PORT); diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java index 0cf523836a5..46af463834c 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java @@ -1,14 +1,18 @@ package org.testcontainers.junit; import org.junit.jupiter.api.AutoClose; +import org.junit.jupiter.api.Disabled; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; +@Disabled class DockerComposeContainerPortViaEnvTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/v2-compose-test-port-via-env.yml") ) .withExposedService("redis_1", REDIS_PORT) diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerScalingTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerScalingTest.java index 90256bb0f37..d5be511f44b 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerScalingTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerScalingTest.java @@ -6,6 +6,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import org.testcontainers.utility.TestEnvironment; import redis.clients.jedis.Jedis; @@ -29,6 +30,7 @@ public static void checkVersion() { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/scaled-compose-test.yml") ) .withScaledService("redis", 3) diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerTest.java index 568eaae53cf..2bc855cacb2 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerTest.java @@ -1,9 +1,11 @@ package org.testcontainers.junit; import org.junit.jupiter.api.AutoClose; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.testcontainers.containers.ContainerState; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; import java.io.IOException; @@ -17,10 +19,12 @@ /** * Created by rnorth on 08/08/2015. */ +@Disabled class DockerComposeContainerTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/compose-test.yml") ) .withExposedService("redis_1", REDIS_PORT) @@ -96,6 +100,7 @@ void shouldCreateContainerWhenFileNotPrefixedWithPath() throws IOException { Files.write(filePathNotStartWithDotSlash.toPath(), validYaml.getBytes(StandardCharsets.UTF_8)); final DockerComposeContainer dockerComposeContainer = new DockerComposeContainer<>( + DockerImageName.parse("docker/compose:debian-1.29.2"), filePathNotStartWithDotSlash ); assertThat(dockerComposeContainer).as("Container could not be created using docker compose file").isNotNull(); diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerVolumeRemovalTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerVolumeRemovalTest.java index 557cc7e27db..2ec9a51e197 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerVolumeRemovalTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerVolumeRemovalTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.params.provider.MethodSource; import org.testcontainers.DockerClientFactory; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; import java.util.LinkedHashSet; @@ -27,7 +28,10 @@ void performTest(boolean removeVolumes, boolean shouldVolumesBePresentAfterRunni final AtomicReference volumeName = new AtomicReference<>(""); try ( - DockerComposeContainer environment = new DockerComposeContainer<>(composeFile) + DockerComposeContainer environment = new DockerComposeContainer<>( + DockerImageName.parse("docker/compose:1.29.2"), + composeFile + ) .withExposedService("redis", 6379) .withRemoveVolumes(removeVolumes) .withRemoveImages(DockerComposeContainer.RemoveImages.ALL) diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithBuildTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithBuildTest.java index 8f8da1e6450..4c3c69e8d76 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithBuildTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithBuildTest.java @@ -7,6 +7,7 @@ import org.rnorth.ducttape.unreliables.Unreliables; import org.testcontainers.DockerClientFactory; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; import java.util.concurrent.TimeUnit; @@ -37,7 +38,10 @@ void performTest( final AtomicReference builtImageName = new AtomicReference<>(""); final AtomicReference pulledImageName = new AtomicReference<>(""); try ( - DockerComposeContainer environment = new DockerComposeContainer<>(composeFile) + DockerComposeContainer environment = new DockerComposeContainer<>( + DockerImageName.parse("docker/compose:1.29.2"), + composeFile + ) .withExposedService("customredis", 6379) .withBuild(true) .withRemoveImages(removeMode) diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithCopyFilesTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithCopyFilesTest.java index 69853a4e0d3..c543678faab 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithCopyFilesTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithCopyFilesTest.java @@ -3,6 +3,7 @@ import io.restassured.RestAssured; import org.junit.jupiter.api.Test; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; import java.io.IOException; @@ -15,6 +16,7 @@ class DockerComposeContainerWithCopyFilesTest { void testShouldCopyAllFilesByDefault() throws IOException { try ( DockerComposeContainer environment = new DockerComposeContainer( + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/compose-file-copy-inclusions/compose.yml") ) .withExposedService("app", 8080) @@ -30,6 +32,7 @@ void testShouldCopyAllFilesByDefault() throws IOException { void testWithFileCopyInclusionUsingFilePath() throws IOException { try ( DockerComposeContainer environment = new DockerComposeContainer( + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/compose-file-copy-inclusions/compose-root-only.yml") ) .withExposedService("app", 8080) @@ -48,6 +51,7 @@ void testWithFileCopyInclusionUsingFilePath() throws IOException { void testWithFileCopyInclusionUsingDirectoryPath() throws IOException { try ( DockerComposeContainer environment = new DockerComposeContainer( + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/compose-file-copy-inclusions/compose-test-only.yml") ) .withExposedService("app", 8080) diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithOptionsTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithOptionsTest.java index d4b684ef010..84508326522 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithOptionsTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithOptionsTest.java @@ -7,6 +7,7 @@ import org.junit.jupiter.params.provider.MethodSource; import org.testcontainers.containers.DockerComposeContainer; import org.testcontainers.utility.CommandLine; +import org.testcontainers.utility.DockerImageName; import java.io.File; import java.util.Set; @@ -21,7 +22,7 @@ class DockerComposeContainerWithOptionsTest { public static Stream params() { return Stream.of( - // Test the happy day case. THe compatibility option should be accepted by docker-compose. + // Test the happy day case. The compatibility option should be accepted by docker-compose. Arguments.of( new File("src/test/resources/compose-options-test/with-deploy-block.yml"), false, @@ -55,6 +56,7 @@ public static Stream params() { @ParameterizedTest(name = "docker-compose test [compose file: {0}, local: {1}, options: {2}, expected result: {3}]") @MethodSource("params") void performTest(File composeFile, boolean localMode, Set options, boolean expectError) { + DockerComposeContainer environment; if (localMode) { Assumptions .assumeThat(CommandLine.executableExists(DockerComposeContainer.COMPOSE_EXECUTABLE)) @@ -63,14 +65,19 @@ void performTest(File composeFile, boolean localMode, Set options, boole Assumptions .assumeThat(CommandLine.runShellCommand("docker-compose", "--version")) .doesNotStartWith("Docker Compose version v2"); + + environment = + new DockerComposeContainer<>(composeFile).withOptions(options.stream().toArray(String[]::new)); + } else { + environment = + new DockerComposeContainer<>(DockerImageName.parse("docker/compose:debian-1.29.2"), composeFile) + .withOptions(options.stream().toArray(String[]::new)); } - try ( - DockerComposeContainer environment = new DockerComposeContainer<>(composeFile) - .withOptions(options.stream().toArray(String[]::new)) - .withLocalCompose(localMode) - ) { + + try { environment.start(); assertThat(expectError).isEqualTo(false); + environment.stop(); } catch (Exception e) { assertThat(expectError).isEqualTo(true); } diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeErrorHandlingTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeErrorHandlingTest.java index 9d0f4a19f1e..907011329ec 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeErrorHandlingTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeErrorHandlingTest.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.Test; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -15,6 +16,7 @@ void simpleTest() { assertThat( catchThrowable(() -> { DockerComposeContainer environment = new DockerComposeContainer( + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/invalid-compose.yml") ) .withExposedService("something", 123); diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeLocalImageTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeLocalImageTest.java index 2c77092e1bd..1853a2d4ff1 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeLocalImageTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeLocalImageTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test; import org.testcontainers.DockerClientFactory; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -15,6 +16,7 @@ void usesLocalImageEvenWhenPullFails() throws InterruptedException { tagImage("redis:6-alpine", "redis-local", "latest"); DockerComposeContainer composeContainer = new DockerComposeContainer( + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/local-compose-test.yml") ) .withExposedService("redis", 6379); diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeLogConsumerTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeLogConsumerTest.java index 7b9100d1e35..7f63bdce9fd 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeLogConsumerTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeLogConsumerTest.java @@ -4,6 +4,7 @@ import org.testcontainers.containers.DockerComposeContainer; import org.testcontainers.containers.output.OutputFrame.OutputType; import org.testcontainers.containers.output.WaitingConsumer; +import org.testcontainers.utility.DockerImageName; import java.io.File; import java.util.concurrent.TimeUnit; @@ -15,6 +16,7 @@ class DockerComposeLogConsumerTest { void testLogConsumer() throws TimeoutException { WaitingConsumer logConsumer = new WaitingConsumer(); DockerComposeContainer environment = new DockerComposeContainer( + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/v2-compose-test.yml") ) .withExposedService("redis_1", 6379) diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposePassthroughTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposePassthroughTest.java index 0bc8ace7ab7..a4f2707c583 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposePassthroughTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposePassthroughTest.java @@ -5,6 +5,7 @@ import org.testcontainers.containers.ContainerState; import org.testcontainers.containers.DockerComposeContainer; import org.testcontainers.containers.wait.strategy.HostPortWaitStrategy; +import org.testcontainers.utility.DockerImageName; import org.testcontainers.utility.TestEnvironment; import java.io.File; @@ -25,6 +26,7 @@ void testContainerInstanceProperties() { TestWaitStrategy waitStrategy = new TestWaitStrategy(); try ( DockerComposeContainer compose = new DockerComposeContainer( + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/v2-compose-test-passthrough.yml") ) .withEnv("foo", "bar") diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java index 2496b7ee0bc..c1c295ef238 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java @@ -1,18 +1,22 @@ package org.testcontainers.junit; import org.junit.jupiter.api.AutoClose; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +@Disabled class DockerComposeServiceTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/compose-test.yml") ) .withServices("redis") diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatTest.java index c7b066b39b8..8a8f8f0da0b 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatTest.java @@ -1,17 +1,21 @@ package org.testcontainers.junit; import org.junit.jupiter.api.AutoClose; +import org.junit.jupiter.api.Disabled; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; /** * Created by rnorth on 21/05/2016. */ +@Disabled class DockerComposeV2FormatTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/v2-compose-test.yml") ) .withExposedService("redis_1", REDIS_PORT); diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatWithIdentifierTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatWithIdentifierTest.java index d8f4e57dbd9..dd198181d41 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatWithIdentifierTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatWithIdentifierTest.java @@ -1,14 +1,18 @@ package org.testcontainers.junit; import org.junit.jupiter.api.AutoClose; +import org.junit.jupiter.api.Disabled; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; +@Disabled class DockerComposeV2FormatWithIdentifierTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( + DockerImageName.parse("docker/compose:1.29.2"), "TEST", new File("src/test/resources/v2-compose-test.yml") ) diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java index bc95f0229b7..2cf506059c5 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java @@ -1,14 +1,18 @@ package org.testcontainers.junit; import org.junit.jupiter.api.AutoClose; +import org.junit.jupiter.api.Disabled; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; +@Disabled class DockerComposeV2WithNetworkTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/v2-compose-test-with-network.yml") ) .withExposedService("redis_1", REDIS_PORT); diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeWaitStrategyTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeWaitStrategyTest.java index 9f8c2c9ab49..6f56ef9c24a 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeWaitStrategyTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeWaitStrategyTest.java @@ -7,6 +7,7 @@ import org.testcontainers.containers.DockerComposeContainer; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.containers.wait.strategy.WaitStrategy; +import org.testcontainers.utility.DockerImageName; import java.io.File; import java.time.Duration; @@ -23,7 +24,11 @@ class DockerComposeWaitStrategyTest { @BeforeEach public final void setUp() { - environment = new DockerComposeContainer<>(new File("src/test/resources/compose-test.yml")); + environment = + new DockerComposeContainer<>( + DockerImageName.parse("docker/compose:1.29.2"), + new File("src/test/resources/compose-test.yml") + ); } @AfterEach diff --git a/core/src/test/java/org/testcontainers/utility/AuthenticatedImagePullTest.java b/core/src/test/java/org/testcontainers/utility/AuthenticatedImagePullTest.java index 1f6fbc1551a..171bd9a4381 100644 --- a/core/src/test/java/org/testcontainers/utility/AuthenticatedImagePullTest.java +++ b/core/src/test/java/org/testcontainers/utility/AuthenticatedImagePullTest.java @@ -130,7 +130,12 @@ void testThatAuthLocatorIsUsedForDockerComposePull() throws IOException { Files.write(tempFile, composeFileContent.getBytes()); // Start the docker compose project, which will require an authenticated pull - try (final DockerComposeContainer compose = new DockerComposeContainer<>(tempFile.toFile())) { + try ( + final DockerComposeContainer compose = new DockerComposeContainer<>( + DockerImageName.parse("docker/compose:1.29.2"), + tempFile.toFile() + ) + ) { compose.start(); assertThat( diff --git a/modules/junit-jupiter/src/test/java/org/testcontainers/junit/jupiter/DockerComposeContainerTests.java b/modules/junit-jupiter/src/test/java/org/testcontainers/junit/jupiter/DockerComposeContainerTests.java index 7a43ed67a7d..460d50a856b 100644 --- a/modules/junit-jupiter/src/test/java/org/testcontainers/junit/jupiter/DockerComposeContainerTests.java +++ b/modules/junit-jupiter/src/test/java/org/testcontainers/junit/jupiter/DockerComposeContainerTests.java @@ -7,6 +7,7 @@ import org.junit.jupiter.api.Test; import org.testcontainers.containers.DockerComposeContainer; import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -17,6 +18,7 @@ class DockerComposeContainerTests { @Container private DockerComposeContainer composeContainer = new DockerComposeContainer( + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/docker-compose.yml") ) .withExposedService("whoami_1", 80, Wait.forHttp("/")); diff --git a/modules/spock/src/test/groovy/org/testcontainers/spock/ComposeContainerIT.groovy b/modules/spock/src/test/groovy/org/testcontainers/spock/ComposeContainerIT.groovy index 7294d534275..ff473aea1de 100644 --- a/modules/spock/src/test/groovy/org/testcontainers/spock/ComposeContainerIT.groovy +++ b/modules/spock/src/test/groovy/org/testcontainers/spock/ComposeContainerIT.groovy @@ -4,12 +4,14 @@ import org.apache.http.client.methods.HttpGet import org.apache.http.impl.client.HttpClientBuilder import org.testcontainers.containers.DockerComposeContainer import org.testcontainers.containers.wait.strategy.Wait +import org.testcontainers.utility.DockerImageName import spock.lang.Specification @Testcontainers class ComposeContainerIT extends Specification { DockerComposeContainer composeContainer = new DockerComposeContainer( + DockerImageName.parse("docker/compose:debian-1.29.2"), new File("src/test/resources/docker-compose.yml")) .withExposedService("whoami_1", 80, Wait.forHttp("/")) diff --git a/modules/spock/src/test/groovy/org/testcontainers/spock/SharedComposeContainerIT.groovy b/modules/spock/src/test/groovy/org/testcontainers/spock/SharedComposeContainerIT.groovy index f728212278f..953d476b160 100644 --- a/modules/spock/src/test/groovy/org/testcontainers/spock/SharedComposeContainerIT.groovy +++ b/modules/spock/src/test/groovy/org/testcontainers/spock/SharedComposeContainerIT.groovy @@ -4,6 +4,7 @@ import org.apache.http.client.methods.HttpGet import org.apache.http.impl.client.HttpClientBuilder import org.testcontainers.containers.DockerComposeContainer import org.testcontainers.containers.wait.strategy.Wait +import org.testcontainers.utility.DockerImageName import spock.lang.Shared import spock.lang.Specification @@ -12,6 +13,7 @@ class SharedComposeContainerIT extends Specification { @Shared DockerComposeContainer composeContainer = new DockerComposeContainer( + DockerImageName.parse("docker/compose:debian-1.29.2"), new File("src/test/resources/docker-compose.yml")) .withExposedService("whoami_1", 80, Wait.forHttp("/"))