Skip to content
This repository was archived by the owner on Apr 10, 2024. It is now read-only.

Commit ddf4c2e

Browse files
committed
test progress
1 parent f32ad07 commit ddf4c2e

File tree

5 files changed

+89
-32
lines changed

5 files changed

+89
-32
lines changed

pom.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
<slf4j.version>1.7.36</slf4j.version>
1717
<log4j.version>2.19.0</log4j.version>
1818
<awaitility.version>4.2.0</awaitility.version>
19+
<fabric8-client.version>6.4.1</fabric8-client.version>
20+
<assertj.version>3.24.2</assertj.version>
1921
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2022
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
2123
<maven.compiler.target>11</maven.compiler.target>
@@ -58,6 +60,18 @@
5860
<version>${log4j.version}</version>
5961
<scope>test</scope>
6062
</dependency>
63+
<dependency>
64+
<groupId>io.fabric8</groupId>
65+
<artifactId>kubernetes-client</artifactId>
66+
<version>${fabric8-client.version}</version>
67+
<scope>test</scope>
68+
</dependency>
69+
<dependency>
70+
<groupId>org.assertj</groupId>
71+
<artifactId>assertj-core</artifactId>
72+
<version>${assertj.version}</version>
73+
<scope>test</scope>
74+
</dependency>
6175
</dependencies>
6276

6377

src/main/java/com/csviri/kubeapi/APIServer.java

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import java.io.File;
77
import java.io.IOException;
8-
import java.util.concurrent.TimeUnit;
98

