From e9b4c58aa569eadf501bfd36c6d56a778a8e34bf Mon Sep 17 00:00:00 2001 From: Tadayoshi Sato Date: Wed, 16 Dec 2020 13:32:52 +0900 Subject: [PATCH] chore(e2e): add test for Pull Secret trait #1547 --- e2e/common/pull_secret_test.go | 91 ++++++++++++++++++++++++++++++++++ pkg/trait/pull_secret.go | 5 +- 2 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 e2e/common/pull_secret_test.go diff --git a/e2e/common/pull_secret_test.go b/e2e/common/pull_secret_test.go new file mode 100644 index 0000000000..84ba865d87 --- /dev/null +++ b/e2e/common/pull_secret_test.go @@ -0,0 +1,91 @@ +// +build integration + +// To enable compilation of this file in Goland, go to "Settings -> Go -> Vendoring & Build Tags -> Custom Tags" and add "integration" + +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package common + +import ( + "testing" + + . "github.com/apache/camel-k/e2e/support" + camelv1 "github.com/apache/camel-k/pkg/apis/camel/v1" + "github.com/apache/camel-k/pkg/util/openshift" + + . "github.com/onsi/gomega" + + v1 "k8s.io/api/core/v1" +) + +func TestPullSecretTrait(t *testing.T) { + WithNewTestNamespace(t, func(ns string) { + ocp, err := openshift.IsOpenShift(TestClient) + Expect(err).Should(BeNil()) + + Expect(Kamel("install", "-n", ns).Execute()).Should(BeNil()) + + t.Run("Image pull secret is set on pod", func(t *testing.T) { + Expect(Kamel("run", "-n", ns, "files/Java.java", + "-t", "pull-secret.enabled=true", + "-t", "pull-secret.secret-name=dummy-secret").Execute()).Should(BeNil()) + // pod may not run because the pull secret is dummy + Eventually(IntegrationPodPhase(ns, "java"), TestTimeoutLong).Should(Or(Equal(v1.PodRunning), Equal(v1.PodPending))) + + pod := IntegrationPod(ns, "java")() + Expect(pod.Spec.ImagePullSecrets).ShouldNot(BeEmpty()) + Expect(pod.Spec.ImagePullSecrets[0].Name).Should(Equal("dummy-secret")) + + Expect(Kamel("delete", "--all", "-n", ns).Execute()).Should(BeNil()) + }) + + t.Run("Explicity disable image pull secret", func(t *testing.T) { + Expect(Kamel("run", "-n", ns, "files/Java.java", + "-t", "pull-secret.enabled=false").Execute()).Should(BeNil()) + Eventually(IntegrationPodPhase(ns, "java"), TestTimeoutLong).Should(Equal(v1.PodRunning)) + Eventually(IntegrationCondition(ns, "java", camelv1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(v1.ConditionTrue)) + Eventually(IntegrationLogs(ns, "java"), TestTimeoutShort).Should(ContainSubstring("Magicstring!")) + + pod := IntegrationPod(ns, "java")() + if ocp { + // OpenShift `default` service account has imagePullSecrets so it's always set + Expect(pod.Spec.ImagePullSecrets).ShouldNot(BeEmpty()) + } else { + Expect(pod.Spec.ImagePullSecrets).Should(BeNil()) + } + + Expect(Kamel("delete", "--all", "-n", ns).Execute()).Should(BeNil()) + }) + + if ocp { + // OpenShift always has an internal registry so image pull secret is set by default + t.Run("Image pull secret is automatically set by default", func(t *testing.T) { + Expect(Kamel("run", "-n", ns, "files/Java.java").Execute()).Should(BeNil()) + Eventually(IntegrationPodPhase(ns, "java"), TestTimeoutLong).Should(Equal(v1.PodRunning)) + Eventually(IntegrationCondition(ns, "java", camelv1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(v1.ConditionTrue)) + Eventually(IntegrationLogs(ns, "java"), TestTimeoutShort).Should(ContainSubstring("Magicstring!")) + + pod := IntegrationPod(ns, "java")() + Expect(pod.Spec.ImagePullSecrets).ShouldNot(BeEmpty()) + Expect(pod.Spec.ImagePullSecrets[0].Name).Should(HavePrefix("default-dockercfg-")) + + Expect(Kamel("delete", "--all", "-n", ns).Execute()).Should(BeNil()) + }) + } + }) +} diff --git a/pkg/trait/pull_secret.go b/pkg/trait/pull_secret.go index c4e44e9e2b..9bb6b19eec 100644 --- a/pkg/trait/pull_secret.go +++ b/pkg/trait/pull_secret.go @@ -19,6 +19,7 @@ package trait import ( v1 "github.com/apache/camel-k/pkg/apis/camel/v1" + "github.com/apache/camel-k/pkg/util" corev1 "k8s.io/api/core/v1" "sigs.k8s.io/controller-runtime/pkg/client" ) @@ -50,7 +51,7 @@ func newPullSecretTrait() Trait { } func (t *pullSecretTrait) Configure(e *Environment) (bool, error) { - if t.Enabled != nil && !*t.Enabled { + if util.IsFalse(t.Enabled) { return false, nil } @@ -58,7 +59,7 @@ func (t *pullSecretTrait) Configure(e *Environment) (bool, error) { return false, nil } - if t.Auto == nil || *t.Auto { + if util.IsNilOrTrue(t.Auto) { if t.SecretName == "" { secret := e.Platform.Status.Build.Registry.Secret if secret != "" {