Skip to content

Commit 55b7532

Browse files
committed
Make BuildInfosExtensions null safe, add helper methods
1 parent b3d5e8d commit 55b7532

File tree

2 files changed

+64
-2
lines changed

2 files changed

+64
-2
lines changed

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

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,19 @@ fun List<BuildInfo>.getImageId(): ImageID? {
1212
return firstAux.get().aux
1313
} else {
1414
val idFromStream = reversedInfos.stream()
15-
.filter { (_, stream): BuildInfo -> stream?.contains("Successfully built ")!! }
15+
.filter { (_, stream): BuildInfo ->
16+
val contains = stream?.contains("Successfully built ")
17+
contains != null && contains
18+
}
1619
.findFirst()
1720
return if (idFromStream.isPresent) {
1821
ImageID(idFromStream.get().stream!!.removePrefix("Successfully built ").replaceAfter('\n', "").trim())
1922
} else {
2023
val tagFromStream = reversedInfos.stream()
21-
.filter { (_, stream): BuildInfo -> stream?.contains("Successfully tagged ")!! }
24+
.filter { (_, stream): BuildInfo ->
25+
val contains = stream?.contains("Successfully tagged ")
26+
contains != null && contains
27+
}
2228
.findFirst()
2329
tagFromStream.map { (_, stream): BuildInfo ->
2430
ImageID(stream!!.removePrefix("Successfully tagged ").replaceAfter('\n', "").trim())
@@ -27,3 +33,15 @@ fun List<BuildInfo>.getImageId(): ImageID? {
2733
}
2834
}
2935
}
36+
37+
fun List<BuildInfo>.getError(): BuildInfo? {
38+
return this.stream()
39+
.filter { (_, _, error): BuildInfo -> error != null }
40+
.findFirst()
41+
.orElse(null)
42+
}
43+
44+
fun List<BuildInfo>.hasError(): Boolean {
45+
return this.stream()
46+
.anyMatch { (_, _, error): BuildInfo -> error != null }
47+
}

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

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,60 @@
11
package de.gesellix.docker.remote.api.client;
22

33
import de.gesellix.docker.remote.api.BuildInfo;
4+
import de.gesellix.docker.remote.api.ErrorDetail;
45
import de.gesellix.docker.remote.api.ImageID;
56
import org.junit.jupiter.api.Test;
67

78
import java.util.ArrayList;
89
import java.util.List;
910

1011
import static org.junit.jupiter.api.Assertions.assertEquals;
12+
import static org.junit.jupiter.api.Assertions.assertFalse;
13+
import static org.junit.jupiter.api.Assertions.assertNull;
14+
import static org.junit.jupiter.api.Assertions.assertTrue;
1115

1216
class BuildInfoExtensionsTest {
1317

18+
@Test
19+
public void getErrorFromFailedBuild() {
20+
List<BuildInfo> infos = new ArrayList<>();
21+
infos.add(new BuildInfo(null, null, "invalid reference format", new ErrorDetail(null, "invalid reference format"), null, null, null, null));
22+
23+
BuildInfo errorInfo = BuildInfoExtensionsKt.getError(infos);
24+
25+
assertEquals("invalid reference format", errorInfo.getError());
26+
}
27+
28+
@Test
29+
public void getHasErrorInFailedBuild() {
30+
List<BuildInfo> infos = new ArrayList<>();
31+
infos.add(new BuildInfo(null, null, "invalid reference format", new ErrorDetail(null, "invalid reference format"), null, null, null, null));
32+
33+
boolean hasError = BuildInfoExtensionsKt.hasError(infos);
34+
35+
assertTrue(hasError);
36+
}
37+
38+
@Test
39+
public void getHasNoErrorInSuccessfulBuild() {
40+
List<BuildInfo> infos = new ArrayList<>();
41+
infos.add(new BuildInfo(null, "Successfully built the wind\ncaught it", null, null, null, null, null, null));
42+
43+
boolean hasError = BuildInfoExtensionsKt.hasError(infos);
44+
45+
assertFalse(hasError);
46+
}
47+
48+
@Test
49+
public void getImageIdFromFailedBuild() {
50+
List<BuildInfo> infos = new ArrayList<>();
51+
infos.add(new BuildInfo(null, null, "invalid reference format", new ErrorDetail(null, "invalid reference format"), null, null, null, null));
52+
53+
ImageID imageId = BuildInfoExtensionsKt.getImageId(infos);
54+
55+
assertNull(imageId);
56+
}
57+
1458
@Test
1559
public void getImageIdFromAux() {
1660
List<BuildInfo> infos = new ArrayList<>();

0 commit comments

Comments
 (0)