Skip to content

fix: shating more code between tests #42

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Nov 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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<Pod> 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<Pod> 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<Pod> asyncMutatingController() {
return new AsyncAdmissionController<>(
(AsyncMutator<Pod>) (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<Pod> 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<Pod> errorMutatingController() {
return new AdmissionController<>((Validator<Pod>) (resource, operation) -> {
throw new IllegalStateException(ERROR_MESSAGE);
});
}

public static AdmissionController<Pod> errorValidatingController() {
return new AdmissionController<>((Mutator<Pod>) (resource, operation) -> {
throw new IllegalStateException(ERROR_MESSAGE);
});
}

public static AsyncAdmissionController<Pod> errorAsyncMutatingController() {
return new AsyncAdmissionController<>((AsyncMutator<Pod>) (resource, operation) -> {
throw new IllegalStateException(ERROR_MESSAGE);
});
}

public static AsyncAdmissionController<Pod> errorAsyncValidatingController() {
return new AsyncAdmissionController<>((Validator<Pod>) (resource, operation) -> {
throw new IllegalStateException(ERROR_MESSAGE);
});
}
}
Original file line number Diff line number Diff line change
@@ -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;
}

}
Original file line number Diff line number Diff line change
@@ -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";
Expand All @@ -24,49 +18,24 @@ public class AdmissionControllerConfig {
@Singleton
@Named(MUTATING_CONTROLLER)
public AdmissionController<Pod> 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<Pod> 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<Pod> asyncMutatingController() {
return new AsyncAdmissionController<>(
(AsyncMutator<Pod>) (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<Pod> 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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<Pod> mutationController;
private final AdmissionController<Pod> validationController;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,47 +6,36 @@
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 {

public static final String ERROR_MUTATING_CONTROLLER = "errorMutatingController";
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<Pod> errorMutatingController() {
return new AdmissionController<>((Validator<Pod>) (resource, operation) -> {
throw new IllegalStateException(ERROR_MESSAGE);
});
return AdmissionControllers.errorMutatingController();
}

@Singleton
@Named(ERROR_VALIDATING_CONTROLLER)
public AdmissionController<Pod> errorValidatingController() {
return new AdmissionController<>((Mutator<Pod>) (resource, operation) -> {
throw new IllegalStateException(ERROR_MESSAGE);
});
return AdmissionControllers.errorValidatingController();
}

@Singleton
@Named(ERROR_ASYNC_MUTATING_CONTROLLER)
public AsyncAdmissionController<Pod> errorAsyncMutatingController() {
return new AsyncAdmissionController<>((AsyncMutator<Pod>) (resource, operation) -> {
throw new IllegalStateException(ERROR_MESSAGE);
});
return AdmissionControllers.errorAsyncMutatingController();
}

@Singleton
@Named(ERROR_ASYNC_VALIDATING_CONTROLLER)
public AsyncAdmissionController<Pod> errorAsyncValidatingController() {
return new AsyncAdmissionController<>((Validator<Pod>) (resource, operation) -> {
throw new IllegalStateException(ERROR_MESSAGE);
});
return AdmissionControllers.errorAsyncValidatingController();
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -8,23 +14,19 @@
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 {

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<Pod> errorMutationController;
private final AdmissionController<Pod> errorValidationController;
private final AsyncAdmissionController<Pod> errorAsyncMutationController;
private final AsyncAdmissionController<Pod> errorAsyncValidationController;


@Inject
public AdmissionAdditionalTestEndpoint(
@Named(AdditionalAdmissionConfig.ERROR_MUTATING_CONTROLLER) AdmissionController<Pod> errorMutationController,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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
Expand All @@ -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) {
Expand Down
Loading