From d6be6b88a7c32c3dc8556d04e8c45dea94d2a230 Mon Sep 17 00:00:00 2001 From: Rohan Kumar Date: Wed, 31 May 2023 17:01:24 +0530 Subject: [PATCH] test (gradle-plugin/it) : Add test for setting ServiceAccount name in generated controller (#2187) Signed-off-by: Rohan Kumar --- .../build.gradle | 57 +++++++++++++ .../kubernetes.yml | 53 ++++++++++++ .../openshift.yml | 56 +++++++++++++ .../expected/fragment/kubernetes.yml | 53 ++++++++++++ .../expected/fragment/openshift.yml | 56 +++++++++++++ .../expected/no-fragment/kubernetes.yml | 53 ++++++++++++ .../expected/no-fragment/openshift.yml | 56 +++++++++++++ .../deployment.yml | 18 ++++ .../regularFragmentDir/deployment.yml | 16 ++++ .../ServiceAccountNameViaGroovyDSLIT.java | 82 +++++++++++++++++++ 10 files changed, 500 insertions(+) create mode 100644 gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/build.gradle create mode 100644 gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/fragment-overriding-serviceaccount/kubernetes.yml create mode 100644 gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/fragment-overriding-serviceaccount/openshift.yml create mode 100644 gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/fragment/kubernetes.yml create mode 100644 gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/fragment/openshift.yml create mode 100644 gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/no-fragment/kubernetes.yml create mode 100644 gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/no-fragment/openshift.yml create mode 100644 gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/overridingServiceAccountNameFragmentDir/deployment.yml create mode 100644 gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/regularFragmentDir/deployment.yml create mode 100644 gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ServiceAccountNameViaGroovyDSLIT.java diff --git a/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/build.gradle b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/build.gradle new file mode 100644 index 0000000000..1d3ffdb240 --- /dev/null +++ b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/build.gradle @@ -0,0 +1,57 @@ +plugins { + id 'org.eclipse.jkube.kubernetes' version "${jKubeVersion}" + id 'org.eclipse.jkube.openshift' version "${jKubeVersion}" + id 'java' +} + +group = 'org.eclipse.jkube.integration.tests.gradle' +version = '0.0.1-SNAPSHOT' +sourceCompatibility = '11' + +repositories { + mavenCentral() +} + +kubernetes { + offline = true + images { + image { + name = 'repository/serviceaccountname-via-groovy-dsl:latest' + build { + from = 'quay.io/jkube/jkube-java-11' + } + } + } + resources { + serviceAccount = "my-serviceaccount" + } + enricher { + config { + 'jkube-serviceaccount' { + skipCreate = true + } + } + } +} + +openshift { + offline = true + images { + image { + name = 'repository/serviceaccountname-via-groovy-dsl:latest' + build { + from = 'quay.io/jkube/jkube-java-11' + } + } + } + resources { + serviceAccount = "my-serviceaccount" + } + enricher { + config { + 'jkube-serviceaccount' { + skipCreate = true + } + } + } +} \ No newline at end of file diff --git a/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/fragment-overriding-serviceaccount/kubernetes.yml b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/fragment-overriding-serviceaccount/kubernetes.yml new file mode 100644 index 0000000000..0124343ebe --- /dev/null +++ b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/fragment-overriding-serviceaccount/kubernetes.yml @@ -0,0 +1,53 @@ +--- +apiVersion: v1 +kind: List +items: +- apiVersion: apps/v1 + kind: Deployment + metadata: + annotations: + jkube.eclipse.org/git-url: "@ignore@" + jkube.eclipse.org/git-commit: "@ignore@" + jkube.eclipse.org/git-branch: "@ignore@" + labels: + app: serviceaccountname-via-groovy-dsl + provider: jkube + version: "@ignore@" + group: org.eclipse.jkube.integration.tests.gradle + name: serviceaccountname-via-groovy-dsl + spec: + replicas: 1 + revisionHistoryLimit: 2 + selector: + matchLabels: + app: serviceaccountname-via-groovy-dsl + provider: jkube + group: org.eclipse.jkube.integration.tests.gradle + template: + metadata: + annotations: + jkube.eclipse.org/git-url: "@ignore@" + jkube.eclipse.org/git-commit: "@ignore@" + jkube.eclipse.org/git-branch: "@ignore@" + labels: + app: serviceaccountname-via-groovy-dsl + provider: jkube + version: "@ignore@" + group: org.eclipse.jkube.integration.tests.gradle + spec: + containers: + - env: + - name: KUBERNETES_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: HOSTNAME + valueFrom: + fieldRef: + fieldPath: metadata.name + image: repository/serviceaccountname-via-groovy-dsl:latest + imagePullPolicy: IfNotPresent + name: repository-serviceaccountname-via-groovy-dsl + securityContext: + privileged: false + serviceAccountName: serviceaccount-from-fragment diff --git a/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/fragment-overriding-serviceaccount/openshift.yml b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/fragment-overriding-serviceaccount/openshift.yml new file mode 100644 index 0000000000..fc6453cc9b --- /dev/null +++ b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/fragment-overriding-serviceaccount/openshift.yml @@ -0,0 +1,56 @@ +--- +apiVersion: v1 +kind: List +items: +- apiVersion: apps.openshift.io/v1 + kind: DeploymentConfig + metadata: + annotations: + app.openshift.io/vcs-ref: "@ignore@" + jkube.eclipse.org/git-url: "@ignore@" + app.openshift.io/vcs-uri: "@ignore@" + jkube.eclipse.org/git-commit: "@ignore@" + jkube.eclipse.org/git-branch: "@ignore@" + labels: + app: serviceaccountname-via-groovy-dsl + provider: jkube + version: "@ignore@" + group: org.eclipse.jkube.integration.tests.gradle + name: serviceaccountname-via-groovy-dsl + spec: + replicas: 1 + revisionHistoryLimit: 2 + selector: + app: serviceaccountname-via-groovy-dsl + provider: jkube + group: org.eclipse.jkube.integration.tests.gradle + strategy: + rollingParams: + timeoutSeconds: 3600 + type: Rolling + template: + metadata: + annotations: + app.openshift.io/vcs-ref: "@ignore@" + jkube.eclipse.org/git-url: "@ignore@" + app.openshift.io/vcs-uri: "@ignore@" + jkube.eclipse.org/git-commit: "@ignore@" + jkube.eclipse.org/git-branch: "@ignore@" + labels: + app: serviceaccountname-via-groovy-dsl + provider: jkube + version: "@ignore@" + group: org.eclipse.jkube.integration.tests.gradle + spec: + containers: + - env: + - name: KUBERNETES_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: repository/serviceaccountname-via-groovy-dsl:latest + imagePullPolicy: IfNotPresent + name: repository-serviceaccountname-via-groovy-dsl + securityContext: + privileged: false + serviceAccountName: serviceaccount-from-fragment diff --git a/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/fragment/kubernetes.yml b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/fragment/kubernetes.yml new file mode 100644 index 0000000000..f9593d31d2 --- /dev/null +++ b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/fragment/kubernetes.yml @@ -0,0 +1,53 @@ +--- +apiVersion: v1 +kind: List +items: +- apiVersion: apps/v1 + kind: Deployment + metadata: + annotations: + jkube.eclipse.org/git-url: "@ignore@" + jkube.eclipse.org/git-commit: "@ignore@" + jkube.eclipse.org/git-branch: "@ignore@" + labels: + app: serviceaccountname-via-groovy-dsl + provider: jkube + version: "@ignore@" + group: org.eclipse.jkube.integration.tests.gradle + name: serviceaccountname-via-groovy-dsl + spec: + replicas: 1 + revisionHistoryLimit: 2 + selector: + matchLabels: + app: serviceaccountname-via-groovy-dsl + provider: jkube + group: org.eclipse.jkube.integration.tests.gradle + template: + metadata: + annotations: + jkube.eclipse.org/git-url: "@ignore@" + jkube.eclipse.org/git-commit: "@ignore@" + jkube.eclipse.org/git-branch: "@ignore@" + labels: + app: serviceaccountname-via-groovy-dsl + provider: jkube + version: "@ignore@" + group: org.eclipse.jkube.integration.tests.gradle + spec: + containers: + - env: + - name: KUBERNETES_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: HOSTNAME + valueFrom: + fieldRef: + fieldPath: metadata.name + image: repository/serviceaccountname-via-groovy-dsl:latest + imagePullPolicy: IfNotPresent + name: repository-serviceaccountname-via-groovy-dsl + securityContext: + privileged: false + serviceAccountName: my-serviceaccount diff --git a/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/fragment/openshift.yml b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/fragment/openshift.yml new file mode 100644 index 0000000000..59507d6093 --- /dev/null +++ b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/fragment/openshift.yml @@ -0,0 +1,56 @@ +--- +apiVersion: v1 +kind: List +items: +- apiVersion: apps.openshift.io/v1 + kind: DeploymentConfig + metadata: + annotations: + app.openshift.io/vcs-ref: "@ignore@" + jkube.eclipse.org/git-url: "@ignore@" + app.openshift.io/vcs-uri: "@ignore@" + jkube.eclipse.org/git-commit: "@ignore@" + jkube.eclipse.org/git-branch: "@ignore@" + labels: + app: serviceaccountname-via-groovy-dsl + provider: jkube + version: "@ignore@" + group: org.eclipse.jkube.integration.tests.gradle + name: serviceaccountname-via-groovy-dsl + spec: + replicas: 1 + revisionHistoryLimit: 2 + selector: + app: serviceaccountname-via-groovy-dsl + provider: jkube + group: org.eclipse.jkube.integration.tests.gradle + strategy: + rollingParams: + timeoutSeconds: 3600 + type: Rolling + template: + metadata: + annotations: + app.openshift.io/vcs-ref: "@ignore@" + jkube.eclipse.org/git-url: "@ignore@" + app.openshift.io/vcs-uri: "@ignore@" + jkube.eclipse.org/git-commit: "@ignore@" + jkube.eclipse.org/git-branch: "@ignore@" + labels: + app: serviceaccountname-via-groovy-dsl + provider: jkube + version: "@ignore@" + group: org.eclipse.jkube.integration.tests.gradle + spec: + containers: + - env: + - name: KUBERNETES_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: repository/serviceaccountname-via-groovy-dsl:latest + imagePullPolicy: IfNotPresent + name: repository-serviceaccountname-via-groovy-dsl + securityContext: + privileged: false + serviceAccountName: my-serviceaccount diff --git a/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/no-fragment/kubernetes.yml b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/no-fragment/kubernetes.yml new file mode 100644 index 0000000000..f9593d31d2 --- /dev/null +++ b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/no-fragment/kubernetes.yml @@ -0,0 +1,53 @@ +--- +apiVersion: v1 +kind: List +items: +- apiVersion: apps/v1 + kind: Deployment + metadata: + annotations: + jkube.eclipse.org/git-url: "@ignore@" + jkube.eclipse.org/git-commit: "@ignore@" + jkube.eclipse.org/git-branch: "@ignore@" + labels: + app: serviceaccountname-via-groovy-dsl + provider: jkube + version: "@ignore@" + group: org.eclipse.jkube.integration.tests.gradle + name: serviceaccountname-via-groovy-dsl + spec: + replicas: 1 + revisionHistoryLimit: 2 + selector: + matchLabels: + app: serviceaccountname-via-groovy-dsl + provider: jkube + group: org.eclipse.jkube.integration.tests.gradle + template: + metadata: + annotations: + jkube.eclipse.org/git-url: "@ignore@" + jkube.eclipse.org/git-commit: "@ignore@" + jkube.eclipse.org/git-branch: "@ignore@" + labels: + app: serviceaccountname-via-groovy-dsl + provider: jkube + version: "@ignore@" + group: org.eclipse.jkube.integration.tests.gradle + spec: + containers: + - env: + - name: KUBERNETES_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: HOSTNAME + valueFrom: + fieldRef: + fieldPath: metadata.name + image: repository/serviceaccountname-via-groovy-dsl:latest + imagePullPolicy: IfNotPresent + name: repository-serviceaccountname-via-groovy-dsl + securityContext: + privileged: false + serviceAccountName: my-serviceaccount diff --git a/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/no-fragment/openshift.yml b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/no-fragment/openshift.yml new file mode 100644 index 0000000000..59507d6093 --- /dev/null +++ b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/expected/no-fragment/openshift.yml @@ -0,0 +1,56 @@ +--- +apiVersion: v1 +kind: List +items: +- apiVersion: apps.openshift.io/v1 + kind: DeploymentConfig + metadata: + annotations: + app.openshift.io/vcs-ref: "@ignore@" + jkube.eclipse.org/git-url: "@ignore@" + app.openshift.io/vcs-uri: "@ignore@" + jkube.eclipse.org/git-commit: "@ignore@" + jkube.eclipse.org/git-branch: "@ignore@" + labels: + app: serviceaccountname-via-groovy-dsl + provider: jkube + version: "@ignore@" + group: org.eclipse.jkube.integration.tests.gradle + name: serviceaccountname-via-groovy-dsl + spec: + replicas: 1 + revisionHistoryLimit: 2 + selector: + app: serviceaccountname-via-groovy-dsl + provider: jkube + group: org.eclipse.jkube.integration.tests.gradle + strategy: + rollingParams: + timeoutSeconds: 3600 + type: Rolling + template: + metadata: + annotations: + app.openshift.io/vcs-ref: "@ignore@" + jkube.eclipse.org/git-url: "@ignore@" + app.openshift.io/vcs-uri: "@ignore@" + jkube.eclipse.org/git-commit: "@ignore@" + jkube.eclipse.org/git-branch: "@ignore@" + labels: + app: serviceaccountname-via-groovy-dsl + provider: jkube + version: "@ignore@" + group: org.eclipse.jkube.integration.tests.gradle + spec: + containers: + - env: + - name: KUBERNETES_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: repository/serviceaccountname-via-groovy-dsl:latest + imagePullPolicy: IfNotPresent + name: repository-serviceaccountname-via-groovy-dsl + securityContext: + privileged: false + serviceAccountName: my-serviceaccount diff --git a/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/overridingServiceAccountNameFragmentDir/deployment.yml b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/overridingServiceAccountNameFragmentDir/deployment.yml new file mode 100644 index 0000000000..f8bbe5c208 --- /dev/null +++ b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/overridingServiceAccountNameFragmentDir/deployment.yml @@ -0,0 +1,18 @@ +# +# Copyright (c) 2019 Red Hat, Inc. +# This program and the accompanying materials are made +# available under the terms of the Eclipse Public License 2.0 +# which is available at: +# +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Red Hat, Inc. - initial API and implementation +# + +spec: + template: + spec: + serviceAccountName: serviceaccount-from-fragment \ No newline at end of file diff --git a/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/regularFragmentDir/deployment.yml b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/regularFragmentDir/deployment.yml new file mode 100644 index 0000000000..b7d71b63f1 --- /dev/null +++ b/gradle-plugin/it/src/it/serviceaccountname-via-groovy-dsl/regularFragmentDir/deployment.yml @@ -0,0 +1,16 @@ +# +# Copyright (c) 2019 Red Hat, Inc. +# This program and the accompanying materials are made +# available under the terms of the Eclipse Public License 2.0 +# which is available at: +# +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Red Hat, Inc. - initial API and implementation +# + +spec: + replicas: 1 \ No newline at end of file diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ServiceAccountNameViaGroovyDSLIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ServiceAccountNameViaGroovyDSLIT.java new file mode 100644 index 0000000000..b632962257 --- /dev/null +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ServiceAccountNameViaGroovyDSLIT.java @@ -0,0 +1,82 @@ +/** + * Copyright (c) 2019 Red Hat, Inc. + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at: + * + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +package org.eclipse.jkube.gradle.plugin.tests; + +import net.minidev.json.parser.ParseException; +import org.eclipse.jkube.kit.common.ResourceVerify; +import org.gradle.testkit.runner.BuildResult; +import org.junit.jupiter.api.extension.RegisterExtension; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.params.provider.Arguments.arguments; + +class ServiceAccountNameViaGroovyDSLIT { + @RegisterExtension + private final ITGradleRunnerExtension gradleRunner = new ITGradleRunnerExtension(); + + static Stream testInput() { + return Stream.of( +// arguments("no-fragment", new String[] {}), +// arguments("fragment", new String[] {"-Pjkube.resourceDir=./regularFragmentDir"}), + arguments("fragment-overriding-serviceaccount", new String[] {"-Pjkube.resourceDir=./overridingServiceAccountNameFragmentDir"}) + ); + } + + @ParameterizedTest(name = "k8sResource with {0} configures ServiceAccount in generated Deployment") + @MethodSource("testInput") + void k8sResource_whenRun_shouldAddServiceAccountInDeployment(String expectedDir, String[] arguments) throws IOException, ParseException { + // When + List gradleArgs = new ArrayList<>(Arrays.asList(arguments)); + gradleArgs.add("k8sResource"); + gradleArgs.add("--stacktrace"); + final BuildResult result = gradleRunner.withITProject("serviceaccountname-via-groovy-dsl") + .withArguments(gradleArgs.toArray(new String[0])) + .build(); + // Then + ResourceVerify.verifyResourceDescriptors(gradleRunner.resolveDefaultKubernetesResourceFile(), + gradleRunner.resolveFile("expected", expectedDir, "kubernetes.yml")); + assertThat(result).extracting(BuildResult::getOutput).asString() + .contains("Using resource templates from") + .contains("Adding revision history limit to 2") + .contains("validating"); + } + + @ParameterizedTest(name = "ocResource with {0} configures ServiceAccount in generated DeploymentConfig") + @MethodSource("testInput") + void ocResource_whenRun_shouldAddServiceAccountInDeploymentConfig(String expectedDir, String[] arguments) throws IOException, ParseException { + // When + List gradleArgs = new ArrayList<>(Arrays.asList(arguments)); + gradleArgs.add("ocResource"); + gradleArgs.add("--stacktrace"); + final BuildResult result = gradleRunner.withITProject("serviceaccountname-via-groovy-dsl") + .withArguments(gradleArgs.toArray(new String[0])) + .build(); + // Then + ResourceVerify.verifyResourceDescriptors(gradleRunner.resolveDefaultOpenShiftResourceFile(), + gradleRunner.resolveFile("expected", expectedDir, "openshift.yml")); + assertThat(result).extracting(BuildResult::getOutput).asString() + .contains("Using resource templates from") + .contains("Adding revision history limit to 2") + .contains("validating"); + } +}