Skip to content

Commit 1e8f6b7

Browse files
committed
Add test for custom CA certs
1 parent 9b636b9 commit 1e8f6b7

File tree

4 files changed

+69
-1
lines changed

4 files changed

+69
-1
lines changed

src/test/java/com/dajudge/kindcontainer/BaseKindContainerTest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.dajudge.kindcontainer;
22

3+
import static com.dajudge.kindcontainer.TestUtils.stringResource;
34
import static java.lang.Runtime.getRuntime;
5+
import static java.util.Collections.singletonList;
46

57
abstract class BaseKindContainerTest {
68
static final KindContainer K8S = createContainer();
@@ -11,7 +13,8 @@ private static KindContainer createContainer() {
1113
.withExposedPorts(30000)
1214
.waitingFor(NullWaitStrategy.INSTANCE)
1315
.withPodSubnet("10.245.0.0/16")
14-
.withServiceSubnet("10.112.0.0/12");
16+
.withServiceSubnet("10.112.0.0/12")
17+
.withCaCerts(singletonList(stringResource("test.crt")));
1518
container.start();
1619
getRuntime().addShutdownHook(new Thread(container::stop));
1720
return container;
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.dajudge.kindcontainer;
2+
3+
import org.junit.Test;
4+
5+
import static com.dajudge.kindcontainer.TestUtils.stringResource;
6+
import static org.junit.Assert.assertTrue;
7+
8+
public class CertificatesTest extends BaseKindContainerTest {
9+
@Test
10+
public void adds_custom_certificate() {
11+
final String allCerts = K8S.copyFileFromContainer(
12+
"/etc/ssl/certs/ca-certificates.crt",
13+
TestUtils::readString
14+
);
15+
assertTrue(allCerts.contains(stringResource("test.crt")));
16+
}
17+
}

src/test/java/com/dajudge/kindcontainer/TestUtils.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@
88
import org.testcontainers.shaded.okhttp3.Response;
99
import org.testcontainers.shaded.okhttp3.ResponseBody;
1010

11+
import java.io.ByteArrayOutputStream;
1112
import java.io.IOException;
13+
import java.io.InputStream;
1214
import java.util.HashMap;
1315
import java.util.Random;
1416
import java.util.concurrent.Callable;
1517

18+
import static java.nio.charset.StandardCharsets.UTF_8;
1619
import static java.util.UUID.randomUUID;
1720

1821
final class TestUtils {
@@ -83,4 +86,22 @@ static boolean isRunning(final KubernetesClient client, final HasMetadata pod) {
8386
.withName(pod.getMetadata().getName())
8487
.get().getStatus().getPhase());
8588
}
89+
90+
public static String stringResource(final String s) {
91+
try (final InputStream is = TestUtils.class.getClassLoader().getResourceAsStream(s)) {
92+
return readString(is);
93+
} catch (final IOException e) {
94+
throw new RuntimeException("Failed to read string resource: " + s, e);
95+
}
96+
}
97+
98+
public static String readString(final InputStream is) throws IOException {
99+
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
100+
final byte[] buffer = new byte[1024];
101+
int read;
102+
while ((read = is.read(buffer)) > 0) {
103+
bos.write(buffer, 0, read);
104+
}
105+
return new String(bos.toByteArray(), UTF_8);
106+
}
86107
}

src/test/resources/test.crt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIEqzCCApOgAwIBAgIRAIvhKg5ZRO08VGQx8JdhT+UwDQYJKoZIhvcNAQELBQAw
3+
GjEYMBYGA1UEAwwPRmFrZSBMRSBSb290IFgxMB4XDTE2MDUyMzIyMDc1OVoXDTM2
4+
MDUyMzIyMDc1OVowIjEgMB4GA1UEAwwXRmFrZSBMRSBJbnRlcm1lZGlhdGUgWDEw
5+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDtWKySDn7rWZc5ggjz3ZB0
6+
8jO4xti3uzINfD5sQ7Lj7hzetUT+wQob+iXSZkhnvx+IvdbXF5/yt8aWPpUKnPym
7+
oLxsYiI5gQBLxNDzIec0OIaflWqAr29m7J8+NNtApEN8nZFnf3bhehZW7AxmS1m0
8+
ZnSsdHw0Fw+bgixPg2MQ9k9oefFeqa+7Kqdlz5bbrUYV2volxhDFtnI4Mh8BiWCN
9+
xDH1Hizq+GKCcHsinDZWurCqder/afJBnQs+SBSL6MVApHt+d35zjBD92fO2Je56
10+
dhMfzCgOKXeJ340WhW3TjD1zqLZXeaCyUNRnfOmWZV8nEhtHOFbUCU7r/KkjMZO9
11+
AgMBAAGjgeMwgeAwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAw
12+
HQYDVR0OBBYEFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHoGCCsGAQUFBwEBBG4wbDA0
13+
BggrBgEFBQcwAYYoaHR0cDovL29jc3Auc3RnLXJvb3QteDEubGV0c2VuY3J5cHQu
14+
b3JnLzA0BggrBgEFBQcwAoYoaHR0cDovL2NlcnQuc3RnLXJvb3QteDEubGV0c2Vu
15+
Y3J5cHQub3JnLzAfBgNVHSMEGDAWgBTBJnSkikSg5vogKNhcI5pFiBh54DANBgkq
16+
hkiG9w0BAQsFAAOCAgEABYSu4Il+fI0MYU42OTmEj+1HqQ5DvyAeyCA6sGuZdwjF
17+
UGeVOv3NnLyfofuUOjEbY5irFCDtnv+0ckukUZN9lz4Q2YjWGUpW4TTu3ieTsaC9
18+
AFvCSgNHJyWSVtWvB5XDxsqawl1KzHzzwr132bF2rtGtazSqVqK9E07sGHMCf+zp
19+
DQVDVVGtqZPHwX3KqUtefE621b8RI6VCl4oD30Olf8pjuzG4JKBFRFclzLRjo/h7
20+
IkkfjZ8wDa7faOjVXx6n+eUQ29cIMCzr8/rNWHS9pYGGQKJiY2xmVC9h12H99Xyf
21+
zWE9vb5zKP3MVG6neX1hSdo7PEAb9fqRhHkqVsqUvJlIRmvXvVKTwNCP3eCjRCCI
22+
PTAvjV+4ni786iXwwFYNz8l3PmPLCyQXWGohnJ8iBm+5nk7O2ynaPVW0U2W+pt2w
23+
SVuvdDM5zGv2f9ltNWUiYZHJ1mmO97jSY/6YfdOUH66iRtQtDkHBRdkNBsMbD+Em
24+
2TgBldtHNSJBfB3pm9FblgOcJ0FSWcUDWJ7vO0+NTXlgrRofRT6pVywzxVo6dND0
25+
WzYlTWeUVsO40xJqhgUQRER9YLOLxJ0O6C8i0xFxAMKOtSdodMB3RIwt7RFQ0uyt
26+
n5Z5MqkYhlMI3J1tPRTp1nEt9fyGspBOO05gi148Qasp+3N+svqKomoQglNoAxU=
27+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)