Skip to content

Commit 93a05b2

Browse files
Support bare Image ID lookup in local image cache
1 parent c167524 commit 93a05b2

File tree

2 files changed

+45
-4
lines changed

2 files changed

+45
-4
lines changed

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,13 @@ private void populateFromList(List<Image> images) {
9797
});
9898
}
9999

100-
if (repoTags == null && repoDigests == null) {
101-
log.debug("repoTags and repoDigests are both null, skipping image: {}", image);
100+
String id = image.getId();
101+
if (id != null) {
102+
cache.put(new DockerImageName(id), imageData);
103+
}
104+
105+
if (repoTags == null && repoDigests == null && id == null) {
106+
log.debug("repoTags, repoDigests, and id are all null, skipping image: {}", image);
102107
}
103108
}
104109
}

core/src/test/java/org/testcontainers/images/LocalImagesCacheTest.java

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ void shouldCacheImageByBothTagAndDigest() {
6767
}
6868

6969
@Test
70-
void shouldSkipImageWithNullTagsAndNullDigests() {
71-
Image image = createImage(null, null, "sha256:ddd444", 1000L);
70+
void shouldSkipImageWithNullTagsAndNullDigestsAndNullId() {
71+
Image image = createImage(null, null, null, 1000L);
7272

7373
populateCache(image);
7474

@@ -110,6 +110,42 @@ void shouldHandleDuplicateRepoTags() {
110110
assertThat(LocalImagesCache.INSTANCE.cache).containsKey(new DockerImageName("alpine:3.17"));
111111
}
112112

113+
@Test
114+
void shouldCacheImageById() {
115+
Image image = createImage(
116+
new String[] { "alpine:3.17" },
117+
null,
118+
"sha256:8cf620617c6203b24af7c5bf15a7212386c27ad008fc4c6ff7e37a1bf0a3cdd2",
119+
1000L
120+
);
121+
122+
populateCache(image);
123+
124+
assertThat(LocalImagesCache.INSTANCE.cache)
125+
.containsKey(new DockerImageName("alpine:3.17"))
126+
.containsKey(
127+
new DockerImageName("sha256:8cf620617c6203b24af7c5bf15a7212386c27ad008fc4c6ff7e37a1bf0a3cdd2")
128+
);
129+
}
130+
131+
@Test
132+
void shouldCacheImageByIdWhenNoTagsOrDigests() {
133+
Image image = createImage(
134+
null,
135+
null,
136+
"sha256:8cf620617c6203b24af7c5bf15a7212386c27ad008fc4c6ff7e37a1bf0a3cdd2",
137+
1000L
138+
);
139+
140+
populateCache(image);
141+
142+
assertThat(LocalImagesCache.INSTANCE.cache)
143+
.hasSize(1)
144+
.containsKey(
145+
new DockerImageName("sha256:8cf620617c6203b24af7c5bf15a7212386c27ad008fc4c6ff7e37a1bf0a3cdd2")
146+
);
147+
}
148+
113149
@Test
114150
void shouldCacheDigestOnlyImageWithoutTags() {
115151
Image image = createImage(

0 commit comments

Comments
 (0)