From 602c185830e34ea3d2c563a92cbc88235ada4b62 Mon Sep 17 00:00:00 2001 From: csviri Date: Mon, 21 Nov 2022 14:17:54 +0100 Subject: [PATCH 1/2] fix: shating more code between tests --- .../sample/commons/AdmissionControllers.java | 83 +++++++++++++ .../sample/commons/ConversionControllers.java | 27 ++++ .../main}/resources/admission-request.json | 0 .../resources/conversion-error-request.json | 0 .../main}/resources/conversion-request.json | 0 .../admission/AdmissionControllerConfig.java | 41 +------ .../quarkus/admission/AdmissionEndpoint.java | 4 - .../ConversionControllerConfig.java | 16 +-- .../admission/AdditionalAdmissionConfig.java | 21 +--- .../AdmissionAdditionalTestEndpoint.java | 6 +- .../admission/AdmissionEndpointTest.java | 9 +- .../springboot/admission/AdmissionConfig.java | 41 +------ .../conversion/ConversionConfig.java | 15 +-- .../admission/AdditionalAdmissionConfig.java | 22 +--- .../admission/AdmissionEndpointTest.java | 15 +-- .../conversion/ConversionEndpointTest.java | 23 ++-- .../src/test/resources/admission-request.json | 116 ------------------ .../resources/conversion-error-request.json | 30 ----- .../test/resources/conversion-request.json | 47 ------- 19 files changed, 160 insertions(+), 356 deletions(-) create mode 100644 samples/commons/src/main/java/io/javaoperatorsdk/webhook/sample/commons/AdmissionControllers.java create mode 100644 samples/commons/src/main/java/io/javaoperatorsdk/webhook/sample/commons/ConversionControllers.java rename samples/{quarkus/src/test => commons/src/main}/resources/admission-request.json (100%) rename samples/{quarkus/src/test => commons/src/main}/resources/conversion-error-request.json (100%) rename samples/{quarkus/src/test => commons/src/main}/resources/conversion-request.json (100%) delete mode 100644 samples/spring-boot/src/test/resources/admission-request.json delete mode 100644 samples/spring-boot/src/test/resources/conversion-error-request.json delete mode 100644 samples/spring-boot/src/test/resources/conversion-request.json diff --git a/samples/commons/src/main/java/io/javaoperatorsdk/webhook/sample/commons/AdmissionControllers.java b/samples/commons/src/main/java/io/javaoperatorsdk/webhook/sample/commons/AdmissionControllers.java new file mode 100644 index 00000000..310d82b9 --- /dev/null +++ b/samples/commons/src/main/java/io/javaoperatorsdk/webhook/sample/commons/AdmissionControllers.java @@ -0,0 +1,83 @@ +package io.javaoperatorsdk.webhook.sample.commons; + +import java.util.HashMap; +import java.util.concurrent.CompletableFuture; + +import io.fabric8.kubernetes.api.model.Pod; +import io.javaoperatorsdk.webhook.admission.AdmissionController; +import io.javaoperatorsdk.webhook.admission.AsyncAdmissionController; +import io.javaoperatorsdk.webhook.admission.NotAllowedException; +import io.javaoperatorsdk.webhook.admission.mutation.AsyncMutator; +import io.javaoperatorsdk.webhook.admission.mutation.Mutator; +import io.javaoperatorsdk.webhook.admission.validation.Validator; + +public class AdmissionControllers { + + public static final String ERROR_MESSAGE = "Some error happened"; + public static final String APP_NAME_LABEL_KEY = "app.kubernetes.io/name"; + + public static AdmissionController mutatingController() { + return new AdmissionController<>((resource, operation) -> { + if (resource.getMetadata().getLabels() == null) { + resource.getMetadata().setLabels(new HashMap<>()); + } + + resource.getMetadata().getLabels().putIfAbsent(APP_NAME_LABEL_KEY, "mutation-test"); + return resource; + }); + } + + public static AdmissionController validatingController() { + return new AdmissionController<>((resource, operation) -> { + if (resource.getMetadata().getLabels() == null + || resource.getMetadata().getLabels().get(APP_NAME_LABEL_KEY) == null) { + throw new NotAllowedException("Missing label: " + APP_NAME_LABEL_KEY); + } + }); + } + + public static AsyncAdmissionController asyncMutatingController() { + return new AsyncAdmissionController<>( + (AsyncMutator) (resource, operation) -> CompletableFuture.supplyAsync(() -> { + if (resource.getMetadata().getLabels() == null) { + resource.getMetadata().setLabels(new HashMap<>()); + } + resource.getMetadata().getLabels().putIfAbsent(APP_NAME_LABEL_KEY, "mutation-test"); + return resource; + })); + } + + public static AsyncAdmissionController asyncValidatingController() { + return new AsyncAdmissionController<>((resource, operation) -> { + if (resource.getMetadata().getLabels() == null + || resource.getMetadata().getLabels().get(APP_NAME_LABEL_KEY) == null) { + throw new NotAllowedException("Missing label: " + APP_NAME_LABEL_KEY); + } + }); + } + + + public static AdmissionController errorMutatingController() { + return new AdmissionController<>((Validator) (resource, operation) -> { + throw new IllegalStateException(ERROR_MESSAGE); + }); + } + + public static AdmissionController errorValidatingController() { + return new AdmissionController<>((Mutator) (resource, operation) -> { + throw new IllegalStateException(ERROR_MESSAGE); + }); + } + + public static AsyncAdmissionController errorAsyncMutatingController() { + return new AsyncAdmissionController<>((AsyncMutator) (resource, operation) -> { + throw new IllegalStateException(ERROR_MESSAGE); + }); + } + + public static AsyncAdmissionController errorAsyncValidatingController() { + return new AsyncAdmissionController<>((Validator) (resource, operation) -> { + throw new IllegalStateException(ERROR_MESSAGE); + }); + } +} diff --git a/samples/commons/src/main/java/io/javaoperatorsdk/webhook/sample/commons/ConversionControllers.java b/samples/commons/src/main/java/io/javaoperatorsdk/webhook/sample/commons/ConversionControllers.java new file mode 100644 index 00000000..de21bc71 --- /dev/null +++ b/samples/commons/src/main/java/io/javaoperatorsdk/webhook/sample/commons/ConversionControllers.java @@ -0,0 +1,27 @@ +package io.javaoperatorsdk.webhook.sample.commons; + +import io.javaoperatorsdk.webhook.conversion.AsyncConversionController; +import io.javaoperatorsdk.webhook.conversion.ConversionController; +import io.javaoperatorsdk.webhook.sample.commons.mapper.AsyncV1Mapper; +import io.javaoperatorsdk.webhook.sample.commons.mapper.AsyncV2Mapper; +import io.javaoperatorsdk.webhook.sample.commons.mapper.V1Mapper; +import io.javaoperatorsdk.webhook.sample.commons.mapper.V2Mapper; + +public class ConversionControllers { + + public static ConversionController conversionController() { + var controller = new ConversionController(); + controller.registerMapper(new V1Mapper()); + controller.registerMapper(new V2Mapper()); + return controller; + } + + + public static AsyncConversionController asyncConversionController() { + var controller = new AsyncConversionController(); + controller.registerMapper(new AsyncV1Mapper()); + controller.registerMapper(new AsyncV2Mapper()); + return controller; + } + +} diff --git a/samples/quarkus/src/test/resources/admission-request.json b/samples/commons/src/main/resources/admission-request.json similarity index 100% rename from samples/quarkus/src/test/resources/admission-request.json rename to samples/commons/src/main/resources/admission-request.json diff --git a/samples/quarkus/src/test/resources/conversion-error-request.json b/samples/commons/src/main/resources/conversion-error-request.json similarity index 100% rename from samples/quarkus/src/test/resources/conversion-error-request.json rename to samples/commons/src/main/resources/conversion-error-request.json diff --git a/samples/quarkus/src/test/resources/conversion-request.json b/samples/commons/src/main/resources/conversion-request.json similarity index 100% rename from samples/quarkus/src/test/resources/conversion-request.json rename to samples/commons/src/main/resources/conversion-request.json diff --git a/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionControllerConfig.java b/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionControllerConfig.java index 3a0402a7..28b09f0d 100644 --- a/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionControllerConfig.java +++ b/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionControllerConfig.java @@ -1,21 +1,15 @@ package io.javaoperatorsdk.webhook.admission.sample.quarkus.admission; -import java.util.HashMap; -import java.util.concurrent.CompletableFuture; - import javax.inject.Named; import javax.inject.Singleton; import io.fabric8.kubernetes.api.model.Pod; import io.javaoperatorsdk.webhook.admission.AdmissionController; import io.javaoperatorsdk.webhook.admission.AsyncAdmissionController; -import io.javaoperatorsdk.webhook.admission.NotAllowedException; -import io.javaoperatorsdk.webhook.admission.mutation.AsyncMutator; +import io.javaoperatorsdk.webhook.sample.commons.AdmissionControllers; public class AdmissionControllerConfig { - public static final String APP_NAME_LABEL_KEY = "app.kubernetes.io/name"; - public static final String MUTATING_CONTROLLER = "mutatingController"; public static final String VALIDATING_CONTROLLER = "validatingController"; public static final String ASYNC_MUTATING_CONTROLLER = "asyncMutatingController"; @@ -24,49 +18,24 @@ public class AdmissionControllerConfig { @Singleton @Named(MUTATING_CONTROLLER) public AdmissionController mutatingController() { - return new AdmissionController<>((resource, operation) -> { - if (resource.getMetadata().getLabels() == null) { - resource.getMetadata().setLabels(new HashMap<>()); - } - - resource.getMetadata().getLabels().putIfAbsent(APP_NAME_LABEL_KEY, "mutation-test"); - return resource; - }); + return AdmissionControllers.mutatingController(); } @Singleton @Named(VALIDATING_CONTROLLER) public AdmissionController validatingController() { - return new AdmissionController<>((resource, operation) -> { - if (resource.getMetadata().getLabels() == null - || resource.getMetadata().getLabels().get(APP_NAME_LABEL_KEY) == null) { - throw new NotAllowedException("Missing label: " + APP_NAME_LABEL_KEY); - } - }); + return AdmissionControllers.validatingController(); } @Singleton @Named(ASYNC_MUTATING_CONTROLLER) public AsyncAdmissionController asyncMutatingController() { - return new AsyncAdmissionController<>( - (AsyncMutator) (resource, operation) -> CompletableFuture.supplyAsync(() -> { - if (resource.getMetadata().getLabels() == null) { - resource.getMetadata().setLabels(new HashMap<>()); - } - - resource.getMetadata().getLabels().putIfAbsent(APP_NAME_LABEL_KEY, "mutation-test"); - return resource; - })); + return AdmissionControllers.asyncMutatingController(); } @Singleton @Named(ASYNC_VALIDATING_CONTROLLER) public AsyncAdmissionController asyncValidatingController() { - return new AsyncAdmissionController<>((resource, operation) -> { - if (resource.getMetadata().getLabels() == null - || resource.getMetadata().getLabels().get(APP_NAME_LABEL_KEY) == null) { - throw new NotAllowedException("Missing label: " + APP_NAME_LABEL_KEY); - } - }); + return AdmissionControllers.asyncValidatingController(); } } diff --git a/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionEndpoint.java b/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionEndpoint.java index 69389176..7ad6cef4 100644 --- a/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionEndpoint.java +++ b/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionEndpoint.java @@ -16,12 +16,8 @@ public class AdmissionEndpoint { public static final String MUTATE_PATH = "mutate"; public static final String VALIDATE_PATH = "validate"; - public static final String ERROR_MUTATE_PATH = "error-mutate"; - public static final String ERROR_VALIDATE_PATH = "error-validate"; public static final String ASYNC_MUTATE_PATH = "async-mutate"; public static final String ASYNC_VALIDATE_PATH = "async-validate"; - public static final String ERROR_ASYNC_MUTATE_PATH = "error-async-mutate"; - public static final String ERROR_ASYNC_VALIDATE_PATH = "error-async-validate"; private final AdmissionController mutationController; private final AdmissionController validationController; diff --git a/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/conversion/ConversionControllerConfig.java b/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/conversion/ConversionControllerConfig.java index f6efd774..b7788cc4 100644 --- a/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/conversion/ConversionControllerConfig.java +++ b/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/conversion/ConversionControllerConfig.java @@ -4,28 +4,18 @@ import io.javaoperatorsdk.webhook.conversion.AsyncConversionController; import io.javaoperatorsdk.webhook.conversion.ConversionController; -import io.javaoperatorsdk.webhook.sample.commons.mapper.AsyncV1Mapper; -import io.javaoperatorsdk.webhook.sample.commons.mapper.AsyncV2Mapper; -import io.javaoperatorsdk.webhook.sample.commons.mapper.V1Mapper; -import io.javaoperatorsdk.webhook.sample.commons.mapper.V2Mapper; +import io.javaoperatorsdk.webhook.sample.commons.ConversionControllers; public class ConversionControllerConfig { - @Singleton public ConversionController conversionController() { - var controller = new ConversionController(); - controller.registerMapper(new V1Mapper()); - controller.registerMapper(new V2Mapper()); - return controller; + return ConversionControllers.conversionController(); } @Singleton public AsyncConversionController asyncConversionController() { - var controller = new AsyncConversionController(); - controller.registerMapper(new AsyncV1Mapper()); - controller.registerMapper(new AsyncV2Mapper()); - return controller; + return ConversionControllers.asyncConversionController(); } } diff --git a/samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdditionalAdmissionConfig.java b/samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdditionalAdmissionConfig.java index 89a8289a..c3c16ddb 100644 --- a/samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdditionalAdmissionConfig.java +++ b/samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdditionalAdmissionConfig.java @@ -6,9 +6,7 @@ import io.fabric8.kubernetes.api.model.Pod; import io.javaoperatorsdk.webhook.admission.AdmissionController; import io.javaoperatorsdk.webhook.admission.AsyncAdmissionController; -import io.javaoperatorsdk.webhook.admission.mutation.AsyncMutator; -import io.javaoperatorsdk.webhook.admission.mutation.Mutator; -import io.javaoperatorsdk.webhook.admission.validation.Validator; +import io.javaoperatorsdk.webhook.sample.commons.AdmissionControllers; public class AdditionalAdmissionConfig { @@ -16,37 +14,28 @@ public class AdditionalAdmissionConfig { public static final String ERROR_VALIDATING_CONTROLLER = "errorValidatingController"; public static final String ERROR_ASYNC_MUTATING_CONTROLLER = "errorAsyncMutatingController"; public static final String ERROR_ASYNC_VALIDATING_CONTROLLER = "errorAsyncValidatingController"; - public static final String ERROR_MESSAGE = "Some error happened"; @Singleton @Named(ERROR_MUTATING_CONTROLLER) public AdmissionController errorMutatingController() { - return new AdmissionController<>((Validator) (resource, operation) -> { - throw new IllegalStateException(ERROR_MESSAGE); - }); + return AdmissionControllers.errorMutatingController(); } @Singleton @Named(ERROR_VALIDATING_CONTROLLER) public AdmissionController errorValidatingController() { - return new AdmissionController<>((Mutator) (resource, operation) -> { - throw new IllegalStateException(ERROR_MESSAGE); - }); + return AdmissionControllers.errorValidatingController(); } @Singleton @Named(ERROR_ASYNC_MUTATING_CONTROLLER) public AsyncAdmissionController errorAsyncMutatingController() { - return new AsyncAdmissionController<>((AsyncMutator) (resource, operation) -> { - throw new IllegalStateException(ERROR_MESSAGE); - }); + return AdmissionControllers.errorAsyncMutatingController(); } @Singleton @Named(ERROR_ASYNC_VALIDATING_CONTROLLER) public AsyncAdmissionController errorAsyncValidatingController() { - return new AsyncAdmissionController<>((Validator) (resource, operation) -> { - throw new IllegalStateException(ERROR_MESSAGE); - }); + return AdmissionControllers.errorAsyncValidatingController(); } } diff --git a/samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionAdditionalTestEndpoint.java b/samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionAdditionalTestEndpoint.java index c2704e5f..f4adc2f1 100644 --- a/samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionAdditionalTestEndpoint.java +++ b/samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionAdditionalTestEndpoint.java @@ -19,12 +19,16 @@ @Path("/") public class AdmissionAdditionalTestEndpoint { + public static final String ERROR_ASYNC_MUTATE_PATH = "error-async-mutate"; + public static final String ERROR_ASYNC_VALIDATE_PATH = "error-async-validate"; + public static final String ERROR_MUTATE_PATH = "error-mutate"; + public static final String ERROR_VALIDATE_PATH = "error-validate"; + private final AdmissionController errorMutationController; private final AdmissionController errorValidationController; private final AsyncAdmissionController errorAsyncMutationController; private final AsyncAdmissionController errorAsyncValidationController; - @Inject public AdmissionAdditionalTestEndpoint( @Named(AdditionalAdmissionConfig.ERROR_MUTATING_CONTROLLER) AdmissionController errorMutationController, diff --git a/samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionEndpointTest.java b/samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionEndpointTest.java index 97af8bc0..d9d0c5b5 100644 --- a/samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionEndpointTest.java +++ b/samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionEndpointTest.java @@ -10,6 +10,7 @@ import io.quarkus.test.junit.QuarkusTest; import io.restassured.http.ContentType; +import static io.javaoperatorsdk.webhook.admission.sample.quarkus.admission.AdmissionAdditionalTestEndpoint.*; import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.is; @@ -33,12 +34,12 @@ void validates() { @Test void errorMutates() { - testServerErrorOnPath(AdmissionEndpoint.ERROR_MUTATE_PATH); + testServerErrorOnPath(ERROR_MUTATE_PATH); } @Test void errorValidates() { - testServerErrorOnPath(AdmissionEndpoint.ERROR_VALIDATE_PATH); + testServerErrorOnPath(ERROR_VALIDATE_PATH); } @Test @@ -53,12 +54,12 @@ void asyncValidates() { @Test void errorAsyncValidation() { - testServerErrorOnPath(AdmissionEndpoint.ERROR_ASYNC_VALIDATE_PATH); + testServerErrorOnPath(ERROR_ASYNC_VALIDATE_PATH); } @Test void errorAsyncMutation() { - testServerErrorOnPath(AdmissionEndpoint.ERROR_ASYNC_MUTATE_PATH); + testServerErrorOnPath(ERROR_ASYNC_MUTATE_PATH); } private void testServerErrorOnPath(String path) { diff --git a/samples/spring-boot/src/main/java/io/javaoperatorsdk/webhook/sample/springboot/admission/AdmissionConfig.java b/samples/spring-boot/src/main/java/io/javaoperatorsdk/webhook/sample/springboot/admission/AdmissionConfig.java index 252ebbd7..42b2f094 100644 --- a/samples/spring-boot/src/main/java/io/javaoperatorsdk/webhook/sample/springboot/admission/AdmissionConfig.java +++ b/samples/spring-boot/src/main/java/io/javaoperatorsdk/webhook/sample/springboot/admission/AdmissionConfig.java @@ -1,64 +1,33 @@ package io.javaoperatorsdk.webhook.sample.springboot.admission; -import java.util.HashMap; -import java.util.concurrent.CompletableFuture; - import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import io.fabric8.kubernetes.api.model.Pod; import io.javaoperatorsdk.webhook.admission.AdmissionController; import io.javaoperatorsdk.webhook.admission.AsyncAdmissionController; -import io.javaoperatorsdk.webhook.admission.NotAllowedException; -import io.javaoperatorsdk.webhook.admission.mutation.AsyncMutator; +import io.javaoperatorsdk.webhook.sample.commons.AdmissionControllers; @Configuration public class AdmissionConfig { - public static final String APP_NAME_LABEL_KEY = "app.kubernetes.io/name"; - @Bean public AdmissionController mutatingController() { - return new AdmissionController<>((resource, operation) -> { - if (resource.getMetadata().getLabels() == null) { - resource.getMetadata().setLabels(new HashMap<>()); - } - resource.getMetadata().getLabels().putIfAbsent(APP_NAME_LABEL_KEY, "mutation-test"); - return resource; - }); + return AdmissionControllers.mutatingController(); } @Bean public AdmissionController validatingController() { - return new AdmissionController<>((resource, operation) -> { - if (resource.getMetadata().getLabels() == null - || resource.getMetadata().getLabels().get(APP_NAME_LABEL_KEY) == null) { - throw new NotAllowedException("Missing label: " + APP_NAME_LABEL_KEY); - } - }); + return AdmissionControllers.validatingController(); } - @Bean public AsyncAdmissionController asyncMutatingController() { - return new AsyncAdmissionController<>( - (AsyncMutator) (resource, operation) -> CompletableFuture.supplyAsync(() -> { - if (resource.getMetadata().getLabels() == null) { - resource.getMetadata().setLabels(new HashMap<>()); - } - - resource.getMetadata().getLabels().putIfAbsent(APP_NAME_LABEL_KEY, "mutation-test"); - return resource; - })); + return AdmissionControllers.asyncMutatingController(); } @Bean public AsyncAdmissionController asyncValidatingController() { - return new AsyncAdmissionController<>((resource, operation) -> { - if (resource.getMetadata().getLabels() == null - || resource.getMetadata().getLabels().get(APP_NAME_LABEL_KEY) == null) { - throw new NotAllowedException("Missing label: " + APP_NAME_LABEL_KEY); - } - }); + return AdmissionControllers.asyncValidatingController(); } } diff --git a/samples/spring-boot/src/main/java/io/javaoperatorsdk/webhook/sample/springboot/conversion/ConversionConfig.java b/samples/spring-boot/src/main/java/io/javaoperatorsdk/webhook/sample/springboot/conversion/ConversionConfig.java index 406899b0..932cf717 100644 --- a/samples/spring-boot/src/main/java/io/javaoperatorsdk/webhook/sample/springboot/conversion/ConversionConfig.java +++ b/samples/spring-boot/src/main/java/io/javaoperatorsdk/webhook/sample/springboot/conversion/ConversionConfig.java @@ -5,28 +5,19 @@ import io.javaoperatorsdk.webhook.conversion.AsyncConversionController; import io.javaoperatorsdk.webhook.conversion.ConversionController; -import io.javaoperatorsdk.webhook.sample.commons.mapper.AsyncV1Mapper; -import io.javaoperatorsdk.webhook.sample.commons.mapper.AsyncV2Mapper; -import io.javaoperatorsdk.webhook.sample.commons.mapper.V1Mapper; -import io.javaoperatorsdk.webhook.sample.commons.mapper.V2Mapper; +import io.javaoperatorsdk.webhook.sample.commons.ConversionControllers; @Configuration public class ConversionConfig { @Bean public ConversionController conversionController() { - var controller = new ConversionController(); - controller.registerMapper(new V1Mapper()); - controller.registerMapper(new V2Mapper()); - return controller; + return ConversionControllers.conversionController(); } @Bean public AsyncConversionController asyncConversionController() { - var controller = new AsyncConversionController(); - controller.registerMapper(new AsyncV1Mapper()); - controller.registerMapper(new AsyncV2Mapper()); - return controller; + return ConversionControllers.asyncConversionController(); } } diff --git a/samples/spring-boot/src/test/java/io/javaoperatorsdk/webhook/sample/springboot/admission/AdditionalAdmissionConfig.java b/samples/spring-boot/src/test/java/io/javaoperatorsdk/webhook/sample/springboot/admission/AdditionalAdmissionConfig.java index bd6a10d6..7bc198ec 100644 --- a/samples/spring-boot/src/test/java/io/javaoperatorsdk/webhook/sample/springboot/admission/AdditionalAdmissionConfig.java +++ b/samples/spring-boot/src/test/java/io/javaoperatorsdk/webhook/sample/springboot/admission/AdditionalAdmissionConfig.java @@ -6,40 +6,28 @@ import io.fabric8.kubernetes.api.model.Pod; import io.javaoperatorsdk.webhook.admission.AdmissionController; import io.javaoperatorsdk.webhook.admission.AsyncAdmissionController; -import io.javaoperatorsdk.webhook.admission.mutation.AsyncMutator; -import io.javaoperatorsdk.webhook.admission.mutation.Mutator; -import io.javaoperatorsdk.webhook.admission.validation.Validator; +import io.javaoperatorsdk.webhook.sample.commons.AdmissionControllers; @Configuration public class AdditionalAdmissionConfig { - public static final String ERROR_MESSAGE = "Some error happened"; - @Bean public AdmissionController errorMutatingController() { - return new AdmissionController<>((Validator) (resource, operation) -> { - throw new IllegalStateException(ERROR_MESSAGE); - }); + return AdmissionControllers.errorMutatingController(); } @Bean public AdmissionController errorValidatingController() { - return new AdmissionController<>((Mutator) (resource, operation) -> { - throw new IllegalStateException(ERROR_MESSAGE); - }); + return AdmissionControllers.errorValidatingController(); } @Bean public AsyncAdmissionController errorAsyncMutatingController() { - return new AsyncAdmissionController<>((AsyncMutator) (resource, operation) -> { - throw new IllegalStateException(ERROR_MESSAGE); - }); + return AdmissionControllers.errorAsyncMutatingController(); } @Bean public AsyncAdmissionController errorAsyncValidatingController() { - return new AsyncAdmissionController<>((Validator) (resource, operation) -> { - throw new IllegalStateException(ERROR_MESSAGE); - }); + return AdmissionControllers.errorAsyncValidatingController(); } } diff --git a/samples/spring-boot/src/test/java/io/javaoperatorsdk/webhook/sample/springboot/admission/AdmissionEndpointTest.java b/samples/spring-boot/src/test/java/io/javaoperatorsdk/webhook/sample/springboot/admission/AdmissionEndpointTest.java index c38a64c9..505d27e3 100644 --- a/samples/spring-boot/src/test/java/io/javaoperatorsdk/webhook/sample/springboot/admission/AdmissionEndpointTest.java +++ b/samples/spring-boot/src/test/java/io/javaoperatorsdk/webhook/sample/springboot/admission/AdmissionEndpointTest.java @@ -1,17 +1,16 @@ package io.javaoperatorsdk.webhook.sample.springboot.admission; import java.io.IOException; -import java.nio.file.Files; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest; import org.springframework.context.annotation.Import; -import org.springframework.core.io.Resource; +import org.springframework.core.io.ClassPathResource; import org.springframework.http.MediaType; import org.springframework.http.ReactiveHttpOutputMessage; import org.springframework.test.web.reactive.server.WebTestClient; +import org.springframework.util.FileCopyUtils; import org.springframework.web.reactive.function.BodyInserter; import org.springframework.web.reactive.function.BodyInserters; @@ -25,9 +24,6 @@ class AdmissionEndpointTest { @Autowired private WebTestClient webClient; - @Value("classpath:admission-request.json") - private Resource request; - @Test void validation() { testValidate(VALIDATE_PATH); @@ -44,7 +40,7 @@ void asyncValidation() { } @Test - void asyncMutation() throws Exception { + void asyncMutation() { testMutate(ASYNC_MUTATE_PATH); } @@ -93,10 +89,11 @@ public void testValidate(String path) { private BodyInserter request() { try { - return BodyInserters.fromValue(new String(Files.readAllBytes(request.getFile().toPath()))); + ClassPathResource classPathResource = new ClassPathResource("admission-request.json"); + return BodyInserters + .fromValue(new String(FileCopyUtils.copyToByteArray(classPathResource.getInputStream()))); } catch (IOException e) { throw new IllegalStateException(e); } } - } diff --git a/samples/spring-boot/src/test/java/io/javaoperatorsdk/webhook/sample/springboot/conversion/ConversionEndpointTest.java b/samples/spring-boot/src/test/java/io/javaoperatorsdk/webhook/sample/springboot/conversion/ConversionEndpointTest.java index 8da5b9ba..c35e0d89 100644 --- a/samples/spring-boot/src/test/java/io/javaoperatorsdk/webhook/sample/springboot/conversion/ConversionEndpointTest.java +++ b/samples/spring-boot/src/test/java/io/javaoperatorsdk/webhook/sample/springboot/conversion/ConversionEndpointTest.java @@ -1,18 +1,16 @@ package io.javaoperatorsdk.webhook.sample.springboot.conversion; import java.io.IOException; -import java.nio.file.Files; -import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest; import org.springframework.context.annotation.Import; -import org.springframework.core.io.Resource; +import org.springframework.core.io.ClassPathResource; import org.springframework.http.MediaType; import org.springframework.http.ReactiveHttpOutputMessage; import org.springframework.test.web.reactive.server.WebTestClient; +import org.springframework.util.FileCopyUtils; import org.springframework.web.reactive.function.BodyInserter; import org.springframework.web.reactive.function.BodyInserters; @@ -30,12 +28,6 @@ class ConversionEndpointTest { @Autowired private WebTestClient webClient; - @Value("classpath:conversion-request.json") - private Resource request; - - @Value("classpath:conversion-error-request.json") - private Resource errorRequest; - @Test void convert() { testConversion(CONVERSION_PATH); @@ -77,17 +69,18 @@ public void testConversion(String path) { } private BodyInserter request() { - return requestFromResource(request); + return requestFromResource("/conversion-request.json"); } private BodyInserter errorRequest() { - return requestFromResource(errorRequest); + return requestFromResource("/conversion-error-request.json"); } - @NotNull - private BodyInserter requestFromResource(Resource request) { + private BodyInserter requestFromResource(String resource) { try { - return BodyInserters.fromValue(new String(Files.readAllBytes(request.getFile().toPath()))); + ClassPathResource classPathResource = new ClassPathResource(resource); + return BodyInserters + .fromValue(new String(FileCopyUtils.copyToByteArray(classPathResource.getInputStream()))); } catch (IOException e) { throw new IllegalStateException(e); } diff --git a/samples/spring-boot/src/test/resources/admission-request.json b/samples/spring-boot/src/test/resources/admission-request.json deleted file mode 100644 index 072f583a..00000000 --- a/samples/spring-boot/src/test/resources/admission-request.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "kind": "AdmissionReview", - "apiVersion": "admission.k8s.io/v1beta1", - "request": { - "uid": "0df28fbd-5f5f-11e8-bc74-36e6bb280816", - "kind": { - "group": "", - "version": "v1", - "kind": "Pod" - }, - "resource": { - "group": "", - "version": "v1", - "resource": "pods" - }, - "namespace": "dummy", - "operation": "CREATE", - "userInfo": { - "username": "system:serviceaccount:kube-system:replicaset-controller", - "uid": "a7e0ab33-5f29-11e8-8a3c-36e6bb280816", - "groups": [ - "system:serviceaccounts", - "system:serviceaccounts:kube-system", - "system:authenticated" - ] - }, - "object": { - "apiVersion": "v1", - "kind": "Pod", - "metadata": { - "generateName": "nginx-deployment-6c54bd5869-", - "creationTimestamp": null, - "labels": { - "app": "nginx", - "pod-template-hash": "2710681425" - }, - "annotations": { - "openshift.io/scc": "restricted" - }, - "ownerReferences": [ - { - "apiVersion": "extensions/v1beta1", - "kind": "ReplicaSet", - "name": "nginx-deployment-6c54bd5869", - "uid": "16c2b355-5f5d-11e8-ac91-36e6bb280816", - "controller": true, - "blockOwnerDeletion": true - } - ] - }, - "spec": { - "volumes": [ - { - "name": "default-token-tq5lq", - "secret": { - "secretName": "default-token-tq5lq" - } - } - ], - "containers": [ - { - "name": "nginx", - "image": "nginx:1.7.9", - "ports": [ - { - "containerPort": 80, - "protocol": "TCP" - } - ], - "resources": {}, - "volumeMounts": [ - { - "name": "default-token-tq5lq", - "readOnly": true, - "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" - } - ], - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - "imagePullPolicy": "IfNotPresent", - "securityContext": { - "capabilities": { - "drop": [ - "KILL", - "MKNOD", - "SETGID", - "SETUID" - ] - }, - "runAsUser": 1000080000 - } - } - ], - "restartPolicy": "Always", - "terminationGracePeriodSeconds": 30, - "dnsPolicy": "ClusterFirst", - "serviceAccountName": "default", - "serviceAccount": "default", - "securityContext": { - "seLinuxOptions": { - "level": "s0:c9,c4" - }, - "fsGroup": 1000080000 - }, - "imagePullSecrets": [ - { - "name": "default-dockercfg-kksdv" - } - ], - "schedulerName": "default-scheduler" - }, - "status": {} - }, - "oldObject": null - } -} \ No newline at end of file diff --git a/samples/spring-boot/src/test/resources/conversion-error-request.json b/samples/spring-boot/src/test/resources/conversion-error-request.json deleted file mode 100644 index c19e99db..00000000 --- a/samples/spring-boot/src/test/resources/conversion-error-request.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "apiVersion": "apiextensions.k8s.io/v1", - "kind": "ConversionReview", - "request": { - - "uid": "705ab4f5-6393-11e8-b7cc-42010a800002", - - "desiredAPIVersion": "sample.javaoperatorsdk/v2", - - "objects": [ - { - "kind": "MultiVersionCustomResource", - "apiVersion": "sample.javaoperatorsdk/v2", - "metadata": { - "creationTimestamp": "2021-09-04T14:03:02Z", - "name": "resource1", - "namespace": "default", - "resourceVersion": "143", - "uid": "3415a7fc-162b-4300-b5da-fd6083580d66" - }, - "spec": { - "value": "non integer" - }, - "status":{ - "ready": true - } - } - ] -} -} \ No newline at end of file diff --git a/samples/spring-boot/src/test/resources/conversion-request.json b/samples/spring-boot/src/test/resources/conversion-request.json deleted file mode 100644 index bb07e07f..00000000 --- a/samples/spring-boot/src/test/resources/conversion-request.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "apiVersion": "apiextensions.k8s.io/v1", - "kind": "ConversionReview", - "request": { - - "uid": "705ab4f5-6393-11e8-b7cc-42010a800002", - - "desiredAPIVersion": "sample.javaoperatorsdk/v2", - - "objects": [ - { - "kind": "MultiVersionCustomResource", - "apiVersion": "sample.javaoperatorsdk/v1", - "metadata": { - "creationTimestamp": "2021-09-04T14:03:02Z", - "name": "resource1", - "namespace": "default", - "resourceVersion": "143", - "uid": "3415a7fc-162b-4300-b5da-fd6083580d66" - }, - "spec": { - "value": 1 - }, - "status":{ - "ready": true - } - }, - { - "kind": "MultiVersionCustomResource", - "apiVersion": "sample.javaoperatorsdk/v1", - "metadata": { - "creationTimestamp": "2021-09-04T14:03:02Z", - "name": "resource2", - "namespace": "default", - "resourceVersion": "14344", - "uid": "1115a7fc-162b-4300-b5da-fd6083580d55" - }, - "spec": { - "value": 2 - }, - "status":{ - "ready": false - } - } - ] -} -} \ No newline at end of file From 63ca4e36b71be7e5ea11a91c4063e29149539df4 Mon Sep 17 00:00:00 2001 From: csviri Date: Mon, 21 Nov 2022 14:25:46 +0100 Subject: [PATCH 2/2] imports --- .../admission/AdmissionAdditionalTestEndpoint.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionAdditionalTestEndpoint.java b/samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionAdditionalTestEndpoint.java index f4adc2f1..3a42dd0b 100644 --- a/samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionAdditionalTestEndpoint.java +++ b/samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionAdditionalTestEndpoint.java @@ -1,5 +1,11 @@ package io.javaoperatorsdk.webhook.admission.sample.quarkus.admission; +import io.fabric8.kubernetes.api.model.Pod; +import io.fabric8.kubernetes.api.model.admission.v1.AdmissionReview; +import io.javaoperatorsdk.webhook.admission.AdmissionController; +import io.javaoperatorsdk.webhook.admission.AsyncAdmissionController; +import io.smallrye.mutiny.Uni; + import javax.inject.Inject; import javax.inject.Named; import javax.ws.rs.Consumes; @@ -8,14 +14,6 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import io.fabric8.kubernetes.api.model.Pod; -import io.fabric8.kubernetes.api.model.admission.v1.AdmissionReview; -import io.javaoperatorsdk.webhook.admission.AdmissionController; -import io.javaoperatorsdk.webhook.admission.AsyncAdmissionController; -import io.smallrye.mutiny.Uni; - -import static io.javaoperatorsdk.webhook.admission.sample.quarkus.admission.AdmissionEndpoint.*; - @Path("/") public class AdmissionAdditionalTestEndpoint {