109
public class APIServer {
1110

@@ -36,6 +35,7 @@ public void start() {
3635
startEtcd();
3736
startApiServer();
3837
kubeConfigManager.updateKubeConfig();
38+
waitUntilDefaultNamespaceCreated();
3939
}
4040

4141
private void prepareLogDirectory() {
@@ -51,30 +51,7 @@ private void prepareLogDirectory() {
5151
public void stop() {
5252
stopApiServer();
5353
stopEtcd();
54-
}
55-
56-
private void startApiServer() {
57-
certManager.ensureAPIServerCertificates();
58-
var apiServerBinary = binaryManager.binaries().getApiServer();
59-
try {
60-
if (!apiServerBinary.exists()) {
61-
throw new KubeApiException("Missing binary for API Server on path: " + apiServerBinary.getAbsolutePath());
62-
}
63-
apiServerProcess = new ProcessBuilder(apiServerBinary.getAbsolutePath(),
64-
"--cert-dir", config.getJenvtestDirectory(), "--etcd-servers",
65-
"http://0.0.0.0:2379", "--authorization-mode", "RBAC", "--service-account-issuer",
66-
"https://localhost", "--service-account-signing-key-file", certManager.getAPIServerKeyPath(),
67-
"--service-account-signing-key-file", certManager.getAPIServerKeyPath(),
68-
"--service-account-key-file", certManager.getAPIServerKeyPath(), "--service-account-issuer",
69-
certManager.getAPIServerCertPath(),
70-
"--disable-admission-plugins", "ServiceAccount", "--client-ca-file", certManager.getClientCertPath())
71-
.redirectOutput(new File(config.logDirectory(), "apiserver.logs"))
72-
.redirectError(new File(config.logDirectory(), "apiserver.logs"))
73-
.start();
74-
log.debug("API Server started");
75-
} catch (IOException e) {
76-
throw new RuntimeException(e);
77-
}
54+
kubeConfigManager.cleanupFromKubeConfig();
7855
}
7956

8057
private void stopApiServer() {
@@ -96,6 +73,11 @@ private void stopEtcd() {
9673
log.debug("etcd stopped");
9774
}
9875

76+
private void waitUntilDefaultNamespaceCreated() {
77+
78+
}
79+
80+
// todo detect if process not started up correctly
9981
private void startEtcd() {
10082
var etcdBinary = binaryManager.binaries().getEtcd();
10183
try {
@@ -111,10 +93,37 @@ private void startEtcd() {
11193
.redirectOutput(logsFile)
11294
.redirectError(logsFile)
11395
.start();
114-
// etcdProcess.waitFor(5, TimeUnit.SECONDS);
11596
log.debug("etcd started");
11697
} catch (IOException e) {
11798
throw new KubeApiException(e);
11899
}
119100
}
101+
102+
private void startApiServer() {
103+
certManager.ensureAPIServerCertificates();
104+
var apiServerBinary = binaryManager.binaries().getApiServer();
105+
try {
106+
if (!apiServerBinary.exists()) {
107+
throw new KubeApiException("Missing binary for API Server on path: " + apiServerBinary.getAbsolutePath());
108+
}
109+
var logsFile = new File(config.logDirectory(), "apiserver.logs");
110+
apiServerProcess = new ProcessBuilder(apiServerBinary.getAbsolutePath(),
111+
"--cert-dir", config.getJenvtestDirectory(), "--etcd-servers",
112+
"http://0.0.0.0:2379", "--authorization-mode", "RBAC", "--service-account-issuer",
113+
"https://localhost", "--service-account-signing-key-file", certManager.getAPIServerKeyPath(),
114+
"--service-account-signing-key-file", certManager.getAPIServerKeyPath(),
115+
"--service-account-key-file", certManager.getAPIServerKeyPath(), "--service-account-issuer",
116+
certManager.getAPIServerCertPath(),
117+
"--disable-admission-plugins", "ServiceAccount", "--client-ca-file", certManager.getClientCertPath()
118+
// "--service-cluster-ip-range", "10.0.0.0/24",
119+
// "--allow-privileged", "true"
120+
)
121+
.redirectOutput(logsFile)
122+
.redirectError(logsFile)
123+
.start();
124+
log.debug("API Server started");
125+
} catch (IOException e) {
126+
throw new RuntimeException(e);
127+
}
128+
}
120129
}

src/main/java/com/csviri/kubeapi/KubeConfigManager.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,15 @@ public void updateKubeConfig() {
2525
execAndWait("kubectl", "config", "use-context", "jenvtest");
2626
}
2727

28-
// todo
29-
public void removeFromKubeConfig() {
28+
public void cleanupFromKubeConfig() {
3029
log.debug("Cleanig up kubeconfig");
30+
unset("contexts.jenvtest");
31+
unset("clusters.jenvtest");
32+
unset("users.jenvtest");
33+
}
34+
35+
private void unset(String target) {
36+
execAndWait("kubectl","config","unset", target);
3137
}
3238

3339
private void execAndWait(String... arguments) {
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
package com.csviri.kubeapi.junit;
22

3-
43
public @interface EnableAPIServer {
54
}
Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,43 @@
11
package com.csviri.kubeapi;
22

3+
import io.fabric8.kubernetes.api.model.ConfigMap;
4+
import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
5+
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
6+
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
37
import org.junit.jupiter.api.Test;
8+
import java.util.Map;
9+
10+
import static org.assertj.core.api.Assertions.assertThat;
11+
412

513
class ApiServerTest {
614

715
@Test
8-
void testStartup() {
16+
void sanityTest() throws InterruptedException {
917
var kubeApi = new APIServer();
10-
kubeApi.start();
11-
kubeApi.stop();
18+
try {
19+
kubeApi.start();
20+
Thread.sleep(3000);
21+
// todo cleanup before start
22+
var client = new KubernetesClientBuilder().build();
23+
client.resource(configMap()).createOrReplace();
24+
var cm = client.resource(configMap()).get();
25+
26+
assertThat(cm).isNotNull();
27+
} finally {
28+
kubeApi.stop();
29+
}
30+
31+
}
32+
33+
private ConfigMap configMap() {
34+
return new ConfigMapBuilder()
35+
.withMetadata(new ObjectMetaBuilder()
36+
.withName("test1")
37+
.withNamespace("default")
38+
.build())
39+
.withData(Map.of("key","data"))
40+
.build();
1241
}
1342

1443
}

0 commit comments

Comments
 (0)