Skip to content

Commit 00af4e4

Browse files
committed
Extract ImageId utils to extension functions/static methods
1 parent 167444d commit 00af4e4

File tree

6 files changed

+74
-40
lines changed

6 files changed

+74
-40
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package de.gesellix.docker.remote.api.client
2+
3+
import de.gesellix.docker.remote.api.BuildInfo
4+
import de.gesellix.docker.remote.api.ImageID
5+
6+
fun List<BuildInfo>.getImageId(): ImageID? {
7+
val reversedInfos = this.reversed()
8+
val firstAux = reversedInfos.stream()
9+
.filter { (_, _, _, _, _, _, _, aux): BuildInfo -> aux != null }
10+
.findFirst()
11+
if (firstAux.isPresent) {
12+
return firstAux.get().aux
13+
} else {
14+
val idFromStream = reversedInfos.stream()
15+
.filter { (_, stream): BuildInfo -> stream?.contains("Successfully built ")!! }
16+
.findFirst()
17+
return if (idFromStream.isPresent) {
18+
ImageID(idFromStream.get().stream!!.removePrefix("Successfully built ").replaceAfter('\n', "").trim())
19+
} else {
20+
val tagFromStream = reversedInfos.stream()
21+
.filter { (_, stream): BuildInfo -> stream?.contains("Successfully tagged ")!! }
22+
.findFirst()
23+
tagFromStream.map { (_, stream): BuildInfo ->
24+
ImageID(stream!!.removePrefix("Successfully tagged ").replaceAfter('\n', "").trim())
25+
}
26+
.orElse(null)
27+
}
28+
}
29+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package de.gesellix.docker.remote.api.client
2+
3+
import de.gesellix.docker.remote.api.CreateImageInfo
4+
5+
fun List<CreateImageInfo>.getImageId(): String? {
6+
val reversedInfos = this.reversed()
7+
val firstStatus = reversedInfos.stream()
8+
.filter { (_, _, status, _, _): CreateImageInfo -> status != null }
9+
.findFirst()
10+
if (firstStatus.isPresent) {
11+
return firstStatus.get().status
12+
} else {
13+
return null
14+
}
15+
}

api-client/src/main/kotlin/de/gesellix/docker/remote/api/client/ImageApi.kt

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import de.gesellix.docker.remote.api.HistoryResponseItem
2323
import de.gesellix.docker.remote.api.IdResponse
2424
import de.gesellix.docker.remote.api.Image
2525
import de.gesellix.docker.remote.api.ImageDeleteResponseItem
26-
import de.gesellix.docker.remote.api.ImageID
2726
import de.gesellix.docker.remote.api.ImagePruneResponse
2827
import de.gesellix.docker.remote.api.ImageSearchResponseItem
2928
import de.gesellix.docker.remote.api.ImageSummary
@@ -270,31 +269,6 @@ class ImageApi(dockerClientConfig: DockerClientConfig = defaultClientConfig, pro
270269
}
271270
}
272271

