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

Commit 1c7d6ef

Browse files
authored
feat: specifyin target kube version in annotation (#32)
1 parent de25ece commit 1c7d6ef

File tree

6 files changed

+94
-20
lines changed

6 files changed

+94
-20
lines changed

core/src/main/java/io/javaoperatorsdk/jenvtest/junit/EnableKubeAPIServer.java

+7
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,11 @@
1313
@Retention(RUNTIME)
1414
public @interface EnableKubeAPIServer {
1515

16+
String NOT_SET = "NOT_SET";
17+
18+
/**
19+
* The target Kube API Version. Sample: 1.26.1
20+
*/
21+
String kubeAPIVersion() default NOT_SET;
22+
1623
}

core/src/main/java/io/javaoperatorsdk/jenvtest/junit/KubeAPIServerExtension.java

+34-1
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,54 @@
11
package io.javaoperatorsdk.jenvtest.junit;
22

3+
import java.lang.reflect.AnnotatedElement;
4+
import java.util.Arrays;
5+
import java.util.stream.Collectors;
6+
37
import org.junit.jupiter.api.extension.AfterAllCallback;
48
import org.junit.jupiter.api.extension.BeforeAllCallback;
59
import org.junit.jupiter.api.extension.ExtensionContext;
10+
import org.slf4j.Logger;
11+
import org.slf4j.LoggerFactory;
612

13+
import io.javaoperatorsdk.jenvtest.JenvtestException;
714
import io.javaoperatorsdk.jenvtest.KubeAPIServer;
15+
import io.javaoperatorsdk.jenvtest.KubeAPIServerConfigBuilder;
16+
17+
import static io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer.NOT_SET;
818

919
public class KubeAPIServerExtension implements BeforeAllCallback, AfterAllCallback {
1020

21+
private static final Logger log = LoggerFactory.getLogger(KubeAPIServerExtension.class);
22+
1123
private KubeAPIServer kubeApiServer;
1224

1325
@Override
1426
public void beforeAll(ExtensionContext extensionContext) throws Exception {
15-
kubeApiServer = new KubeAPIServer();
27+
String targetVersion = extensionContext.getElement().map(this::annotatedElementToVersion)
28+
.orElse(null);
29+
30+
var builder = KubeAPIServerConfigBuilder.anAPIServerConfig();
31+
if (targetVersion != null) {
32+
log.debug("Using api version: {}", targetVersion);
33+
builder.withApiServerVersion(targetVersion);
34+
}
35+
kubeApiServer = new KubeAPIServer(builder.build());
1636
kubeApiServer.start();
1737
}
1838

39+
private String annotatedElementToVersion(AnnotatedElement ae) {
40+
var annotations = Arrays.stream(ae.getAnnotations())
41+
.filter(a -> a.annotationType().isAssignableFrom(EnableKubeAPIServer.class))
42+
.collect(Collectors.toList());
43+
if (annotations.size() > 1) {
44+
throw new JenvtestException(
45+
"Only one instance of @EnableKubeAPIServer annotation is allowed");
46+
}
47+
EnableKubeAPIServer target = (EnableKubeAPIServer) annotations.get(0);
48+
var version = target.kubeAPIVersion();
49+
return NOT_SET.equals(version) ? null : version;
50+
}
51+
1952
@Override
2053
public void afterAll(ExtensionContext extensionContext) throws Exception {
2154
kubeApiServer.stop();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package io.javaoperatorsdk.jenvtest;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
6+
import io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer;
7+
8+
import static io.javaoperatorsdk.jenvtest.TestUtils.simpleTest;
9+
import static org.assertj.core.api.Assertions.assertThat;
10+
11+
@EnableKubeAPIServer(kubeAPIVersion = TestUtils.NON_LATEST_API_SERVER_VERSION)
12+
class JUnitExtensionTargetVersionTest {
13+
14+
@Test
15+
void simpleTestWithTargetVersion() {
16+
var client = new KubernetesClientBuilder().build();
17+
18+
simpleTest(client);
19+
20+
String kubeVersion = client.getKubernetesVersion().getGitVersion().substring(1);
21+
assertThat(kubeVersion).isEqualTo(TestUtils.NON_LATEST_API_SERVER_VERSION);
22+
}
23+
24+
}
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,16 @@
11
package io.javaoperatorsdk.jenvtest;
22

3-
import org.assertj.core.api.Assertions;
43
import org.junit.jupiter.api.Test;
54

6-
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
75
import io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer;
86

7+
import static io.javaoperatorsdk.jenvtest.TestUtils.simpleTest;
8+
99
@EnableKubeAPIServer
1010
class JUnitExtensionTest {
1111

1212
@Test
1313
void testCommunication() {
14-
var client = new KubernetesClientBuilder().build();
15-
client.resource(TestUtils.testConfigMap()).createOrReplace();
16-
var cm = client.resource(TestUtils.testConfigMap()).get();
17-
18-
Assertions.assertThat(cm).isNotNull();
14+
simpleTest();
1915
}
2016
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package io.javaoperatorsdk.jenvtest;
22

3-
import org.assertj.core.api.Assertions;
43
import org.junit.jupiter.api.Test;
54

6-
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
7-
8-
import static org.assertj.core.api.Assertions.assertThat;
5+
import static io.javaoperatorsdk.jenvtest.TestUtils.NON_LATEST_API_SERVER_VERSION;
6+
import static io.javaoperatorsdk.jenvtest.TestUtils.simpleTest;
97

108
class KubeApiServerTest {
119

@@ -17,20 +15,14 @@ void trivialCase() {
1715
@Test
1816
void apiServerWithSpecificVersion() {
1917
testWithAPIServer(new KubeAPIServer(KubeAPIServerConfigBuilder.anAPIServerConfig()
20-
.withApiServerVersion("1.26.0")
18+
.withApiServerVersion(NON_LATEST_API_SERVER_VERSION)
2119
.build()));
2220
}
2321

2422

2523
void testWithAPIServer(KubeAPIServer kubeApi) {
2624
kubeApi.start();
27-
28-
var client = new KubernetesClientBuilder().build();
29-
client.resource(TestUtils.testConfigMap()).create();
30-
var cm = client.resource(TestUtils.testConfigMap()).get();
31-
32-
Assertions.assertThat(cm).isNotNull();
33-
25+
simpleTest();
3426
kubeApi.stop();
3527
}
3628
}

samples/src/test/java/io/javaoperatorsdk/jenvtest/TestUtils.java

+22
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,22 @@
22

33
import java.util.Map;
44

5+
import org.assertj.core.api.Assertions;
6+
57
import io.fabric8.kubernetes.api.model.ConfigMap;
68
import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
79
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
10+
import io.fabric8.kubernetes.client.KubernetesClient;
11+
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
812

913
public class TestUtils {
1014

15+
/**
16+
* Used in multiple tests so no multiple additional binaries are downloaded, therefore increases
17+
* duration of tests.
18+
**/
19+
public static final String NON_LATEST_API_SERVER_VERSION = "1.26.0";
20+
1121
public static ConfigMap testConfigMap() {
1222
return new ConfigMapBuilder()
1323
.withMetadata(new ObjectMetaBuilder()
@@ -18,4 +28,16 @@ public static ConfigMap testConfigMap() {
1828
.build();
1929
}
2030

31+
public static void simpleTest() {
32+
simpleTest(new KubernetesClientBuilder().build());
33+
}
34+
35+
public static void simpleTest(KubernetesClient client) {
36+
37+
client.resource(TestUtils.testConfigMap()).create();
38+
var cm = client.resource(TestUtils.testConfigMap()).get();
39+
40+
Assertions.assertThat(cm).isNotNull();
41+
}
42+
2143
}

0 commit comments

Comments
 (0)