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

Commit ed306d4

Browse files
authored
feat: annotation on method (#47)
1 parent 6fadd8c commit ed306d4

File tree

5 files changed

+73
-23
lines changed

5 files changed

+73
-23
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Include dependency:
2525
### In Unit Tests
2626

2727
See sample unit
28-
test [here](https://github.com/java-operator-sdk/jenvtest/blob/main/samples/src/test/java/io/javaoperatorsdk/jenvtest/JUnitExtensionTest.java#L10-L10)
28+
test [here](https://github.com/java-operator-sdk/jenvtest/blob/6fadd8cb07ea0a61410175abf1f6ec495bf6a20f/samples/src/test/java/io/javaoperatorsdk/jenvtest/JUnitExtensionOnClassTest.java)
2929

3030
```java
3131

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import static java.lang.annotation.RetentionPolicy.RUNTIME;
1010

1111
@ExtendWith(KubeAPIServerExtension.class)
12-
@Target({TYPE, ANNOTATION_TYPE})
12+
@Target({TYPE, METHOD, ANNOTATION_TYPE})
1313
@Retention(RUNTIME)
1414
public @interface EnableKubeAPIServer {
1515

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

Lines changed: 53 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,55 +2,88 @@
22

33
import java.lang.reflect.AnnotatedElement;
44
import java.util.Arrays;
5+
import java.util.Optional;
56
import java.util.stream.Collectors;
67

7-
import org.junit.jupiter.api.extension.AfterAllCallback;
8-
import org.junit.jupiter.api.extension.BeforeAllCallback;
9-
import org.junit.jupiter.api.extension.ExtensionContext;
8+
import org.junit.jupiter.api.extension.*;
109
import org.slf4j.Logger;
1110
import org.slf4j.LoggerFactory;
1211

1312
import io.javaoperatorsdk.jenvtest.JenvtestException;
1413
import io.javaoperatorsdk.jenvtest.KubeAPIServer;
14+
import io.javaoperatorsdk.jenvtest.KubeAPIServerConfig;
1515
import io.javaoperatorsdk.jenvtest.KubeAPIServerConfigBuilder;
1616

1717
import static io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer.NOT_SET;
1818

19-
public class KubeAPIServerExtension implements BeforeAllCallback, AfterAllCallback {
19+
public class KubeAPIServerExtension
20+
implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback {
2021

2122
private static final Logger log = LoggerFactory.getLogger(KubeAPIServerExtension.class);
2223

2324
private KubeAPIServer kubeApiServer;
2425

2526
@Override
26-
public void beforeAll(ExtensionContext extensionContext) throws Exception {
27-
String targetVersion = extensionContext.getElement().map(this::annotatedElementToVersion)
28-
.orElse(null);
27+
public void beforeAll(ExtensionContext extensionContext) {
28+
startIfAnnotationPresent(extensionContext);
29+
}
30+
31+
@Override
32+
public void afterAll(ExtensionContext extensionContext) {
33+
stopIfAnnotationPresent(extensionContext);
34+
}
2935

36+
@Override
37+
public void beforeEach(ExtensionContext extensionContext) {
38+
startIfAnnotationPresent(extensionContext);
39+
}
40+
41+
@Override
42+
public void afterEach(ExtensionContext extensionContext) {
43+
stopIfAnnotationPresent(extensionContext);
44+
}
45+
46+
private void startIfAnnotationPresent(ExtensionContext extensionContext) {
47+
extensionContext.getElement().ifPresent(ae -> {
48+
var annotation = getExtensionAnnotationInstance(ae);
49+
annotation.ifPresent(a -> startApiServer(extensionContext, a));
50+
});
51+
}
52+
53+
private void startApiServer(ExtensionContext context, EnableKubeAPIServer annotation) {
54+
kubeApiServer = new KubeAPIServer(annotationToConfig(annotation));
55+
kubeApiServer.start();
56+
}
57+
58+
59+
private void stopIfAnnotationPresent(ExtensionContext extensionContext) {
60+
extensionContext.getElement().ifPresent(ae -> {
61+
var annotation = getExtensionAnnotationInstance(ae);
62+
annotation.ifPresent(a -> kubeApiServer.stop());
63+
});
64+
}
65+
66+
private KubeAPIServerConfig annotationToConfig(EnableKubeAPIServer annotation) {
3067
var builder = KubeAPIServerConfigBuilder.anAPIServerConfig();
31-
if (targetVersion != null) {
32-
log.debug("Using api version: {}", targetVersion);
33-
builder.withApiServerVersion(targetVersion);
68+
var version = annotation.kubeAPIVersion();
69+
if (!NOT_SET.equals(version)) {
70+
builder.withApiServerVersion(version);
3471
}
35-
kubeApiServer = new KubeAPIServer(builder.build());
36-
kubeApiServer.start();
72+
return builder.build();
3773
}
3874

39-
private String annotatedElementToVersion(AnnotatedElement ae) {
75+
private Optional<EnableKubeAPIServer> getExtensionAnnotationInstance(AnnotatedElement ae) {
4076
var annotations = Arrays.stream(ae.getAnnotations())
4177
.filter(a -> a.annotationType().isAssignableFrom(EnableKubeAPIServer.class))
4278
.collect(Collectors.toList());
4379
if (annotations.size() > 1) {
4480
throw new JenvtestException(
4581
"Only one instance of @EnableKubeAPIServer annotation is allowed");
82+
} else if (annotations.isEmpty()) {
83+
return Optional.empty();
84+
} else {
85+
return Optional.of((EnableKubeAPIServer) annotations.get(0));
4686
}
47-
EnableKubeAPIServer target = (EnableKubeAPIServer) annotations.get(0);
48-
var version = target.kubeAPIVersion();
49-
return NOT_SET.equals(version) ? null : version;
5087
}
5188

52-
@Override
53-
public void afterAll(ExtensionContext extensionContext) throws Exception {
54-
kubeApiServer.stop();
55-
}
5689
}

samples/src/test/java/io/javaoperatorsdk/jenvtest/JUnitExtensionTest.java renamed to samples/src/test/java/io/javaoperatorsdk/jenvtest/JUnitExtensionOnClassTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import static io.javaoperatorsdk.jenvtest.TestUtils.simpleTest;
88

99
@EnableKubeAPIServer
10-
class JUnitExtensionTest {
10+
class JUnitExtensionOnClassTest {
1111

1212
@Test
1313
void testCommunication() {
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package io.javaoperatorsdk.jenvtest;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer;
6+
7+
import static io.javaoperatorsdk.jenvtest.TestUtils.simpleTest;
8+
9+
class JUnitExtensionOnMethodTest {
10+
11+
@Test
12+
@EnableKubeAPIServer
13+
void testCommunication() {
14+
simpleTest();
15+
}
16+
17+
}

0 commit comments

Comments
 (0)