Skip to content

Commit c070a9d

Browse files
committed
Refactor to use DockerImageName instead of String image names
1 parent 2c95200 commit c070a9d

File tree

6 files changed

+27
-18
lines changed

6 files changed

+27
-18
lines changed

core/src/main/java/org/testcontainers/DockerClientFactory.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.testcontainers.dockerclient.TransportConfig;
2626
import org.testcontainers.images.TimeLimitedLoggedPullImageResultCallback;
2727
import org.testcontainers.utility.ComparableVersion;
28+
import org.testcontainers.utility.DockerImageName;
2829
import org.testcontainers.utility.MountableFile;
2930
import org.testcontainers.utility.ResourceReaper;
3031
import org.testcontainers.utility.TestcontainersConfiguration;
@@ -323,10 +324,12 @@ private boolean checkMountableFile() {
323324
* Check whether the image is available locally and pull it otherwise
324325
*/
325326
@SneakyThrows
326-
public void checkAndPullImage(DockerClient client, String image) {
327-
List<Image> images = client.listImagesCmd().withImageNameFilter(image).exec();
327+
public void checkAndPullImage(DockerClient client, DockerImageName dockerImageName) {
328+
List<Image> images = client.listImagesCmd().withImageNameFilter(dockerImageName.asCanonicalNameString()).exec();
328329
if (images.isEmpty()) {
329-
client.pullImageCmd(image).exec(new TimeLimitedLoggedPullImageResultCallback(log , image)).awaitCompletion();
330+
client.pullImageCmd(dockerImageName.asCanonicalNameString())
331+
.exec(new TimeLimitedLoggedPullImageResultCallback(log , dockerImageName))
332+
.awaitCompletion();
330333
}
331334
}
332335

@@ -343,7 +346,7 @@ public <T> T runInsideDocker(Consumer<CreateContainerCmd> createContainerCmdCons
343346
}
344347

345348
private <T> T runInsideDocker(DockerClient client, Consumer<CreateContainerCmd> createContainerCmdConsumer, BiFunction<DockerClient, String, T> block) {
346-
checkAndPullImage(client, TINY_IMAGE);
349+
checkAndPullImage(client, DockerImageName.parse(TINY_IMAGE));
347350
CreateContainerCmd createContainerCmd = client.createContainerCmd(TINY_IMAGE)
348351
.withLabels(DEFAULT_LABELS);
349352
createContainerCmdConsumer.accept(createContainerCmd);

core/src/main/java/org/testcontainers/images/LoggedPullImageResultCallback.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,17 @@
33
import com.github.dockerjava.api.command.PullImageResultCallback;
44
import com.github.dockerjava.api.model.PullResponseItem;
55
import org.slf4j.Logger;
6+
import org.testcontainers.utility.DockerImageName;
67
import org.testcontainers.utility.ImagePullCountLogger;
78

89
import java.io.Closeable;
910
import java.time.Duration;
1011
import java.time.Instant;
11-
import java.util.*;
12+
import java.util.HashMap;
13+
import java.util.HashSet;
14+
import java.util.Map;
15+
import java.util.Objects;
16+
import java.util.Set;
1217

1318
import static java.lang.String.format;
1419
import static org.apache.commons.io.FileUtils.byteCountToDisplaySize;
@@ -18,7 +23,7 @@
1823
*/
1924
class LoggedPullImageResultCallback extends PullImageResultCallback {
2025
private final Logger logger;
21-
private final String canonicalImageName;
26+
private final DockerImageName dockerImageName;
2227

2328
private final Set<String> allLayers = new HashSet<>();
2429
private final Set<String> downloadedLayers = new HashSet<>();
@@ -28,9 +33,9 @@ class LoggedPullImageResultCallback extends PullImageResultCallback {
2833
private boolean completed;
2934
private Instant start;
3035

31-
LoggedPullImageResultCallback(final Logger logger, final String canonicalImageName) {
36+
LoggedPullImageResultCallback(final Logger logger, final DockerImageName dockerImageName) {
3237
this.logger = logger;
33-
this.canonicalImageName = canonicalImageName;
38+
this.dockerImageName = dockerImageName;
3439
}
3540

3641
@Override
@@ -113,7 +118,7 @@ public void onComplete() {
113118
byteCountToDisplaySize(downloadedLayerSize / duration));
114119
}
115120

116-
ImagePullCountLogger.instance().recordPull(canonicalImageName);
121+
ImagePullCountLogger.instance().recordPull(dockerImageName);
117122
}
118123

119124
private long downloadedLayerSize() {

core/src/main/java/org/testcontainers/images/RemoteDockerImage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ protected final String resolve() {
7777
dockerClient
7878
.pullImageCmd(imageName.getUnversionedPart())
7979
.withTag(imageName.getVersionPart())
80-
.exec(new TimeLimitedLoggedPullImageResultCallback(logger, imageName.asCanonicalNameString()))
80+
.exec(new TimeLimitedLoggedPullImageResultCallback(logger, imageName))
8181
.awaitCompletion();
8282

8383
LocalImagesCache.INSTANCE.refreshCache(imageName);

core/src/main/java/org/testcontainers/images/TimeLimitedLoggedPullImageResultCallback.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.github.dockerjava.api.command.PullImageResultCallback;
44
import com.github.dockerjava.api.model.PullResponseItem;
55
import org.slf4j.Logger;
6+
import org.testcontainers.utility.DockerImageName;
67
import org.testcontainers.utility.TestcontainersConfiguration;
78

89
import java.io.Closeable;
@@ -41,7 +42,7 @@ public class TimeLimitedLoggedPullImageResultCallback extends LoggedPullImageRes
4142
// All threads that are 'awaiting' this pull
4243
private final Set<Thread> waitingThreads = new HashSet<>();
4344

44-
public TimeLimitedLoggedPullImageResultCallback(Logger logger, final String canonicalImageName) {
45+
public TimeLimitedLoggedPullImageResultCallback(Logger logger, final DockerImageName canonicalImageName) {
4546
super(logger, canonicalImageName);
4647
this.logger = logger;
4748
}

core/src/main/java/org/testcontainers/utility/ImagePullCountLogger.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
public class ImagePullCountLogger {
1616

1717
private static ImagePullCountLogger instance;
18-
private final Map<String, AtomicInteger> pullCounters = new ConcurrentHashMap<>();
18+
private final Map<DockerImageName, AtomicInteger> pullCounters = new ConcurrentHashMap<>();
1919

2020
public synchronized static ImagePullCountLogger instance() {
2121
if (instance == null) {
@@ -34,7 +34,7 @@ public synchronized static ImagePullCountLogger instance() {
3434
public void logStatistics() {
3535
if (pullCounters.size() > 0) {
3636
final String summary = pullCounters.entrySet().stream()
37-
.map(it -> it.getKey() + (it.getValue().intValue() > 1 ? " (" + it.getValue() + " times)" : ""))
37+
.map(it -> it.getKey().asCanonicalNameString() + (it.getValue().intValue() > 1 ? " (" + it.getValue() + " times)" : ""))
3838
.sorted()
3939
.collect(Collectors.joining("\n ", "\n ", "\n"));
4040

@@ -44,7 +44,7 @@ public void logStatistics() {
4444
}
4545
}
4646

47-
public void recordPull(final String image) {
47+
public void recordPull(final DockerImageName image) {
4848
pullCounters.computeIfAbsent(image, __ -> new AtomicInteger()).incrementAndGet();
4949
}
5050
}

core/src/test/java/org/testcontainers/utility/ImagePullCountLoggerTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ public void setUp() throws Exception {
3131
public void testPullCountsLogged() {
3232
underTest = new ImagePullCountLogger();
3333

34-
underTest.recordPull("imageA");
35-
underTest.recordPull("imageA");
36-
underTest.recordPull("imageB");
37-
underTest.recordPull("imageC");
34+
underTest.recordPull(DockerImageName.parse("imageA"));
35+
underTest.recordPull(DockerImageName.parse("imageA"));
36+
underTest.recordPull(DockerImageName.parse("imageB"));
37+
underTest.recordPull(DockerImageName.parse("imageC"));
3838

3939
underTest.logStatistics();
4040

0 commit comments

Comments
 (0)