273-
fun getImageId(buildInfos: List<BuildInfo>): ImageID? {
274-
val reversedInfos = buildInfos.reversed()
275-
val firstAux = reversedInfos.stream()
276-
.filter { (_, _, _, _, _, _, _, aux): BuildInfo -> aux != null }
277-
.findFirst()
278-
if (firstAux.isPresent) {
279-
return firstAux.get().aux
280-
} else {
281-
val idFromStream = reversedInfos.stream()
282-
.filter { (_, stream): BuildInfo -> stream?.contains("Successfully built ")!! }
283-
.findFirst()
284-
return if (idFromStream.isPresent) {
285-
ImageID(idFromStream.get().stream!!.removePrefix("Successfully built ").replaceAfter('\n', "").trim())
286-
} else {
287-
val tagFromStream = reversedInfos.stream()
288-
.filter { (_, stream): BuildInfo -> stream?.contains("Successfully tagged ")!! }
289-
.findFirst()
290-
tagFromStream.map { (_, stream): BuildInfo ->
291-
ImageID(stream!!.removePrefix("Successfully tagged ").replaceAfter('\n', "").trim())
292-
}
293-
.orElse(null)
294-
}
295-
}
296-
}
297-
298272
/**
299273
* To obtain the request config of the operation imageBuild
300274
*

api-client/src/test/java/de/gesellix/docker/remote/api/client/ImageApiTest.java renamed to api-client/src/test/java/de/gesellix/docker/remote/api/client/BuildInfoExtensionsTest.java

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,15 @@
11
package de.gesellix.docker.remote.api.client;
22

3-
import de.gesellix.docker.engine.DockerClientConfig;
43
import de.gesellix.docker.remote.api.BuildInfo;
54
import de.gesellix.docker.remote.api.ImageID;
6-
import org.junit.jupiter.api.BeforeEach;
75
import org.junit.jupiter.api.Test;
86

97
import java.util.ArrayList;
108
import java.util.List;
119

1210
import static org.junit.jupiter.api.Assertions.assertEquals;
1311

14-
class ImageApiTest {
15-
16-
private ImageApi imageApi;
17-
18-
@BeforeEach
19-
public void setup() {
20-
imageApi = new ImageApi(new DockerClientConfig());
21-
}
12+
class BuildInfoExtensionsTest {
2213

2314
@Test
2415
public void getImageIdFromAux() {
@@ -28,7 +19,7 @@ public void getImageIdFromAux() {
2819
infos.add(new BuildInfo(null, "Successfully built f9d5f290d048\nfoo bar", null, null, null, null, null, null));
2920
infos.add(new BuildInfo(null, "Successfully tagged image:tag\nbar baz", null, null, null, null, null, null));
3021

31-
ImageID imageId = imageApi.getImageId(infos);
22+
ImageID imageId = BuildInfoExtensionsKt.getImageId(infos);
3223

3324
assertEquals("sha256:expected-id", imageId.getID());
3425
}
@@ -40,7 +31,7 @@ public void getImageIdFromStreamWithBuildMessage() {
4031
infos.add(new BuildInfo(null, "Successfully built f9d5f290d048\nfoo bar", null, null, null, null, null, null));
4132
infos.add(new BuildInfo(null, "Successfully tagged image:tag\nbar baz", null, null, null, null, null, null));
4233

43-
ImageID imageId = imageApi.getImageId(infos);
34+
ImageID imageId = BuildInfoExtensionsKt.getImageId(infos);
4435

4536
assertEquals("f9d5f290d048", imageId.getID());
4637
}
@@ -50,7 +41,7 @@ public void getImageIdFromStreamWithTagMessage() {
5041
List<BuildInfo> infos = new ArrayList<>();
5142
infos.add(new BuildInfo(null, "Successfully tagged image:tag\nbar baz", null, null, null, null, null, null));
5243

53-
ImageID imageId = imageApi.getImageId(infos);
44+
ImageID imageId = BuildInfoExtensionsKt.getImageId(infos);
5445

5546
assertEquals("image:tag", imageId.getID());
5647
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package de.gesellix.docker.remote.api.client;
2+
3+
import de.gesellix.docker.remote.api.CreateImageInfo;
4+
import org.junit.jupiter.api.Test;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
import static org.junit.jupiter.api.Assertions.assertEquals;
10+
11+
class CreateImageInfoExtensionsTest {
12+
13+
@Test
14+
public void getImageIdFromStatus() {
15+
List<CreateImageInfo> infos = new ArrayList<>();
16+
infos.add(new CreateImageInfo("os-linux", null, "Pulling from gesellix/echo-server", null, null));
17+
infos.add(new CreateImageInfo(null, null, "Digest: sha256:04c0275878dc243b2f92193467cb33cdb9ee2262be64b627ed476de73e399244", null, null));
18+
infos.add(new CreateImageInfo(null, null, "Status: Image is up to date for gesellix/echo-server:os-linux", null, null));
19+
infos.add(new CreateImageInfo(null, null, "sha256:87f5e747ad067f91a7c4adf154deea20cebc3a749be5c2864a0c65cf70ddd8c4", null, null));
20+
21+
String imageId = CreateImageInfoExtensionsKt.getImageId(infos);
22+
23+
assertEquals("sha256:87f5e747ad067f91a7c4adf154deea20cebc3a749be5c2864a0c65cf70ddd8c4", imageId);
24+
}
25+
}

api-client/src/test/java/de/gesellix/docker/remote/api/client/ImageApiIntegrationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public void onFinished() {
127127
log.error("Wait interrupted", e);
128128
}
129129

130-
ImageID imageId = imageApi.getImageId(infos);
130+
ImageID imageId = BuildInfoExtensionsKt.getImageId(infos);
131131
assertNotNull(imageId);
132132
assertNotNull(imageId.getID());
133133
assertTrue(imageId.getID().matches(".+"));

0 commit comments

Comments
 (0)