From 018f97a8d9cf3d89a7f3f0c74087f006c757ada0 Mon Sep 17 00:00:00 2001 From: Fokion Sotiropoulos Date: Sun, 22 Sep 2024 00:40:55 +0100 Subject: [PATCH 01/18] Check the property for compose.container.image in order to get the appropriate docker image in the ComposeContainer. --- .../containers/ComposeContainer.java | 5 +- .../containers/ComposeContainerTest.java | 69 +++++++++++++++++++ 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java diff --git a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java index e8061363a18..b84d1d0113e 100644 --- a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java @@ -11,6 +11,7 @@ import org.testcontainers.lifecycle.Startable; import org.testcontainers.utility.Base58; import org.testcontainers.utility.DockerImageName; +import org.testcontainers.utility.TestcontainersConfiguration; import java.io.File; import java.time.Duration; @@ -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"); + public static final String DEFAULT_DOCKER_IMAGE = "docker:24.0.2"; private final ComposeDelegate composeDelegate; @@ -86,7 +87,7 @@ public ComposeContainer(String identifier, List composeFiles) { composeFiles, identifier, COMPOSE_EXECUTABLE, - DEFAULT_IMAGE_NAME + DockerImageName.parse(TestcontainersConfiguration.getInstance().getEnvVarOrUserProperty("compose.container.image",DEFAULT_DOCKER_IMAGE)) ); this.project = this.composeDelegate.getProject(); } 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..ed88fb4412a --- /dev/null +++ b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java @@ -0,0 +1,69 @@ +package org.testcontainers.containers; + +import ch.qos.logback.classic.Logger; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.AppenderBase; +import com.google.common.collect.Lists; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.LoggerFactory; +import org.testcontainers.utility.TestcontainersConfiguration; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import static org.junit.Assert.*; + +public class ComposeContainerTest { + private TestLogAppender testLogAppender; + private Logger rootLogger; + + @Before + public void setup() { + testLogAppender = new TestLogAppender(); + testLogAppender.start(); + rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); + rootLogger.addAppender(testLogAppender); + } + + @After + public void tearDown() { + rootLogger.detachAppender(testLogAppender); + } + + @Test + public void testWithCustomDockerImage() throws IOException { + TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", "docker:25.0.2"); + ComposeContainer composeContainer = new ComposeContainer(Lists.newArrayList(new File("src/test/resources/docker-compose-imagename-parsing-v2.yml"))); + composeContainer.start(); + System.clearProperty("compose.container.image"); + List logs = testLogAppender.getLogs(); + composeContainer.stop(); + assertNotNull(logs); + Optional verification = logs.stream().filter(line -> line.contains("Creating container for image: docker:25.0.2")).findFirst(); + assertTrue(verification.isPresent()); + TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", ""); + } + + private static class TestLogAppender extends AppenderBase { + private final List logs = new ArrayList<>(); + + @Override + protected void append(ILoggingEvent eventObject) { + logs.add(eventObject.getFormattedMessage()); + } + + public List getLogs() { + return logs; + } + + public void clearLogs() { + logs.clear(); + } + } +} From 33a0c10ba95692bc02855fd59bd2ff0df38339b6 Mon Sep 17 00:00:00 2001 From: Fokion Sotiropoulos Date: Sun, 22 Sep 2024 16:00:18 +0100 Subject: [PATCH 02/18] fix the checkstyle issues --- .../containers/ComposeContainerTest.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java index ed88fb4412a..eb18c913964 100644 --- a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java +++ b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java @@ -12,15 +12,17 @@ import java.io.File; import java.io.IOException; -import java.nio.file.Files; import java.util.ArrayList; import java.util.List; import java.util.Optional; -import static org.junit.Assert.*; +import static org.assertj.core.api.Assertions.assertThat; + public class ComposeContainerTest { + private TestLogAppender testLogAppender; + private Logger rootLogger; @Before @@ -44,9 +46,9 @@ public void testWithCustomDockerImage() throws IOException { System.clearProperty("compose.container.image"); List logs = testLogAppender.getLogs(); composeContainer.stop(); - assertNotNull(logs); + assertThat(logs).isNotNull(); Optional verification = logs.stream().filter(line -> line.contains("Creating container for image: docker:25.0.2")).findFirst(); - assertTrue(verification.isPresent()); + assertThat(verification.isPresent()).isTrue(); TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", ""); } From f1dca21e532da175a039213f5fe69bb1af9dc2c0 Mon Sep 17 00:00:00 2001 From: Fokion Sotiropoulos Date: Tue, 1 Oct 2024 19:07:36 +0100 Subject: [PATCH 03/18] apply spotless checks --- .../testcontainers/containers/ComposeContainer.java | 6 +++++- .../containers/ComposeContainerTest.java | 11 ++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java index b84d1d0113e..19dac5cb2d1 100644 --- a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java @@ -87,7 +87,11 @@ public ComposeContainer(String identifier, List composeFiles) { composeFiles, identifier, COMPOSE_EXECUTABLE, - DockerImageName.parse(TestcontainersConfiguration.getInstance().getEnvVarOrUserProperty("compose.container.image",DEFAULT_DOCKER_IMAGE)) + DockerImageName.parse( + TestcontainersConfiguration + .getInstance() + .getEnvVarOrUserProperty("compose.container.image", DEFAULT_DOCKER_IMAGE) + ) ); this.project = this.composeDelegate.getProject(); } diff --git a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java index eb18c913964..0bf7ddb8dbc 100644 --- a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java +++ b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java @@ -18,7 +18,6 @@ import static org.assertj.core.api.Assertions.assertThat; - public class ComposeContainerTest { private TestLogAppender testLogAppender; @@ -41,18 +40,24 @@ public void tearDown() { @Test public void testWithCustomDockerImage() throws IOException { TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", "docker:25.0.2"); - ComposeContainer composeContainer = new ComposeContainer(Lists.newArrayList(new File("src/test/resources/docker-compose-imagename-parsing-v2.yml"))); + ComposeContainer composeContainer = new ComposeContainer( + Lists.newArrayList(new File("src/test/resources/docker-compose-imagename-parsing-v2.yml")) + ); composeContainer.start(); System.clearProperty("compose.container.image"); List logs = testLogAppender.getLogs(); composeContainer.stop(); assertThat(logs).isNotNull(); - Optional verification = logs.stream().filter(line -> line.contains("Creating container for image: docker:25.0.2")).findFirst(); + Optional verification = logs + .stream() + .filter(line -> line.contains("Creating container for image: docker:25.0.2")) + .findFirst(); assertThat(verification.isPresent()).isTrue(); TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", ""); } private static class TestLogAppender extends AppenderBase { + private final List logs = new ArrayList<>(); @Override From ed3406a40f68fe1fb93fd15aace0f22bb045786f Mon Sep 17 00:00:00 2001 From: Fokion Sotiropoulos Date: Tue, 1 Oct 2024 19:25:32 +0100 Subject: [PATCH 04/18] update the test and the cleanup of container --- .../containers/ComposeContainerTest.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java index 0bf7ddb8dbc..f22c92bfefa 100644 --- a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java +++ b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java @@ -20,6 +20,7 @@ public class ComposeContainerTest { + public static final String DOCKER_IMAGE = "docker:25.0.2"; private TestLogAppender testLogAppender; private Logger rootLogger; @@ -30,30 +31,31 @@ public void setup() { testLogAppender.start(); rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); rootLogger.addAppender(testLogAppender); + TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", DOCKER_IMAGE); } @After public void tearDown() { rootLogger.detachAppender(testLogAppender); + TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", ""); + System.clearProperty("compose.container.image"); } @Test public void testWithCustomDockerImage() throws IOException { - TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", "docker:25.0.2"); ComposeContainer composeContainer = new ComposeContainer( Lists.newArrayList(new File("src/test/resources/docker-compose-imagename-parsing-v2.yml")) ); composeContainer.start(); - System.clearProperty("compose.container.image"); + List logs = testLogAppender.getLogs(); composeContainer.stop(); assertThat(logs).isNotNull(); Optional verification = logs .stream() - .filter(line -> line.contains("Creating container for image: docker:25.0.2")) + .filter(line -> line.contains("Creating container for image: "+DOCKER_IMAGE)) .findFirst(); assertThat(verification.isPresent()).isTrue(); - TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", ""); } private static class TestLogAppender extends AppenderBase { @@ -68,9 +70,5 @@ protected void append(ILoggingEvent eventObject) { public List getLogs() { return logs; } - - public void clearLogs() { - logs.clear(); - } } } From 11bd114ae55af606261e28203dc9c1471f24a318 Mon Sep 17 00:00:00 2001 From: Fokion Sotiropoulos Date: Sat, 18 Jan 2025 17:04:10 +0000 Subject: [PATCH 05/18] Update ComposeContainer and DockerComposeContainer to the latest version of docker and update the constructors --- .../containers/ComposeContainer.java | 64 +++++++++++++++---- .../containers/DockerComposeContainer.java | 40 +++++++++++- 2 files changed, 88 insertions(+), 16 deletions(-) diff --git a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java index 19dac5cb2d1..36e8447f3e6 100644 --- a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java @@ -60,7 +60,7 @@ public class ComposeContainer implements Startable { public static final String COMPOSE_EXECUTABLE = SystemUtils.IS_OS_WINDOWS ? "docker.exe" : "docker"; - public static final String DEFAULT_DOCKER_IMAGE = "docker:24.0.2"; + public static final String DEFAULT_DOCKER_IMAGE = "docker:27.5.0"; private final ComposeDelegate composeDelegate; @@ -68,34 +68,72 @@ public class ComposeContainer implements Startable { private List filesInDirectory = new ArrayList<>(); - public ComposeContainer(File... composeFiles) { - this(Arrays.asList(composeFiles)); + public ComposeContainer(DockerImageName image, File... composeFiles) { + this(image, Arrays.asList(composeFiles)); } - public ComposeContainer(List composeFiles) { - this(Base58.randomString(6).toLowerCase(), composeFiles); + public ComposeContainer(DockerImageName image, List composeFiles) { + this(image,Base58.randomString(6).toLowerCase(),composeFiles); } - public ComposeContainer(String identifier, File... composeFiles) { - this(identifier, Arrays.asList(composeFiles)); + public ComposeContainer(DockerImageName image, String identifier, File... composeFiles) { + this(image,identifier, Arrays.asList(composeFiles)); } - public ComposeContainer(String identifier, List composeFiles) { + public ComposeContainer(DockerImageName image, String identifier, List composeFiles) { this.composeDelegate = new ComposeDelegate( ComposeDelegate.ComposeVersion.V2, composeFiles, identifier, COMPOSE_EXECUTABLE, - DockerImageName.parse( - TestcontainersConfiguration - .getInstance() - .getEnvVarOrUserProperty("compose.container.image", DEFAULT_DOCKER_IMAGE) - ) + image ); this.project = this.composeDelegate.getProject(); } + /** + * @deprecated + * Use the new constructor ComposeContainer(DockerImageName image, File... composeFiles) + */ + @Deprecated + public ComposeContainer(File... composeFiles) { + this(getDockerImageName(),Arrays.asList(composeFiles)); + } + /** + * @deprecated + * Use the new constructor ComposeContainer(DockerImageName image,List composeFiles) + */ + @Deprecated + public ComposeContainer(List composeFiles) { + this(getDockerImageName(), composeFiles); + } + /** + * @deprecated + * Use the new constructor ComposeContainer(DockerImageName image, String identifier, File... composeFile) + */ + @Deprecated + public ComposeContainer(String identifier, File... composeFiles) { + this(getDockerImageName(),identifier, Arrays.asList(composeFiles)); + } + + /** + * @deprecated + * Use the new constructor ComposeContainer(DockerImageName image,String identifier, List composeFiles) + */ + @Deprecated + public ComposeContainer(String identifier, List composeFiles) { + this(getDockerImageName(),identifier, composeFiles); + } + + public static DockerImageName getDockerImageName() { + return DockerImageName.parse( + TestcontainersConfiguration + .getInstance() + .getEnvVarOrUserProperty("compose.container.image", DEFAULT_DOCKER_IMAGE) + ); + } + @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 dd06b181b42..6848e871361 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -11,11 +11,13 @@ import org.testcontainers.lifecycle.Startable; import org.testcontainers.utility.Base58; import org.testcontainers.utility.DockerImageName; +import org.testcontainers.utility.TestcontainersConfiguration; import java.io.File; 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; @@ -24,6 +26,8 @@ import java.util.Set; import java.util.function.Consumer; +import static org.testcontainers.containers.ComposeContainer.getDockerImageName; + /** * Container which launches Docker Compose, for the purposes of launching a defined set of containers. */ @@ -58,31 +62,59 @@ 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<>(); + + + public DockerComposeContainer(DockerImageName image, String identifier, File composeFile) { + this(image, identifier, Collections.singletonList(composeFile)); + } + + public DockerComposeContainer(DockerImageName image, List composeFiles) { + this(image,Base58.randomString(6).toLowerCase(),composeFiles); + } + + public DockerComposeContainer(DockerImageName image, String identifier, File... composeFiles) { + this(image,identifier, Arrays.asList(composeFiles)); + } + public DockerComposeContainer(DockerImageName image, String identifier, List composeFiles) { + this.composeDelegate = + new ComposeDelegate( + ComposeDelegate.ComposeVersion.V2, + composeFiles, + identifier, + COMPOSE_EXECUTABLE, + image + ); + this.project = this.composeDelegate.getProject(); + } + + @Deprecated public DockerComposeContainer(File composeFile, String identifier) { this(identifier, composeFile); } + @Deprecated public DockerComposeContainer(File... composeFiles) { this(Arrays.asList(composeFiles)); } + @Deprecated public DockerComposeContainer(List composeFiles) { this(Base58.randomString(6).toLowerCase(), composeFiles); } + @Deprecated public DockerComposeContainer(String identifier, File... composeFiles) { this(identifier, Arrays.asList(composeFiles)); } + @Deprecated public DockerComposeContainer(String identifier, List composeFiles) { this.composeDelegate = new ComposeDelegate( @@ -90,11 +122,13 @@ public DockerComposeContainer(String identifier, List composeFiles) { composeFiles, identifier, COMPOSE_EXECUTABLE, - DEFAULT_IMAGE_NAME + getDockerImageName() ); this.project = this.composeDelegate.getProject(); } + + @Override public void start() { synchronized (MUTEX) { From 4acc8fd5529651143f03feccf184721927631439 Mon Sep 17 00:00:00 2001 From: Fokion Sotiropoulos Date: Tue, 21 Jan 2025 22:19:33 +0000 Subject: [PATCH 06/18] Fix an issue with the TestcontainersConfiguration.getInstance().getEnvVarOrUserProperty checking if the value is not empty --- .../java/org/testcontainers/containers/ComposeContainer.java | 2 +- .../org/testcontainers/containers/DockerComposeContainer.java | 4 ++-- .../testcontainers/utility/TestcontainersConfiguration.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java index 36e8447f3e6..65e9e5dee8c 100644 --- a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java @@ -60,7 +60,7 @@ public class ComposeContainer implements Startable { public static final String COMPOSE_EXECUTABLE = SystemUtils.IS_OS_WINDOWS ? "docker.exe" : "docker"; - public static final String DEFAULT_DOCKER_IMAGE = "docker:27.5.0"; + private static final String DEFAULT_DOCKER_IMAGE = "docker:27.5.0"; private final ComposeDelegate composeDelegate; diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index 6848e871361..d921a22c884 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -84,7 +84,7 @@ public DockerComposeContainer(DockerImageName image, String identifier, File... public DockerComposeContainer(DockerImageName image, String identifier, List composeFiles) { this.composeDelegate = new ComposeDelegate( - ComposeDelegate.ComposeVersion.V2, + ComposeDelegate.ComposeVersion.V1, composeFiles, identifier, COMPOSE_EXECUTABLE, @@ -122,7 +122,7 @@ public DockerComposeContainer(String identifier, List composeFiles) { composeFiles, identifier, COMPOSE_EXECUTABLE, - getDockerImageName() + DockerImageName.parse("docker/compose:1.29.2") ); this.project = this.composeDelegate.getProject(); } diff --git a/core/src/main/java/org/testcontainers/utility/TestcontainersConfiguration.java b/core/src/main/java/org/testcontainers/utility/TestcontainersConfiguration.java index 5c80b82ba9c..47954ea7624 100644 --- a/core/src/main/java/org/testcontainers/utility/TestcontainersConfiguration.java +++ b/core/src/main/java/org/testcontainers/utility/TestcontainersConfiguration.java @@ -244,7 +244,7 @@ private String getConfigurable( } for (final Properties properties : propertiesSources) { - if (properties.get(propertyName) != null) { + if (properties.get(propertyName) != null && !properties.get(propertyName).toString().trim().isEmpty()) { return (String) properties.get(propertyName); } } From b15f98e8291b552e040079f586ae519bf4e2da1b Mon Sep 17 00:00:00 2001 From: Fokion Sotiropoulos Date: Thu, 23 Jan 2025 08:38:26 +0000 Subject: [PATCH 07/18] apply spotless --- .../containers/ComposeContainer.java | 20 +++++++----------- .../containers/DockerComposeContainer.java | 21 ++++--------------- .../containers/ComposeContainerTest.java | 3 ++- 3 files changed, 14 insertions(+), 30 deletions(-) diff --git a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java index 65e9e5dee8c..4b8bc3400fd 100644 --- a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java @@ -73,22 +73,16 @@ public ComposeContainer(DockerImageName image, File... composeFiles) { } public ComposeContainer(DockerImageName image, List composeFiles) { - this(image,Base58.randomString(6).toLowerCase(),composeFiles); + this(image, Base58.randomString(6).toLowerCase(), composeFiles); } public ComposeContainer(DockerImageName image, String identifier, File... composeFiles) { - this(image,identifier, Arrays.asList(composeFiles)); + this(image, identifier, Arrays.asList(composeFiles)); } public ComposeContainer(DockerImageName image, String identifier, List composeFiles) { this.composeDelegate = - new ComposeDelegate( - ComposeDelegate.ComposeVersion.V2, - composeFiles, - identifier, - COMPOSE_EXECUTABLE, - image - ); + new ComposeDelegate(ComposeDelegate.ComposeVersion.V2, composeFiles, identifier, COMPOSE_EXECUTABLE, image); this.project = this.composeDelegate.getProject(); } @@ -98,8 +92,9 @@ public ComposeContainer(DockerImageName image, String identifier, List com */ @Deprecated public ComposeContainer(File... composeFiles) { - this(getDockerImageName(),Arrays.asList(composeFiles)); + this(getDockerImageName(), Arrays.asList(composeFiles)); } + /** * @deprecated * Use the new constructor ComposeContainer(DockerImageName image,List composeFiles) @@ -108,13 +103,14 @@ public ComposeContainer(File... composeFiles) { public ComposeContainer(List composeFiles) { this(getDockerImageName(), composeFiles); } + /** * @deprecated * Use the new constructor ComposeContainer(DockerImageName image, String identifier, File... composeFile) */ @Deprecated public ComposeContainer(String identifier, File... composeFiles) { - this(getDockerImageName(),identifier, Arrays.asList(composeFiles)); + this(getDockerImageName(), identifier, Arrays.asList(composeFiles)); } /** @@ -123,7 +119,7 @@ public ComposeContainer(String identifier, File... composeFiles) { */ @Deprecated public ComposeContainer(String identifier, List composeFiles) { - this(getDockerImageName(),identifier, composeFiles); + this(getDockerImageName(), identifier, composeFiles); } public static DockerImageName getDockerImageName() { diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index d921a22c884..bbf95aadcfb 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -11,7 +11,6 @@ import org.testcontainers.lifecycle.Startable; import org.testcontainers.utility.Base58; import org.testcontainers.utility.DockerImageName; -import org.testcontainers.utility.TestcontainersConfiguration; import java.io.File; import java.time.Duration; @@ -26,8 +25,6 @@ import java.util.Set; import java.util.function.Consumer; -import static org.testcontainers.containers.ComposeContainer.getDockerImageName; - /** * Container which launches Docker Compose, for the purposes of launching a defined set of containers. */ @@ -68,32 +65,24 @@ public class DockerComposeContainer> i private List filesInDirectory = new ArrayList<>(); - - public DockerComposeContainer(DockerImageName image, String identifier, File composeFile) { this(image, identifier, Collections.singletonList(composeFile)); } public DockerComposeContainer(DockerImageName image, List composeFiles) { - this(image,Base58.randomString(6).toLowerCase(),composeFiles); + this(image, Base58.randomString(6).toLowerCase(), composeFiles); } public DockerComposeContainer(DockerImageName image, String identifier, File... composeFiles) { - this(image,identifier, Arrays.asList(composeFiles)); + this(image, identifier, Arrays.asList(composeFiles)); } + public DockerComposeContainer(DockerImageName image, String identifier, List composeFiles) { this.composeDelegate = - new ComposeDelegate( - ComposeDelegate.ComposeVersion.V1, - composeFiles, - identifier, - COMPOSE_EXECUTABLE, - image - ); + new ComposeDelegate(ComposeDelegate.ComposeVersion.V1, composeFiles, identifier, COMPOSE_EXECUTABLE, image); this.project = this.composeDelegate.getProject(); } - @Deprecated public DockerComposeContainer(File composeFile, String identifier) { this(identifier, composeFile); @@ -127,8 +116,6 @@ public DockerComposeContainer(String identifier, List composeFiles) { this.project = this.composeDelegate.getProject(); } - - @Override public void start() { synchronized (MUTEX) { diff --git a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java index f22c92bfefa..76ba8ba42f4 100644 --- a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java +++ b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java @@ -21,6 +21,7 @@ public class ComposeContainerTest { public static final String DOCKER_IMAGE = "docker:25.0.2"; + private TestLogAppender testLogAppender; private Logger rootLogger; @@ -53,7 +54,7 @@ public void testWithCustomDockerImage() throws IOException { assertThat(logs).isNotNull(); Optional verification = logs .stream() - .filter(line -> line.contains("Creating container for image: "+DOCKER_IMAGE)) + .filter(line -> line.contains("Creating container for image: " + DOCKER_IMAGE)) .findFirst(); assertThat(verification.isPresent()).isTrue(); } From 75004f6b005755f0010c5f60247159c7117b04cf Mon Sep 17 00:00:00 2001 From: Fokion Sotiropoulos Date: Wed, 29 Jan 2025 16:16:00 +0000 Subject: [PATCH 08/18] fix javadoc step --- .../java/org/testcontainers/containers/ComposeContainer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java index 4b8bc3400fd..c5ab9d6b38a 100644 --- a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java @@ -97,7 +97,7 @@ public ComposeContainer(File... composeFiles) { /** * @deprecated - * Use the new constructor ComposeContainer(DockerImageName image,List composeFiles) + * Use the new constructor ComposeContainer(DockerImageName image,List composeFiles) */ @Deprecated public ComposeContainer(List composeFiles) { @@ -115,7 +115,7 @@ public ComposeContainer(String identifier, File... composeFiles) { /** * @deprecated - * Use the new constructor ComposeContainer(DockerImageName image,String identifier, List composeFiles) + * Use the new constructor ComposeContainer(DockerImageName image,String identifier, List composeFiles) */ @Deprecated public ComposeContainer(String identifier, List composeFiles) { From 78c8674016156008cccd05c1aeeef39434b86e74 Mon Sep 17 00:00:00 2001 From: Fokion Sotiropoulos Date: Thu, 6 Feb 2025 23:43:05 +0000 Subject: [PATCH 09/18] do not update the default image --- .../containers/ComposeContainer.java | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java index c5ab9d6b38a..9f683c565da 100644 --- a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java @@ -60,7 +60,7 @@ public class ComposeContainer implements Startable { public static final String COMPOSE_EXECUTABLE = SystemUtils.IS_OS_WINDOWS ? "docker.exe" : "docker"; - private static final String DEFAULT_DOCKER_IMAGE = "docker:27.5.0"; + private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("docker:24.0.2"); private final ComposeDelegate composeDelegate; @@ -92,7 +92,7 @@ public ComposeContainer(DockerImageName image, String identifier, List com */ @Deprecated public ComposeContainer(File... composeFiles) { - this(getDockerImageName(), Arrays.asList(composeFiles)); + this(DEFAULT_IMAGE_NAME, Arrays.asList(composeFiles)); } /** @@ -101,7 +101,7 @@ public ComposeContainer(File... composeFiles) { */ @Deprecated public ComposeContainer(List composeFiles) { - this(getDockerImageName(), composeFiles); + this(DEFAULT_IMAGE_NAME, composeFiles); } /** @@ -110,7 +110,7 @@ public ComposeContainer(List composeFiles) { */ @Deprecated public ComposeContainer(String identifier, File... composeFiles) { - this(getDockerImageName(), identifier, Arrays.asList(composeFiles)); + this(DEFAULT_IMAGE_NAME, identifier, Arrays.asList(composeFiles)); } /** @@ -119,15 +119,7 @@ public ComposeContainer(String identifier, File... composeFiles) { */ @Deprecated public ComposeContainer(String identifier, List composeFiles) { - this(getDockerImageName(), identifier, composeFiles); - } - - public static DockerImageName getDockerImageName() { - return DockerImageName.parse( - TestcontainersConfiguration - .getInstance() - .getEnvVarOrUserProperty("compose.container.image", DEFAULT_DOCKER_IMAGE) - ); + this(DEFAULT_IMAGE_NAME, identifier, composeFiles); } @Override From c87cd9ea3a081f2a15514d8c9cebb1028bc3f10c Mon Sep 17 00:00:00 2001 From: Fokion Sotiropoulos Date: Sat, 15 Feb 2025 15:33:39 +0000 Subject: [PATCH 10/18] Adding javadoc to pass the step --- .../containers/DockerComposeContainer.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index bbf95aadcfb..6187595688f 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -83,26 +83,47 @@ public DockerComposeContainer(DockerImageName image, String identifier, List composeFiles) { this(Base58.randomString(6).toLowerCase(), composeFiles); } + /** + * @deprecated + * Use the new constructor DockerComposeContainer(String identifier,File... composeFiles) + */ @Deprecated public DockerComposeContainer(String identifier, File... composeFiles) { this(identifier, Arrays.asList(composeFiles)); } + + /** + * @deprecated + * Use the new constructor DockerComposeContainer(String identifier,List composeFiles) + */ @Deprecated public DockerComposeContainer(String identifier, List composeFiles) { this.composeDelegate = From 238dffaf4d6b722c6fa795fa37e2b8f4f1c613fb Mon Sep 17 00:00:00 2001 From: Fokion Sotiropoulos Date: Sun, 6 Apr 2025 13:52:08 +0100 Subject: [PATCH 11/18] adding more tests to unblock this --- .../containers/ComposeContainerTest.java | 34 +++++--- ...DockerComposeContainerCustomImageTest.java | 79 +++++++++++++++++++ 2 files changed, 103 insertions(+), 10 deletions(-) create mode 100644 core/src/test/java/org/testcontainers/containers/DockerComposeContainerCustomImageTest.java diff --git a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java index 76ba8ba42f4..ffcfe67fd0e 100644 --- a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java +++ b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java @@ -8,6 +8,7 @@ import org.junit.Before; import org.junit.Test; import org.slf4j.LoggerFactory; +import org.testcontainers.utility.DockerImageName; import org.testcontainers.utility.TestcontainersConfiguration; import java.io.File; @@ -21,7 +22,9 @@ public class ComposeContainerTest { public static final String DOCKER_IMAGE = "docker:25.0.2"; + private static final String COMPOSE_FILE_PATH = "src/test/resources/docker-compose-imagename-parsing-v2.yml"; + private ComposeContainer composeContainer; private TestLogAppender testLogAppender; private Logger rootLogger; @@ -33,6 +36,7 @@ public void setup() { rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); rootLogger.addAppender(testLogAppender); TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", DOCKER_IMAGE); + composeContainer.stop(); } @After @@ -43,22 +47,32 @@ public void tearDown() { } @Test - public void testWithCustomDockerImage() throws IOException { - ComposeContainer composeContainer = new ComposeContainer( - Lists.newArrayList(new File("src/test/resources/docker-compose-imagename-parsing-v2.yml")) + public void testWithCustomDockerImage() { + composeContainer = new ComposeContainer( + DockerImageName.parse(DOCKER_IMAGE), new File(COMPOSE_FILE_PATH) + ); + composeContainer.start(); + verifyContainerCreation(); + } + + @Test + public void testWithCustomDockerImageAndIdentifier() { + composeContainer = new ComposeContainer( + DockerImageName.parse(DOCKER_IMAGE), "myidentifier", new File(COMPOSE_FILE_PATH) ); composeContainer.start(); + verifyContainerCreation(); + } + private void verifyContainerCreation() { List logs = testLogAppender.getLogs(); - composeContainer.stop(); - assertThat(logs).isNotNull(); - Optional verification = logs - .stream() - .filter(line -> line.contains("Creating container for image: " + DOCKER_IMAGE)) - .findFirst(); - assertThat(verification.isPresent()).isTrue(); + + assertThat(logs) + .isNotNull() + .anyMatch(line -> line.contains("Creating container for image: " + DOCKER_IMAGE)); } + private static class TestLogAppender extends AppenderBase { private final List logs = new ArrayList<>(); 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..ba1faa019e0 --- /dev/null +++ b/core/src/test/java/org/testcontainers/containers/DockerComposeContainerCustomImageTest.java @@ -0,0 +1,79 @@ +package org.testcontainers.containers; + +import ch.qos.logback.classic.Logger; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.AppenderBase; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.LoggerFactory; +import org.testcontainers.utility.DockerImageName; +import org.testcontainers.utility.TestcontainersConfiguration; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class DockerComposeContainerCustomImageTest { + public static final String DOCKER_IMAGE = "docker/compose:debian-1.29.2"; + private static final String COMPOSE_FILE_PATH = "src/test/resources/docker-compose-imagename-parsing-v1.yml"; + + private DockerComposeContainer composeContainer; + private TestLogAppender testLogAppender; + private Logger rootLogger; + + @Before + public void setup() { + testLogAppender = new TestLogAppender(); + testLogAppender.start(); + rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); + rootLogger.addAppender(testLogAppender); + TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", DOCKER_IMAGE); + } + + @After + public void tearDown() { + rootLogger.detachAppender(testLogAppender); + TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", ""); + System.clearProperty("compose.container.image"); + composeContainer.stop(); + } + + @Test + public void testWithCustomDockerImage() { + composeContainer = new DockerComposeContainer(DockerImageName.parse(DOCKER_IMAGE),"testing", new File(COMPOSE_FILE_PATH)); + composeContainer.start(); + verifyContainerCreation(); + } + + @Test + public void testWithCustomDockerImageAndIdentifier() { + composeContainer = new DockerComposeContainer(DockerImageName.parse(DOCKER_IMAGE), "myidentifier", new File(COMPOSE_FILE_PATH)); + composeContainer.start(); + verifyContainerCreation(); + } + + private void verifyContainerCreation() { + List logs = testLogAppender.getLogs(); + + assertThat(logs) + .isNotNull() + .anyMatch(line -> line.contains("Creating container for image: " + DOCKER_IMAGE)); + } + + private static class TestLogAppender extends AppenderBase { + + private final List logs = new ArrayList<>(); + + @Override + protected void append(ILoggingEvent eventObject) { + logs.add(eventObject.getFormattedMessage()); + } + + public List getLogs() { + return logs; + } + } +} From 8e0f8a16793eed3774e4100200f798bc984c882b Mon Sep 17 00:00:00 2001 From: Fokion Sotiropoulos Date: Sun, 6 Apr 2025 14:07:24 +0100 Subject: [PATCH 12/18] adding javadoc --- .../containers/ComposeContainer.java | 28 ++++++++++++++++++- .../containers/DockerComposeContainer.java | 28 +++++++++++++++++++ .../containers/ComposeContainerTest.java | 3 -- 3 files changed, 55 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java index 9f683c565da..3d6471a6eb8 100644 --- a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java @@ -67,19 +67,45 @@ public class ComposeContainer implements Startable { private String project; private List filesInDirectory = new ArrayList<>(); - + /** + * Creates a new ComposeContainer with a random identifier 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 with a random identifier 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 compose files. + * This is the primary constructor that all other constructors delegate to. + * + * @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) { this.composeDelegate = new ComposeDelegate(ComposeDelegate.ComposeVersion.V2, composeFiles, identifier, COMPOSE_EXECUTABLE, image); diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index 6187595688f..d453ceb115c 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -65,18 +65,46 @@ public class DockerComposeContainer> i private List filesInDirectory = new ArrayList<>(); + /** + * 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 a random identifier 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 compose files. + * This is the primary constructor that all other constructors delegate to. + * + * @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); diff --git a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java index ffcfe67fd0e..0f94f8acc7f 100644 --- a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java +++ b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java @@ -3,7 +3,6 @@ import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.AppenderBase; -import com.google.common.collect.Lists; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -12,10 +11,8 @@ import org.testcontainers.utility.TestcontainersConfiguration; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; From 0342c412f13e0c8f448dc6223d976e006735802c Mon Sep 17 00:00:00 2001 From: Fokion Sotiropoulos Date: Sun, 6 Apr 2025 14:25:23 +0100 Subject: [PATCH 13/18] fix tests apply spotless --- .../containers/ComposeContainer.java | 2 +- .../containers/DockerComposeContainer.java | 1 - .../containers/ComposeContainerTest.java | 16 +++++----------- .../DockerComposeContainerCustomImageTest.java | 15 ++++++++++----- 4 files changed, 16 insertions(+), 18 deletions(-) diff --git a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java index 3d6471a6eb8..020b6772c34 100644 --- a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java @@ -11,7 +11,6 @@ import org.testcontainers.lifecycle.Startable; import org.testcontainers.utility.Base58; import org.testcontainers.utility.DockerImageName; -import org.testcontainers.utility.TestcontainersConfiguration; import java.io.File; import java.time.Duration; @@ -67,6 +66,7 @@ public class ComposeContainer implements Startable { private String project; private List filesInDirectory = new ArrayList<>(); + /** * Creates a new ComposeContainer with a random identifier using the specified Docker image and compose files. * diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index d453ceb115c..074ffc69a89 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -147,7 +147,6 @@ public DockerComposeContainer(String identifier, File... composeFiles) { this(identifier, Arrays.asList(composeFiles)); } - /** * @deprecated * Use the new constructor DockerComposeContainer(String identifier,List composeFiles) diff --git a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java index 0f94f8acc7f..0117096fb4d 100644 --- a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java +++ b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java @@ -33,11 +33,11 @@ public void setup() { rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); rootLogger.addAppender(testLogAppender); TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", DOCKER_IMAGE); - composeContainer.stop(); } @After public void tearDown() { + composeContainer.stop(); rootLogger.detachAppender(testLogAppender); TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", ""); System.clearProperty("compose.container.image"); @@ -45,18 +45,15 @@ public void tearDown() { @Test public void testWithCustomDockerImage() { - composeContainer = new ComposeContainer( - DockerImageName.parse(DOCKER_IMAGE), new File(COMPOSE_FILE_PATH) - ); + composeContainer = new ComposeContainer(DockerImageName.parse(DOCKER_IMAGE), new File(COMPOSE_FILE_PATH)); composeContainer.start(); verifyContainerCreation(); } @Test public void testWithCustomDockerImageAndIdentifier() { - composeContainer = new ComposeContainer( - DockerImageName.parse(DOCKER_IMAGE), "myidentifier", new File(COMPOSE_FILE_PATH) - ); + composeContainer = + new ComposeContainer(DockerImageName.parse(DOCKER_IMAGE), "myidentifier", new File(COMPOSE_FILE_PATH)); composeContainer.start(); verifyContainerCreation(); } @@ -64,12 +61,9 @@ public void testWithCustomDockerImageAndIdentifier() { private void verifyContainerCreation() { List logs = testLogAppender.getLogs(); - assertThat(logs) - .isNotNull() - .anyMatch(line -> line.contains("Creating container for image: " + DOCKER_IMAGE)); + assertThat(logs).isNotNull().anyMatch(line -> line.contains("Creating container for image: " + DOCKER_IMAGE)); } - private static class TestLogAppender extends AppenderBase { private final List logs = new ArrayList<>(); diff --git a/core/src/test/java/org/testcontainers/containers/DockerComposeContainerCustomImageTest.java b/core/src/test/java/org/testcontainers/containers/DockerComposeContainerCustomImageTest.java index ba1faa019e0..e861e9a6bad 100644 --- a/core/src/test/java/org/testcontainers/containers/DockerComposeContainerCustomImageTest.java +++ b/core/src/test/java/org/testcontainers/containers/DockerComposeContainerCustomImageTest.java @@ -17,6 +17,7 @@ import static org.assertj.core.api.Assertions.assertThat; public class DockerComposeContainerCustomImageTest { + public static final String DOCKER_IMAGE = "docker/compose:debian-1.29.2"; private static final String COMPOSE_FILE_PATH = "src/test/resources/docker-compose-imagename-parsing-v1.yml"; @@ -43,14 +44,20 @@ public void tearDown() { @Test public void testWithCustomDockerImage() { - composeContainer = new DockerComposeContainer(DockerImageName.parse(DOCKER_IMAGE),"testing", new File(COMPOSE_FILE_PATH)); + composeContainer = + new DockerComposeContainer(DockerImageName.parse(DOCKER_IMAGE), "testing", new File(COMPOSE_FILE_PATH)); composeContainer.start(); verifyContainerCreation(); } @Test public void testWithCustomDockerImageAndIdentifier() { - composeContainer = new DockerComposeContainer(DockerImageName.parse(DOCKER_IMAGE), "myidentifier", new File(COMPOSE_FILE_PATH)); + composeContainer = + new DockerComposeContainer( + DockerImageName.parse(DOCKER_IMAGE), + "myidentifier", + new File(COMPOSE_FILE_PATH) + ); composeContainer.start(); verifyContainerCreation(); } @@ -58,9 +65,7 @@ public void testWithCustomDockerImageAndIdentifier() { private void verifyContainerCreation() { List logs = testLogAppender.getLogs(); - assertThat(logs) - .isNotNull() - .anyMatch(line -> line.contains("Creating container for image: " + DOCKER_IMAGE)); + assertThat(logs).isNotNull().anyMatch(line -> line.contains("Creating container for image: " + DOCKER_IMAGE)); } private static class TestLogAppender extends AppenderBase { From 5ef8e2a6e46cd6538ffa767d0de8e269181368b8 Mon Sep 17 00:00:00 2001 From: Fokion Sotiropoulos Date: Sun, 6 Apr 2025 14:50:20 +0100 Subject: [PATCH 14/18] fixing checkstyle issues --- .../org/testcontainers/containers/ComposeContainerTest.java | 2 ++ .../containers/DockerComposeContainerCustomImageTest.java | 3 +++ 2 files changed, 5 insertions(+) diff --git a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java index 0117096fb4d..81c056af823 100644 --- a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java +++ b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java @@ -19,9 +19,11 @@ public class ComposeContainerTest { public static final String DOCKER_IMAGE = "docker:25.0.2"; + private static final String COMPOSE_FILE_PATH = "src/test/resources/docker-compose-imagename-parsing-v2.yml"; private ComposeContainer composeContainer; + private TestLogAppender testLogAppender; private Logger rootLogger; diff --git a/core/src/test/java/org/testcontainers/containers/DockerComposeContainerCustomImageTest.java b/core/src/test/java/org/testcontainers/containers/DockerComposeContainerCustomImageTest.java index e861e9a6bad..cfdff3a18d0 100644 --- a/core/src/test/java/org/testcontainers/containers/DockerComposeContainerCustomImageTest.java +++ b/core/src/test/java/org/testcontainers/containers/DockerComposeContainerCustomImageTest.java @@ -19,10 +19,13 @@ public class DockerComposeContainerCustomImageTest { public static final String DOCKER_IMAGE = "docker/compose:debian-1.29.2"; + private static final String COMPOSE_FILE_PATH = "src/test/resources/docker-compose-imagename-parsing-v1.yml"; private DockerComposeContainer composeContainer; + private TestLogAppender testLogAppender; + private Logger rootLogger; @Before From ee13d7d565e7361beaa5362a144b6342bbf944df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Mon, 18 Aug 2025 16:49:45 -0600 Subject: [PATCH 15/18] Polish --- .../containers/ComposeContainer.java | 50 +++++----- .../containers/DockerComposeContainer.java | 57 ++++++------ .../utility/TestcontainersConfiguration.java | 2 +- .../containers/ComposeContainerTest.java | 87 ++++++----------- .../ComposeContainerWithServicesTest.java | 41 ++++++-- .../containers/ComposeOverridesTest.java | 71 +++++++------- .../containers/ComposeProfilesOptionTest.java | 22 +++-- ...DockerComposeContainerCustomImageTest.java | 93 ++++++------------- ...ockerComposeContainerWithServicesTest.java | 51 ++++++++-- .../DockerComposeOverridesTest.java | 72 +++++++------- .../DockerComposeProfilesOptionTest.java | 26 +++--- .../testcontainers/junit/BaseComposeTest.java | 2 +- .../junit/BaseDockerComposeTest.java | 7 +- .../junit/ComposeContainerOverrideTest.java | 11 ++- .../junit/ComposeContainerPortViaEnvTest.java | 2 + .../junit/ComposeContainerScalingTest.java | 2 + .../junit/ComposeContainerTest.java | 6 +- .../ComposeContainerVolumeRemovalTest.java | 3 +- .../junit/ComposeContainerWithBuildTest.java | 3 +- .../ComposeContainerWithCopyFilesTest.java | 5 + .../ComposeContainerWithOptionsTest.java | 17 ++-- .../ComposeContainerWithWaitStrategies.java | 11 ++- .../junit/ComposeErrorHandlingTest.java | 6 +- .../junit/ComposePassthroughTest.java | 2 + .../junit/ComposeWaitStrategyTest.java | 7 +- .../junit/ComposeWithIdentifierTest.java | 2 + .../junit/ComposeWithNetworkTest.java | 2 + .../DockerComposeContainerPortViaEnvTest.java | 2 + .../DockerComposeContainerScalingTest.java | 2 + .../junit/DockerComposeContainerTest.java | 3 + ...ckerComposeContainerVolumeRemovalTest.java | 6 +- .../DockerComposeContainerWithBuildTest.java | 6 +- ...ckerComposeContainerWithCopyFilesTest.java | 4 + ...DockerComposeContainerWithOptionsTest.java | 19 ++-- .../junit/DockerComposeErrorHandlingTest.java | 2 + .../junit/DockerComposeLocalImageTest.java | 2 + .../junit/DockerComposeLogConsumerTest.java | 2 + .../junit/DockerComposePassthroughTest.java | 2 + .../junit/DockerComposeServiceTest.java | 2 + .../junit/DockerComposeV2FormatTest.java | 2 + ...ckerComposeV2FormatWithIdentifierTest.java | 2 + .../junit/DockerComposeV2WithNetworkTest.java | 2 + .../junit/DockerComposeWaitStrategyTest.java | 7 +- .../utility/AuthenticatedImagePullTest.java | 7 +- .../jupiter/DockerComposeContainerTests.java | 2 + .../spock/ComposeContainerIT.groovy | 2 + .../spock/SharedComposeContainerIT.groovy | 2 + 47 files changed, 419 insertions(+), 319 deletions(-) diff --git a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java index 020b6772c34..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; @@ -68,7 +69,7 @@ public class ComposeContainer implements Startable { private List filesInDirectory = new ArrayList<>(); /** - * Creates a new ComposeContainer with a random identifier using the specified Docker image and compose files. + * 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 @@ -78,7 +79,7 @@ public ComposeContainer(DockerImageName image, File... composeFiles) { } /** - * Creates a new ComposeContainer with a random identifier using the specified Docker image and compose files. + * 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 @@ -98,54 +99,61 @@ public ComposeContainer(DockerImageName image, String identifier, File... compos 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. - * This is the primary constructor that all other constructors delegate to. * * @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(); } /** - * @deprecated - * Use the new constructor ComposeContainer(DockerImageName image, File... composeFiles) + * Use the new constructor {@link #ComposeContainer(DockerImageName image, File... composeFiles)} */ - @Deprecated public ComposeContainer(File... composeFiles) { this(DEFAULT_IMAGE_NAME, Arrays.asList(composeFiles)); + this.localCompose = true; } /** - * @deprecated - * Use the new constructor ComposeContainer(DockerImageName image,List composeFiles) + * Use the new constructor {@link #ComposeContainer(DockerImageName image, List composeFiles)} */ - @Deprecated public ComposeContainer(List composeFiles) { this(DEFAULT_IMAGE_NAME, composeFiles); + this.localCompose = true; } /** - * @deprecated - * Use the new constructor ComposeContainer(DockerImageName image, String identifier, File... composeFile) + * Use the new constructor {@link #ComposeContainer(DockerImageName image, String identifier, File... composeFile)} */ - @Deprecated public ComposeContainer(String identifier, File... composeFiles) { this(DEFAULT_IMAGE_NAME, identifier, Arrays.asList(composeFiles)); + this.localCompose = true; } /** - * @deprecated - * Use the new constructor ComposeContainer(DockerImageName image,String identifier, List composeFiles) + * Use the new constructor {@link #ComposeContainer(DockerImageName image, String identifier, List composeFiles)} */ - @Deprecated public ComposeContainer(String identifier, List composeFiles) { this(DEFAULT_IMAGE_NAME, identifier, composeFiles); + this.localCompose = true; } @Override @@ -291,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 074ffc69a89..bfdaf169dd5 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -66,18 +66,17 @@ public class DockerComposeContainer> i private List filesInDirectory = new ArrayList<>(); /** - * Creates a new DockerComposeContainer with the specified Docker image, identifier, and a single compose file. + * Creates a new DockerComposeContainer using the specified Docker image and compose files. * * @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 + * @param composeFiles One or more Docker Compose configuration files */ - public DockerComposeContainer(DockerImageName image, String identifier, File composeFile) { - this(image, identifier, Collections.singletonList(composeFile)); + public DockerComposeContainer(DockerImageName image, File... composeFiles) { + this(image, Arrays.asList(composeFiles)); } /** - * Creates a new DockerComposeContainer with a random identifier using the specified Docker image and compose files. + * 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 @@ -97,9 +96,19 @@ public DockerComposeContainer(DockerImageName image, String identifier, File... 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. - * This is the primary constructor that all other constructors delegate to. * * @param image The Docker image to use for the container * @param identifier A unique identifier for this compose environment @@ -112,46 +121,41 @@ public DockerComposeContainer(DockerImageName image, String identifier, List composeFiles) { this(Base58.randomString(6).toLowerCase(), composeFiles); + this.localCompose = true; } /** - * @deprecated - * Use the new constructor DockerComposeContainer(String identifier,File... composeFiles) + * Use the new constructor {@link #DockerComposeContainer(DockerImageName image, String identifier, File... composeFiles)} */ - @Deprecated public DockerComposeContainer(String identifier, File... composeFiles) { this(identifier, Arrays.asList(composeFiles)); + this.localCompose = true; } /** - * @deprecated - * Use the new constructor DockerComposeContainer(String identifier,List composeFiles) + * Use the new constructor {@link #DockerComposeContainer(DockerImageName image, String identifier, List composeFiles)} */ - @Deprecated public DockerComposeContainer(String identifier, List composeFiles) { this.composeDelegate = new ComposeDelegate( @@ -162,6 +166,7 @@ public DockerComposeContainer(String identifier, List composeFiles) { DockerImageName.parse("docker/compose:1.29.2") ); this.project = this.composeDelegate.getProject(); + this.localCompose = true; } @Override @@ -303,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/main/java/org/testcontainers/utility/TestcontainersConfiguration.java b/core/src/main/java/org/testcontainers/utility/TestcontainersConfiguration.java index 47954ea7624..5c80b82ba9c 100644 --- a/core/src/main/java/org/testcontainers/utility/TestcontainersConfiguration.java +++ b/core/src/main/java/org/testcontainers/utility/TestcontainersConfiguration.java @@ -244,7 +244,7 @@ private String getConfigurable( } for (final Properties properties : propertiesSources) { - if (properties.get(propertyName) != null && !properties.get(propertyName).toString().trim().isEmpty()) { + if (properties.get(propertyName) != null) { return (String) properties.get(propertyName); } } diff --git a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java index 81c056af823..cee985d36df 100644 --- a/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java +++ b/core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java @@ -1,82 +1,49 @@ package org.testcontainers.containers; -import ch.qos.logback.classic.Logger; -import ch.qos.logback.classic.spi.ILoggingEvent; -import ch.qos.logback.core.AppenderBase; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.slf4j.LoggerFactory; +import org.junit.jupiter.api.Test; import org.testcontainers.utility.DockerImageName; -import org.testcontainers.utility.TestcontainersConfiguration; import java.io.File; -import java.util.ArrayList; -import java.util.List; +import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; -public class ComposeContainerTest { +class ComposeContainerTest { public static final String DOCKER_IMAGE = "docker:25.0.2"; - private static final String COMPOSE_FILE_PATH = "src/test/resources/docker-compose-imagename-parsing-v2.yml"; - - private ComposeContainer composeContainer; - - private TestLogAppender testLogAppender; - - private Logger rootLogger; - - @Before - public void setup() { - testLogAppender = new TestLogAppender(); - testLogAppender.start(); - rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); - rootLogger.addAppender(testLogAppender); - TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", DOCKER_IMAGE); - } - - @After - public void tearDown() { - composeContainer.stop(); - rootLogger.detachAppender(testLogAppender); - TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", ""); - System.clearProperty("compose.container.image"); - } + private static final String COMPOSE_FILE_PATH = "src/test/resources/v2-compose-test.yml"; @Test - public void testWithCustomDockerImage() { - composeContainer = new ComposeContainer(DockerImageName.parse(DOCKER_IMAGE), new File(COMPOSE_FILE_PATH)); + void testWithCustomDockerImage() { + ComposeContainer composeContainer = new ComposeContainer( + DockerImageName.parse(DOCKER_IMAGE), + new File(COMPOSE_FILE_PATH) + ); composeContainer.start(); - verifyContainerCreation(); + verifyContainerCreation(composeContainer); + composeContainer.stop(); } @Test - public void testWithCustomDockerImageAndIdentifier() { - composeContainer = - new ComposeContainer(DockerImageName.parse(DOCKER_IMAGE), "myidentifier", new File(COMPOSE_FILE_PATH)); + void testWithCustomDockerImageAndIdentifier() { + ComposeContainer composeContainer = new ComposeContainer( + DockerImageName.parse(DOCKER_IMAGE), + "myidentifier", + new File(COMPOSE_FILE_PATH) + ); composeContainer.start(); - verifyContainerCreation(); - } - - private void verifyContainerCreation() { - List logs = testLogAppender.getLogs(); - - assertThat(logs).isNotNull().anyMatch(line -> line.contains("Creating container for image: " + DOCKER_IMAGE)); + verifyContainerCreation(composeContainer); + composeContainer.stop(); } - private static class TestLogAppender extends AppenderBase { - - private final List logs = new ArrayList<>(); - - @Override - protected void append(ILoggingEvent eventObject) { - logs.add(eventObject.getFormattedMessage()); - } - - public List getLogs() { - return logs; - } + 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 index cfdff3a18d0..46ee86a8c23 100644 --- a/core/src/test/java/org/testcontainers/containers/DockerComposeContainerCustomImageTest.java +++ b/core/src/test/java/org/testcontainers/containers/DockerComposeContainerCustomImageTest.java @@ -1,87 +1,50 @@ package org.testcontainers.containers; -import ch.qos.logback.classic.Logger; -import ch.qos.logback.classic.spi.ILoggingEvent; -import ch.qos.logback.core.AppenderBase; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.slf4j.LoggerFactory; +import org.junit.jupiter.api.Test; import org.testcontainers.utility.DockerImageName; -import org.testcontainers.utility.TestcontainersConfiguration; import java.io.File; -import java.util.ArrayList; -import java.util.List; +import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; -public class DockerComposeContainerCustomImageTest { +class DockerComposeContainerCustomImageTest { public static final String DOCKER_IMAGE = "docker/compose:debian-1.29.2"; - private static final String COMPOSE_FILE_PATH = "src/test/resources/docker-compose-imagename-parsing-v1.yml"; - - private DockerComposeContainer composeContainer; - - private TestLogAppender testLogAppender; - - private Logger rootLogger; - - @Before - public void setup() { - testLogAppender = new TestLogAppender(); - testLogAppender.start(); - rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); - rootLogger.addAppender(testLogAppender); - TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", DOCKER_IMAGE); - } - - @After - public void tearDown() { - rootLogger.detachAppender(testLogAppender); - TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", ""); - System.clearProperty("compose.container.image"); - composeContainer.stop(); - } + private static final String COMPOSE_FILE_PATH = "src/test/resources/scaled-compose-test.yml"; @Test - public void testWithCustomDockerImage() { - composeContainer = - new DockerComposeContainer(DockerImageName.parse(DOCKER_IMAGE), "testing", new File(COMPOSE_FILE_PATH)); + void testWithCustomDockerImage() { + DockerComposeContainer composeContainer = new DockerComposeContainer<>( + DockerImageName.parse(DOCKER_IMAGE), + "testing", + new File(COMPOSE_FILE_PATH) + ); composeContainer.start(); - verifyContainerCreation(); + verifyContainerCreation(composeContainer); + composeContainer.stop(); } @Test - public void testWithCustomDockerImageAndIdentifier() { - composeContainer = - new DockerComposeContainer( - DockerImageName.parse(DOCKER_IMAGE), - "myidentifier", - new File(COMPOSE_FILE_PATH) - ); + void testWithCustomDockerImageAndIdentifier() { + DockerComposeContainer composeContainer = new DockerComposeContainer( + DockerImageName.parse(DOCKER_IMAGE), + "myidentifier", + new File(COMPOSE_FILE_PATH) + ); composeContainer.start(); - verifyContainerCreation(); - } - - private void verifyContainerCreation() { - List logs = testLogAppender.getLogs(); - - assertThat(logs).isNotNull().anyMatch(line -> line.contains("Creating container for image: " + DOCKER_IMAGE)); + verifyContainerCreation(composeContainer); + composeContainer.stop(); } - private static class TestLogAppender extends AppenderBase { - - private final List logs = new ArrayList<>(); - - @Override - protected void append(ILoggingEvent eventObject) { - logs.add(eventObject.getFormattedMessage()); - } - - public List getLogs() { - return logs; - } + 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..4ace95a7a3c 100644 --- a/core/src/test/java/org/testcontainers/junit/BaseDockerComposeTest.java +++ b/core/src/test/java/org/testcontainers/junit/BaseDockerComposeTest.java @@ -2,12 +2,12 @@ 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; import org.testcontainers.DockerClientFactory; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.CommandLine; import org.testcontainers.utility.TestEnvironment; import redis.clients.jedis.Jedis; @@ -16,6 +16,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 +31,9 @@ public abstract class BaseDockerComposeTest { @BeforeAll public static void checkVersion() { - Assumptions.assumeTrue(TestEnvironment.dockerApiAtLeast("1.22")); + assumeThat(TestEnvironment.dockerApiAtLeast("1.22")).isTrue(); + assumeThat(CommandLine.runShellCommand("docker-compose", "--version")) + .doesNotStartWith("Docker Compose version v2"); } @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..0fbb0388ceb 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.AutoClose; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -9,6 +10,7 @@ class DockerComposeContainerPortViaEnvTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( + 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/DockerComposeContainerScalingTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerScalingTest.java index 90256bb0f37..b7ca67b6292 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:24.0.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..dc9a7e924f7 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerTest.java @@ -4,6 +4,7 @@ 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; @@ -21,6 +22,7 @@ class DockerComposeContainerTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( + DockerImageName.parse("docker:24.0.2"), new File("src/test/resources/compose-test.yml") ) .withExposedService("redis_1", REDIS_PORT) @@ -96,6 +98,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..9d7e0151864 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:24.0.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..4d0966bf370 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:24.0.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..b689247c1fe 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:24.0.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:24.0.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: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/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..598e42e87ef 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:24.0.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..9d05b9e0ee2 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:24.0.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..c1e553d18cf 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:24.0.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..5b67121d488 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: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/DockerComposeServiceTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java index 2496b7ee0bc..f45765d0f66 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java @@ -3,6 +3,7 @@ import org.junit.jupiter.api.AutoClose; import org.junit.jupiter.api.Test; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -13,6 +14,7 @@ class DockerComposeServiceTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( + DockerImageName.parse("docker:24.0.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..ab0ee3dc9e4 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatTest.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.AutoClose; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -12,6 +13,7 @@ class DockerComposeV2FormatTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( + DockerImageName.parse("docker:24.0.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..a9ccb5be322 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatWithIdentifierTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatWithIdentifierTest.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.AutoClose; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -9,6 +10,7 @@ class DockerComposeV2FormatWithIdentifierTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( + 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/DockerComposeV2WithNetworkTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java index bc95f0229b7..4539afbb498 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.AutoClose; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -9,6 +10,7 @@ class DockerComposeV2WithNetworkTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( + 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/DockerComposeWaitStrategyTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeWaitStrategyTest.java index 9f8c2c9ab49..275883c6e2b 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:24.0.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..4b2c79b14ea 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:24.0.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..de4a1e0097c 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:24.0.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("/")) From fdd303ef6464c006c1b7f4d552efa6ee3c9c1b6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Thu, 9 Oct 2025 22:10:43 -0600 Subject: [PATCH 16/18] Add assumptions --- .../java/org/testcontainers/junit/BaseDockerComposeTest.java | 3 --- .../junit/DockerComposeContainerPortViaEnvTest.java | 5 +++++ .../org/testcontainers/junit/DockerComposeContainerTest.java | 4 ++++ .../org/testcontainers/junit/DockerComposeServiceTest.java | 4 ++++ .../org/testcontainers/junit/DockerComposeV2FormatTest.java | 5 +++++ .../junit/DockerComposeV2FormatWithIdentifierTest.java | 5 +++++ .../testcontainers/junit/DockerComposeV2WithNetworkTest.java | 5 +++++ 7 files changed, 28 insertions(+), 3 deletions(-) diff --git a/core/src/test/java/org/testcontainers/junit/BaseDockerComposeTest.java b/core/src/test/java/org/testcontainers/junit/BaseDockerComposeTest.java index 4ace95a7a3c..58459c2d807 100644 --- a/core/src/test/java/org/testcontainers/junit/BaseDockerComposeTest.java +++ b/core/src/test/java/org/testcontainers/junit/BaseDockerComposeTest.java @@ -7,7 +7,6 @@ import org.junit.jupiter.api.Test; import org.testcontainers.DockerClientFactory; import org.testcontainers.containers.DockerComposeContainer; -import org.testcontainers.utility.CommandLine; import org.testcontainers.utility.TestEnvironment; import redis.clients.jedis.Jedis; @@ -32,8 +31,6 @@ public abstract class BaseDockerComposeTest { @BeforeAll public static void checkVersion() { assumeThat(TestEnvironment.dockerApiAtLeast("1.22")).isTrue(); - assumeThat(CommandLine.runShellCommand("docker-compose", "--version")) - .doesNotStartWith("Docker Compose version v2"); } @Test diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java index 0fbb0388ceb..50c97ceda49 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java @@ -2,10 +2,13 @@ import org.junit.jupiter.api.AutoClose; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.CommandLine; import org.testcontainers.utility.DockerImageName; import java.io.File; +import static org.assertj.core.api.Assumptions.assumeThat; + class DockerComposeContainerPortViaEnvTest extends BaseDockerComposeTest { @AutoClose @@ -17,6 +20,8 @@ class DockerComposeContainerPortViaEnvTest extends BaseDockerComposeTest { .withEnv("REDIS_PORT", String.valueOf(REDIS_PORT)); DockerComposeContainerPortViaEnvTest() { + assumeThat(CommandLine.runShellCommand("docker-compose", "--version")) + .doesNotStartWith("Docker Compose version v2"); environment.start(); } diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerTest.java index dc9a7e924f7..75a9bb61032 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import org.testcontainers.containers.ContainerState; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.CommandLine; import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -14,6 +15,7 @@ import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assumptions.assumeThat; /** * Created by rnorth on 08/08/2015. @@ -29,6 +31,8 @@ class DockerComposeContainerTest extends BaseDockerComposeTest { .withExposedService("db_1", 3306); DockerComposeContainerTest() { + assumeThat(CommandLine.runShellCommand("docker-compose", "--version")) + .doesNotStartWith("Docker Compose version v2"); environment.start(); } diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java index f45765d0f66..ba7e545fd08 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java @@ -3,12 +3,14 @@ import org.junit.jupiter.api.AutoClose; import org.junit.jupiter.api.Test; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.CommandLine; 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; +import static org.assertj.core.api.Assumptions.assumeThat; class DockerComposeServiceTest extends BaseDockerComposeTest { @@ -21,6 +23,8 @@ class DockerComposeServiceTest extends BaseDockerComposeTest { .withExposedService("redis_1", REDIS_PORT); DockerComposeServiceTest() { + assumeThat(CommandLine.runShellCommand("docker-compose", "--version")) + .doesNotStartWith("Docker Compose version v2"); environment.start(); } diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatTest.java index ab0ee3dc9e4..5dce0323745 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatTest.java @@ -2,10 +2,13 @@ import org.junit.jupiter.api.AutoClose; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.CommandLine; import org.testcontainers.utility.DockerImageName; import java.io.File; +import static org.assertj.core.api.Assumptions.assumeThat; + /** * Created by rnorth on 21/05/2016. */ @@ -19,6 +22,8 @@ class DockerComposeV2FormatTest extends BaseDockerComposeTest { .withExposedService("redis_1", REDIS_PORT); DockerComposeV2FormatTest() { + assumeThat(CommandLine.runShellCommand("docker-compose", "--version")) + .doesNotStartWith("Docker Compose version v2"); environment.start(); } diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatWithIdentifierTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatWithIdentifierTest.java index a9ccb5be322..c6b3545cdca 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatWithIdentifierTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatWithIdentifierTest.java @@ -2,10 +2,13 @@ import org.junit.jupiter.api.AutoClose; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.CommandLine; import org.testcontainers.utility.DockerImageName; import java.io.File; +import static org.assertj.core.api.Assumptions.assumeThat; + class DockerComposeV2FormatWithIdentifierTest extends BaseDockerComposeTest { @AutoClose @@ -17,6 +20,8 @@ class DockerComposeV2FormatWithIdentifierTest extends BaseDockerComposeTest { .withExposedService("redis_1", REDIS_PORT); DockerComposeV2FormatWithIdentifierTest() { + assumeThat(CommandLine.runShellCommand("docker-compose", "--version")) + .doesNotStartWith("Docker Compose version v2"); environment.start(); } diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java index 4539afbb498..89a588b2f5a 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java @@ -2,10 +2,13 @@ import org.junit.jupiter.api.AutoClose; import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.CommandLine; import org.testcontainers.utility.DockerImageName; import java.io.File; +import static org.assertj.core.api.Assumptions.assumeThat; + class DockerComposeV2WithNetworkTest extends BaseDockerComposeTest { @AutoClose @@ -16,6 +19,8 @@ class DockerComposeV2WithNetworkTest extends BaseDockerComposeTest { .withExposedService("redis_1", REDIS_PORT); DockerComposeV2WithNetworkTest() { + assumeThat(CommandLine.runShellCommand("docker-compose", "--version")) + .doesNotStartWith("Docker Compose version v2"); environment.start(); } From 47304c506456bf6c850caaeb997b2c25a8ccb757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Thu, 9 Oct 2025 22:21:58 -0600 Subject: [PATCH 17/18] disable tests --- .../junit/DockerComposeContainerPortViaEnvTest.java | 7 ++----- .../testcontainers/junit/DockerComposeContainerTest.java | 6 ++---- .../org/testcontainers/junit/DockerComposeServiceTest.java | 6 ++---- .../testcontainers/junit/DockerComposeV2FormatTest.java | 7 ++----- .../junit/DockerComposeV2FormatWithIdentifierTest.java | 7 ++----- .../junit/DockerComposeV2WithNetworkTest.java | 7 ++----- 6 files changed, 12 insertions(+), 28 deletions(-) diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java index 50c97ceda49..e7f04c1acb7 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java @@ -1,14 +1,13 @@ 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.CommandLine; import org.testcontainers.utility.DockerImageName; import java.io.File; -import static org.assertj.core.api.Assumptions.assumeThat; - +@Disabled class DockerComposeContainerPortViaEnvTest extends BaseDockerComposeTest { @AutoClose @@ -20,8 +19,6 @@ class DockerComposeContainerPortViaEnvTest extends BaseDockerComposeTest { .withEnv("REDIS_PORT", String.valueOf(REDIS_PORT)); DockerComposeContainerPortViaEnvTest() { - assumeThat(CommandLine.runShellCommand("docker-compose", "--version")) - .doesNotStartWith("Docker Compose version v2"); environment.start(); } diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerTest.java index 75a9bb61032..54bfbeb8959 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerTest.java @@ -1,10 +1,10 @@ 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.CommandLine; import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -15,11 +15,11 @@ import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assumptions.assumeThat; /** * Created by rnorth on 08/08/2015. */ +@Disabled class DockerComposeContainerTest extends BaseDockerComposeTest { @AutoClose @@ -31,8 +31,6 @@ class DockerComposeContainerTest extends BaseDockerComposeTest { .withExposedService("db_1", 3306); DockerComposeContainerTest() { - assumeThat(CommandLine.runShellCommand("docker-compose", "--version")) - .doesNotStartWith("Docker Compose version v2"); environment.start(); } diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java index ba7e545fd08..df3d2a0009d 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java @@ -1,17 +1,17 @@ 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.CommandLine; 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; -import static org.assertj.core.api.Assumptions.assumeThat; +@Disabled class DockerComposeServiceTest extends BaseDockerComposeTest { @AutoClose @@ -23,8 +23,6 @@ class DockerComposeServiceTest extends BaseDockerComposeTest { .withExposedService("redis_1", REDIS_PORT); DockerComposeServiceTest() { - assumeThat(CommandLine.runShellCommand("docker-compose", "--version")) - .doesNotStartWith("Docker Compose version v2"); environment.start(); } diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatTest.java index 5dce0323745..8d11f41de67 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatTest.java @@ -1,17 +1,16 @@ 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.CommandLine; import org.testcontainers.utility.DockerImageName; import java.io.File; -import static org.assertj.core.api.Assumptions.assumeThat; - /** * Created by rnorth on 21/05/2016. */ +@Disabled class DockerComposeV2FormatTest extends BaseDockerComposeTest { @AutoClose @@ -22,8 +21,6 @@ class DockerComposeV2FormatTest extends BaseDockerComposeTest { .withExposedService("redis_1", REDIS_PORT); DockerComposeV2FormatTest() { - assumeThat(CommandLine.runShellCommand("docker-compose", "--version")) - .doesNotStartWith("Docker Compose version v2"); environment.start(); } diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatWithIdentifierTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatWithIdentifierTest.java index c6b3545cdca..be823903002 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatWithIdentifierTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatWithIdentifierTest.java @@ -1,14 +1,13 @@ 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.CommandLine; import org.testcontainers.utility.DockerImageName; import java.io.File; -import static org.assertj.core.api.Assumptions.assumeThat; - +@Disabled class DockerComposeV2FormatWithIdentifierTest extends BaseDockerComposeTest { @AutoClose @@ -20,8 +19,6 @@ class DockerComposeV2FormatWithIdentifierTest extends BaseDockerComposeTest { .withExposedService("redis_1", REDIS_PORT); DockerComposeV2FormatWithIdentifierTest() { - assumeThat(CommandLine.runShellCommand("docker-compose", "--version")) - .doesNotStartWith("Docker Compose version v2"); environment.start(); } diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java index 89a588b2f5a..8deae5784c9 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java @@ -1,14 +1,13 @@ 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.CommandLine; import org.testcontainers.utility.DockerImageName; import java.io.File; -import static org.assertj.core.api.Assumptions.assumeThat; - +@Disabled class DockerComposeV2WithNetworkTest extends BaseDockerComposeTest { @AutoClose @@ -19,8 +18,6 @@ class DockerComposeV2WithNetworkTest extends BaseDockerComposeTest { .withExposedService("redis_1", REDIS_PORT); DockerComposeV2WithNetworkTest() { - assumeThat(CommandLine.runShellCommand("docker-compose", "--version")) - .doesNotStartWith("Docker Compose version v2"); environment.start(); } From 093389bdd3f4819efcdeb24a0227201bb3d0ed15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Thu, 9 Oct 2025 22:35:42 -0600 Subject: [PATCH 18/18] Fix docker compose image --- .../junit/DockerComposeContainerPortViaEnvTest.java | 2 +- .../junit/DockerComposeContainerScalingTest.java | 2 +- .../testcontainers/junit/DockerComposeContainerTest.java | 2 +- .../junit/DockerComposeContainerVolumeRemovalTest.java | 2 +- .../junit/DockerComposeContainerWithBuildTest.java | 2 +- .../junit/DockerComposeContainerWithCopyFilesTest.java | 6 +++--- .../junit/DockerComposeErrorHandlingTest.java | 2 +- .../testcontainers/junit/DockerComposeLocalImageTest.java | 2 +- .../testcontainers/junit/DockerComposeLogConsumerTest.java | 2 +- .../testcontainers/junit/DockerComposePassthroughTest.java | 2 +- .../org/testcontainers/junit/DockerComposeServiceTest.java | 2 +- .../org/testcontainers/junit/DockerComposeV2FormatTest.java | 2 +- .../junit/DockerComposeV2FormatWithIdentifierTest.java | 2 +- .../junit/DockerComposeV2WithNetworkTest.java | 2 +- .../testcontainers/junit/DockerComposeWaitStrategyTest.java | 2 +- .../testcontainers/utility/AuthenticatedImagePullTest.java | 2 +- .../junit/jupiter/DockerComposeContainerTests.java | 2 +- 17 files changed, 19 insertions(+), 19 deletions(-) diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java index e7f04c1acb7..46af463834c 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java @@ -12,7 +12,7 @@ class DockerComposeContainerPortViaEnvTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( - DockerImageName.parse("docker:24.0.2"), + 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 b7ca67b6292..d5be511f44b 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerScalingTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerScalingTest.java @@ -30,7 +30,7 @@ public static void checkVersion() { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( - DockerImageName.parse("docker:24.0.2"), + 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 54bfbeb8959..2bc855cacb2 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerTest.java @@ -24,7 +24,7 @@ class DockerComposeContainerTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( - DockerImageName.parse("docker:24.0.2"), + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/compose-test.yml") ) .withExposedService("redis_1", REDIS_PORT) diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerVolumeRemovalTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerVolumeRemovalTest.java index 9d7e0151864..2ec9a51e197 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerVolumeRemovalTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerVolumeRemovalTest.java @@ -29,7 +29,7 @@ void performTest(boolean removeVolumes, boolean shouldVolumesBePresentAfterRunni final AtomicReference volumeName = new AtomicReference<>(""); try ( DockerComposeContainer environment = new DockerComposeContainer<>( - DockerImageName.parse("docker:24.0.2"), + DockerImageName.parse("docker/compose:1.29.2"), composeFile ) .withExposedService("redis", 6379) diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithBuildTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithBuildTest.java index 4d0966bf370..4c3c69e8d76 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithBuildTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithBuildTest.java @@ -39,7 +39,7 @@ void performTest( final AtomicReference pulledImageName = new AtomicReference<>(""); try ( DockerComposeContainer environment = new DockerComposeContainer<>( - DockerImageName.parse("docker:24.0.2"), + DockerImageName.parse("docker/compose:1.29.2"), composeFile ) .withExposedService("customredis", 6379) diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithCopyFilesTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithCopyFilesTest.java index b689247c1fe..c543678faab 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithCopyFilesTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithCopyFilesTest.java @@ -16,7 +16,7 @@ class DockerComposeContainerWithCopyFilesTest { void testShouldCopyAllFilesByDefault() throws IOException { try ( DockerComposeContainer environment = new DockerComposeContainer( - DockerImageName.parse("docker:24.0.2"), + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/compose-file-copy-inclusions/compose.yml") ) .withExposedService("app", 8080) @@ -32,7 +32,7 @@ void testShouldCopyAllFilesByDefault() throws IOException { void testWithFileCopyInclusionUsingFilePath() throws IOException { try ( DockerComposeContainer environment = new DockerComposeContainer( - DockerImageName.parse("docker:24.0.2"), + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/compose-file-copy-inclusions/compose-root-only.yml") ) .withExposedService("app", 8080) @@ -51,7 +51,7 @@ void testWithFileCopyInclusionUsingFilePath() throws IOException { void testWithFileCopyInclusionUsingDirectoryPath() throws IOException { try ( DockerComposeContainer environment = new DockerComposeContainer( - DockerImageName.parse("docker:24.0.2"), + 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/DockerComposeErrorHandlingTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeErrorHandlingTest.java index 598e42e87ef..907011329ec 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeErrorHandlingTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeErrorHandlingTest.java @@ -16,7 +16,7 @@ void simpleTest() { assertThat( catchThrowable(() -> { DockerComposeContainer environment = new DockerComposeContainer( - DockerImageName.parse("docker:24.0.2"), + 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 9d05b9e0ee2..1853a2d4ff1 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeLocalImageTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeLocalImageTest.java @@ -16,7 +16,7 @@ void usesLocalImageEvenWhenPullFails() throws InterruptedException { tagImage("redis:6-alpine", "redis-local", "latest"); DockerComposeContainer composeContainer = new DockerComposeContainer( - DockerImageName.parse("docker:24.0.2"), + 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 c1e553d18cf..7f63bdce9fd 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeLogConsumerTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeLogConsumerTest.java @@ -16,7 +16,7 @@ class DockerComposeLogConsumerTest { void testLogConsumer() throws TimeoutException { WaitingConsumer logConsumer = new WaitingConsumer(); DockerComposeContainer environment = new DockerComposeContainer( - DockerImageName.parse("docker:24.0.2"), + 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 5b67121d488..a4f2707c583 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposePassthroughTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposePassthroughTest.java @@ -26,7 +26,7 @@ void testContainerInstanceProperties() { TestWaitStrategy waitStrategy = new TestWaitStrategy(); try ( DockerComposeContainer compose = new DockerComposeContainer( - DockerImageName.parse("docker:24.0.2"), + 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 df3d2a0009d..c1c295ef238 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java @@ -16,7 +16,7 @@ class DockerComposeServiceTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( - DockerImageName.parse("docker:24.0.2"), + 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 8d11f41de67..8a8f8f0da0b 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatTest.java @@ -15,7 +15,7 @@ class DockerComposeV2FormatTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( - DockerImageName.parse("docker:24.0.2"), + 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 be823903002..dd198181d41 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatWithIdentifierTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatWithIdentifierTest.java @@ -12,7 +12,7 @@ class DockerComposeV2FormatWithIdentifierTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( - DockerImageName.parse("docker:24.0.2"), + 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 8deae5784c9..2cf506059c5 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java @@ -12,7 +12,7 @@ class DockerComposeV2WithNetworkTest extends BaseDockerComposeTest { @AutoClose public DockerComposeContainer environment = new DockerComposeContainer( - DockerImageName.parse("docker:24.0.2"), + 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 275883c6e2b..6f56ef9c24a 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeWaitStrategyTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeWaitStrategyTest.java @@ -26,7 +26,7 @@ class DockerComposeWaitStrategyTest { public final void setUp() { environment = new DockerComposeContainer<>( - DockerImageName.parse("docker:24.0.2"), + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/compose-test.yml") ); } diff --git a/core/src/test/java/org/testcontainers/utility/AuthenticatedImagePullTest.java b/core/src/test/java/org/testcontainers/utility/AuthenticatedImagePullTest.java index 4b2c79b14ea..171bd9a4381 100644 --- a/core/src/test/java/org/testcontainers/utility/AuthenticatedImagePullTest.java +++ b/core/src/test/java/org/testcontainers/utility/AuthenticatedImagePullTest.java @@ -132,7 +132,7 @@ void testThatAuthLocatorIsUsedForDockerComposePull() throws IOException { // Start the docker compose project, which will require an authenticated pull try ( final DockerComposeContainer compose = new DockerComposeContainer<>( - DockerImageName.parse("docker:24.0.2"), + DockerImageName.parse("docker/compose:1.29.2"), tempFile.toFile() ) ) { 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 de4a1e0097c..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 @@ -18,7 +18,7 @@ class DockerComposeContainerTests { @Container private DockerComposeContainer composeContainer = new DockerComposeContainer( - DockerImageName.parse("docker:24.0.2"), + DockerImageName.parse("docker/compose:1.29.2"), new File("src/test/resources/docker-compose.yml") ) .withExposedService("whoami_1", 80, Wait.forHttp("/"));