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

Commit

Permalink
Merge branch 'main' into specify-api-server-flag_
Browse files Browse the repository at this point in the history
  • Loading branch information
csviri authored Mar 24, 2023
2 parents 40bca7f + ed306d4 commit 7c6a61c
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 23 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Include dependency:
### In Unit Tests

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

```java

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@ExtendWith(KubeAPIServerExtension.class)
@Target({TYPE, ANNOTATION_TYPE})
@Target({TYPE, METHOD, ANNOTATION_TYPE})
@Retention(RUNTIME)
public @interface EnableKubeAPIServer {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,55 +2,88 @@

import java.lang.reflect.AnnotatedElement;
import java.util.Arrays;
import java.util.Optional;
import java.util.stream.Collectors;

import org.junit.jupiter.api.extension.AfterAllCallback;
import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import io.javaoperatorsdk.jenvtest.JenvtestException;
import io.javaoperatorsdk.jenvtest.KubeAPIServer;
import io.javaoperatorsdk.jenvtest.KubeAPIServerConfig;
import io.javaoperatorsdk.jenvtest.KubeAPIServerConfigBuilder;

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

public class KubeAPIServerExtension implements BeforeAllCallback, AfterAllCallback {
public class KubeAPIServerExtension
implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback {

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

private KubeAPIServer kubeApiServer;

@Override
public void beforeAll(ExtensionContext extensionContext) throws Exception {
String targetVersion = extensionContext.getElement().map(this::annotatedElementToVersion)
.orElse(null);
public void beforeAll(ExtensionContext extensionContext) {
startIfAnnotationPresent(extensionContext);
}

@Override
public void afterAll(ExtensionContext extensionContext) {
stopIfAnnotationPresent(extensionContext);
}

@Override
public void beforeEach(ExtensionContext extensionContext) {
startIfAnnotationPresent(extensionContext);
}

@Override
public void afterEach(ExtensionContext extensionContext) {
stopIfAnnotationPresent(extensionContext);
}

private void startIfAnnotationPresent(ExtensionContext extensionContext) {
extensionContext.getElement().ifPresent(ae -> {
var annotation = getExtensionAnnotationInstance(ae);
annotation.ifPresent(a -> startApiServer(extensionContext, a));
});
}

private void startApiServer(ExtensionContext context, EnableKubeAPIServer annotation) {
kubeApiServer = new KubeAPIServer(annotationToConfig(annotation));
kubeApiServer.start();
}


private void stopIfAnnotationPresent(ExtensionContext extensionContext) {
extensionContext.getElement().ifPresent(ae -> {
var annotation = getExtensionAnnotationInstance(ae);
annotation.ifPresent(a -> kubeApiServer.stop());
});
}

private KubeAPIServerConfig annotationToConfig(EnableKubeAPIServer annotation) {
var builder = KubeAPIServerConfigBuilder.anAPIServerConfig();
if (targetVersion != null) {
log.debug("Using api version: {}", targetVersion);
builder.withApiServerVersion(targetVersion);
var version = annotation.kubeAPIVersion();
if (!NOT_SET.equals(version)) {
builder.withApiServerVersion(version);
}
kubeApiServer = new KubeAPIServer(builder.build());
kubeApiServer.start();
return builder.build();
}

private String annotatedElementToVersion(AnnotatedElement ae) {
private Optional<EnableKubeAPIServer> getExtensionAnnotationInstance(AnnotatedElement ae) {
var annotations = Arrays.stream(ae.getAnnotations())
.filter(a -> a.annotationType().isAssignableFrom(EnableKubeAPIServer.class))
.collect(Collectors.toList());
if (annotations.size() > 1) {
throw new JenvtestException(
"Only one instance of @EnableKubeAPIServer annotation is allowed");
} else if (annotations.isEmpty()) {
return Optional.empty();
} else {
return Optional.of((EnableKubeAPIServer) annotations.get(0));
}
EnableKubeAPIServer target = (EnableKubeAPIServer) annotations.get(0);
var version = target.kubeAPIVersion();
return NOT_SET.equals(version) ? null : version;
}

@Override
public void afterAll(ExtensionContext extensionContext) throws Exception {
kubeApiServer.stop();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import static io.javaoperatorsdk.jenvtest.TestUtils.simpleTest;

@EnableKubeAPIServer
class JUnitExtensionTest {
class JUnitExtensionOnClassTest {

@Test
void testCommunication() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.javaoperatorsdk.jenvtest;

import org.junit.jupiter.api.Test;

import io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer;

import static io.javaoperatorsdk.jenvtest.TestUtils.simpleTest;

class JUnitExtensionOnMethodTest {

@Test
@EnableKubeAPIServer
void testCommunication() {
simpleTest();
}

}

0 comments on commit 7c6a61c

Please sign in to comment.