Skip to content

Commit 336d72e

Browse files
committed
Check the property for compose.container.image in order to get the appropriate docker image in the ComposeContainer.
1 parent 2707f31 commit 336d72e

File tree

2 files changed

+72
-2
lines changed

2 files changed

+72
-2
lines changed

core/src/main/java/org/testcontainers/containers/ComposeContainer.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.testcontainers.lifecycle.Startable;
1414
import org.testcontainers.utility.Base58;
1515
import org.testcontainers.utility.DockerImageName;
16+
import org.testcontainers.utility.TestcontainersConfiguration;
1617

1718
import java.io.File;
1819
import java.time.Duration;
@@ -61,7 +62,7 @@ public class ComposeContainer extends FailureDetectingExternalResource implement
6162

6263
public static final String COMPOSE_EXECUTABLE = SystemUtils.IS_OS_WINDOWS ? "docker.exe" : "docker";
6364

64-
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("docker:24.0.2");
65+
public static final String DEFAULT_DOCKER_IMAGE = "docker:24.0.2";
6566

6667
private final ComposeDelegate composeDelegate;
6768

@@ -88,7 +89,7 @@ public ComposeContainer(String identifier, List<File> composeFiles) {
8889
composeFiles,
8990
identifier,
9091
COMPOSE_EXECUTABLE,
91-
DEFAULT_IMAGE_NAME
92+
DockerImageName.parse(TestcontainersConfiguration.getInstance().getEnvVarOrUserProperty("compose.container.image",DEFAULT_DOCKER_IMAGE))
9293
);
9394
this.project = this.composeDelegate.getProject();
9495
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package org.testcontainers.containers;
2+
3+
import ch.qos.logback.classic.Logger;
4+
import ch.qos.logback.classic.spi.ILoggingEvent;
5+
import ch.qos.logback.core.AppenderBase;
6+
import com.google.common.collect.Lists;
7+
import org.junit.After;
8+
import org.junit.Before;
9+
import org.junit.Test;
10+
import org.slf4j.LoggerFactory;
11+
import org.testcontainers.utility.TestcontainersConfiguration;
12+
13+
import java.io.File;
14+
import java.io.IOException;
15+
import java.nio.file.Files;
16+
import java.util.ArrayList;
17+
import java.util.List;
18+
import java.util.Optional;
19+
20+
import static org.junit.Assert.*;
21+
22+
public class ComposeContainerTest {
23+
private TestLogAppender testLogAppender;
24+
private Logger rootLogger;
25+
26+
@Before
27+
public void setup() {
28+
testLogAppender = new TestLogAppender();
29+
testLogAppender.start();
30+
rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
31+
rootLogger.addAppender(testLogAppender);
32+
}
33+
34+
@After
35+
public void tearDown() {
36+
rootLogger.detachAppender(testLogAppender);
37+
}
38+
39+
@Test
40+
public void testWithCustomDockerImage() throws IOException {
41+
TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", "docker:25.0.2");
42+
ComposeContainer composeContainer = new ComposeContainer(Lists.newArrayList(new File("src/test/resources/docker-compose-imagename-parsing-v2.yml")));
43+
composeContainer.start();
44+
System.clearProperty("compose.container.image");
45+
List<String> logs = testLogAppender.getLogs();
46+
composeContainer.stop();
47+
assertNotNull(logs);
48+
Optional<String> verification = logs.stream().filter(line -> line.contains("Creating container for image: docker:25.0.2")).findFirst();
49+
assertTrue(verification.isPresent());
50+
TestcontainersConfiguration.getInstance().updateUserConfig("compose.container.image", "");
51+
}
52+
53+
private static class TestLogAppender extends AppenderBase<ILoggingEvent> {
54+
private final List<String> logs = new ArrayList<>();
55+
56+
@Override
57+
protected void append(ILoggingEvent eventObject) {
58+
logs.add(eventObject.getFormattedMessage());
59+
}
60+
61+
public List<String> getLogs() {
62+
return logs;
63+
}
64+
65+
public void clearLogs() {
66+
logs.clear();
67+
}
68+
}
69+
}

0 commit comments

Comments
 (0)