From 0aa14c19e11752898935c36ea7df55a0aa72a5aa Mon Sep 17 00:00:00 2001 From: Steven Hawkins Date: Mon, 17 Mar 2025 09:34:28 -0400 Subject: [PATCH] fix: separating api server tests, and splitting the operator tests (#38118) closes: #37853 Signed-off-by: Steve Hawkins --- .github/workflows/operator-ci.yml | 18 ++++++++++++++++-- operator/pom.xml | 12 ++++++++++++ .../{integration => apiserver}/CRDTest.java | 7 ++++--- .../integration/BaseOperatorTest.java | 4 +++- .../integration/KeycloakDeploymentTest.java | 2 ++ .../integration/KeycloakNetworkPolicyTest.java | 3 +++ .../testsuite/integration/UpgradeTest.java | 3 +++ 7 files changed, 43 insertions(+), 6 deletions(-) rename operator/src/test/java/org/keycloak/operator/testsuite/{integration => apiserver}/CRDTest.java (96%) diff --git a/.github/workflows/operator-ci.yml b/.github/workflows/operator-ci.yml index c25a72c6440..3092840e3c2 100644 --- a/.github/workflows/operator-ci.yml +++ b/.github/workflows/operator-ci.yml @@ -56,6 +56,9 @@ jobs: name: Test local runs-on: ubuntu-latest needs: [build] + strategy: + matrix: + suite: [slow, fast] steps: - uses: actions/checkout@v4 @@ -90,16 +93,23 @@ jobs: - name: Test operator running locally run: | + declare -A PARAMS + PARAMS["slow"]="-Dkc.quarkus.tests.groups=slow" + PARAMS["fast"]='-Dkc.quarkus.tests.groups=!slow' + ./mvnw install -Poperator -pl :keycloak-operator -am \ -Dquarkus.kubernetes.image-pull-policy=IfNotPresent \ -Dkc.operator.keycloak.image=keycloak:${{ env.version_local }} \ -Dtest.operator.custom.image=custom-keycloak:${{ env.version_local }} \ - -Dkc.operator.keycloak.image-pull-policy=Never + -Dkc.operator.keycloak.image-pull-policy=Never ${PARAMS["${{ matrix.suite }}"]} test-remote: name: Test remote runs-on: ubuntu-latest needs: [build] + strategy: + matrix: + suite: [slow, fast] steps: - uses: actions/checkout@v4 @@ -134,6 +144,10 @@ jobs: - name: Test operator running in cluster run: | + declare -A PARAMS + PARAMS["slow"]="-Dkc.quarkus.tests.groups=slow" + PARAMS["fast"]='-Dkc.quarkus.tests.groups=!slow' + eval $(minikube -p minikube docker-env) ./mvnw install -Poperator -pl :keycloak-operator -am \ -Dquarkus.container-image.build=true \ @@ -141,7 +155,7 @@ jobs: -Dkc.operator.keycloak.image=keycloak:${{ env.version_remote }} \ -Dquarkus.kubernetes.env.vars.kc-operator-keycloak-image-pull-policy=Never \ -Dtest.operator.custom.image=custom-keycloak:${{ env.version_remote }} \ - --no-transfer-progress -Dtest.operator.deployment=remote + --no-transfer-progress -Dtest.operator.deployment=remote ${PARAMS["${{ matrix.suite }}"]} test-olm: name: Test OLM installation diff --git a/operator/pom.xml b/operator/pom.xml index 44f5b0ae8ab..5376edd1aaf 100644 --- a/operator/pom.xml +++ b/operator/pom.xml @@ -16,6 +16,7 @@ true + !invalid UTF-8 UTF-8 keycloak @@ -116,6 +117,16 @@ + + io.fabric8 + kube-api-test + test + + + io.fabric8 + kube-api-test-client-inject + test + io.quarkus quarkus-test-common @@ -261,6 +272,7 @@ my-value + ${kc.quarkus.tests.groups} diff --git a/operator/src/test/java/org/keycloak/operator/testsuite/integration/CRDTest.java b/operator/src/test/java/org/keycloak/operator/testsuite/apiserver/CRDTest.java similarity index 96% rename from operator/src/test/java/org/keycloak/operator/testsuite/integration/CRDTest.java rename to operator/src/test/java/org/keycloak/operator/testsuite/apiserver/CRDTest.java index e94c59b62dc..c7974147bdb 100644 --- a/operator/src/test/java/org/keycloak/operator/testsuite/integration/CRDTest.java +++ b/operator/src/test/java/org/keycloak/operator/testsuite/apiserver/CRDTest.java @@ -15,9 +15,9 @@ * limitations under the License. */ -package org.keycloak.operator.testsuite.integration; +package org.keycloak.operator.testsuite.apiserver; -import io.fabric8.junit.jupiter.api.KubernetesTest; +import io.fabric8.kubeapitest.junit.EnableKubeAPIServer; import io.fabric8.kubernetes.api.model.HasMetadata; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.KubernetesClientException; @@ -34,13 +34,14 @@ import java.io.FileNotFoundException; import com.fasterxml.jackson.databind.ObjectMapper; import org.keycloak.operator.crds.v2alpha1.realmimport.KeycloakRealmImportBuilder; +import org.keycloak.operator.testsuite.integration.BaseOperatorTest; import org.keycloak.operator.testsuite.utils.K8sUtils; import org.keycloak.operator.upgrade.UpdateStrategy; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; -@KubernetesTest +@EnableKubeAPIServer public class CRDTest { static KubernetesClient client; diff --git a/operator/src/test/java/org/keycloak/operator/testsuite/integration/BaseOperatorTest.java b/operator/src/test/java/org/keycloak/operator/testsuite/integration/BaseOperatorTest.java index 4fe1ca1d229..18d20bb3f96 100644 --- a/operator/src/test/java/org/keycloak/operator/testsuite/integration/BaseOperatorTest.java +++ b/operator/src/test/java/org/keycloak/operator/testsuite/integration/BaseOperatorTest.java @@ -96,6 +96,8 @@ import static org.keycloak.operator.testsuite.utils.K8sUtils.getResourceFromFile public class BaseOperatorTest implements QuarkusTestAfterEachCallback { + public static final String SLOW = "slow"; + public static final String QUARKUS_KUBERNETES_DEPLOYMENT_TARGET = "quarkus.kubernetes.deployment-target"; public static final String OPERATOR_DEPLOYMENT_PROP = "test.operator.deployment"; public static final String TARGET_KUBERNETES_GENERATED_YML_FOLDER = "target/kubernetes/"; @@ -184,7 +186,7 @@ public class BaseOperatorTest implements QuarkusTestAfterEachCallback { .inNamespace(namespace).delete(); } - static void createCRDs(KubernetesClient client) throws FileNotFoundException { + public static void createCRDs(KubernetesClient client) throws FileNotFoundException { K8sUtils.set(client, new FileInputStream(TARGET_KUBERNETES_GENERATED_YML_FOLDER + "keycloaks.k8s.keycloak.org-v1.yml")); K8sUtils.set(client, new FileInputStream(TARGET_KUBERNETES_GENERATED_YML_FOLDER + "keycloakrealmimports.k8s.keycloak.org-v1.yml")); diff --git a/operator/src/test/java/org/keycloak/operator/testsuite/integration/KeycloakDeploymentTest.java b/operator/src/test/java/org/keycloak/operator/testsuite/integration/KeycloakDeploymentTest.java index 07d376172dc..307919598cc 100644 --- a/operator/src/test/java/org/keycloak/operator/testsuite/integration/KeycloakDeploymentTest.java +++ b/operator/src/test/java/org/keycloak/operator/testsuite/integration/KeycloakDeploymentTest.java @@ -34,6 +34,7 @@ import io.quarkus.test.junit.QuarkusTest; import org.awaitility.Awaitility; import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIfSystemProperty; import org.keycloak.operator.Config; @@ -75,6 +76,7 @@ import static org.keycloak.operator.testsuite.utils.K8sUtils.enableHttp; import static org.keycloak.operator.testsuite.utils.K8sUtils.getResourceFromFile; import static org.keycloak.operator.testsuite.utils.K8sUtils.waitForKeycloakToBeReady; +@Tag(BaseOperatorTest.SLOW) @QuarkusTest public class KeycloakDeploymentTest extends BaseOperatorTest { diff --git a/operator/src/test/java/org/keycloak/operator/testsuite/integration/KeycloakNetworkPolicyTest.java b/operator/src/test/java/org/keycloak/operator/testsuite/integration/KeycloakNetworkPolicyTest.java index 89231b32a26..3916c9aec4a 100644 --- a/operator/src/test/java/org/keycloak/operator/testsuite/integration/KeycloakNetworkPolicyTest.java +++ b/operator/src/test/java/org/keycloak/operator/testsuite/integration/KeycloakNetworkPolicyTest.java @@ -25,6 +25,8 @@ import io.fabric8.kubernetes.api.model.networking.v1.NetworkPolicy; import io.fabric8.kubernetes.api.model.networking.v1.NetworkPolicyPeer; import io.fabric8.kubernetes.api.model.networking.v1.NetworkPolicyPeerBuilder; import io.quarkus.test.junit.QuarkusTest; + +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.keycloak.operator.Constants; import org.keycloak.operator.Utils; @@ -38,6 +40,7 @@ import org.keycloak.operator.testsuite.utils.K8sUtils; import static org.junit.jupiter.api.Assertions.assertNull; +@Tag(BaseOperatorTest.SLOW) @QuarkusTest public class KeycloakNetworkPolicyTest extends BaseOperatorTest { diff --git a/operator/src/test/java/org/keycloak/operator/testsuite/integration/UpgradeTest.java b/operator/src/test/java/org/keycloak/operator/testsuite/integration/UpgradeTest.java index 15f10be87a0..90d235ac03a 100644 --- a/operator/src/test/java/org/keycloak/operator/testsuite/integration/UpgradeTest.java +++ b/operator/src/test/java/org/keycloak/operator/testsuite/integration/UpgradeTest.java @@ -27,6 +27,8 @@ import java.util.concurrent.TimeoutException; import io.fabric8.kubernetes.api.model.batch.v1.Job; import io.fabric8.kubernetes.api.model.batch.v1.JobStatus; import io.quarkus.test.junit.QuarkusTest; + +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIfSystemProperty; import org.junit.jupiter.params.ParameterizedTest; @@ -50,6 +52,7 @@ import static org.keycloak.operator.testsuite.utils.CRAssert.eventuallyRecreateU import static org.keycloak.operator.testsuite.utils.CRAssert.eventuallyRollingUpgradeStatus; import static org.keycloak.operator.testsuite.utils.K8sUtils.deployKeycloak; +@Tag(BaseOperatorTest.SLOW) @QuarkusTest public class UpgradeTest extends BaseOperatorTest {