This is an automated email from the ASF dual-hosted git repository. pcongiusti pushed a commit to branch release-2.1.x in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 8c99922c413059faf7013aa7abade12ca79ff588 Author: Gaelle Fournier <gaelle.fournier.w...@gmail.com> AuthorDate: Thu Nov 23 16:11:02 2023 +0100 fix(e2e): Upgrade helm procedure test --- e2e/install/kustomize/setup_test.go | 5 -- e2e/install/upgrade/helm_upgrade_test.go | 150 +++++++++++++++++++++++++++++++ e2e/support/test_support.go | 6 ++ 3 files changed, 156 insertions(+), 5 deletions(-) diff --git a/e2e/install/kustomize/setup_test.go b/e2e/install/kustomize/setup_test.go index 2c9fdb0d2..5b1058630 100644 --- a/e2e/install/kustomize/setup_test.go +++ b/e2e/install/kustomize/setup_test.go @@ -33,11 +33,6 @@ import ( ) const ( - // v1.Build, v1.Integration - // v1.IntegrationKit, v1.IntegrationPlatform - // v1.Kamelet, v1.Pipe, - // v1alpha1.Kamelet, v1alpha1.KameletBinding - ExpectedCRDs = 8 // camel-k-operator, camel-k-operator-events, // camel-k-operator-knative, camel-k-operator-leases, diff --git a/e2e/install/upgrade/helm_upgrade_test.go b/e2e/install/upgrade/helm_upgrade_test.go new file mode 100644 index 000000000..bcbb7b4c2 --- /dev/null +++ b/e2e/install/upgrade/helm_upgrade_test.go @@ -0,0 +1,150 @@ +//go:build integration +// +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 upgrade + +import ( + "fmt" + "os" + "os/exec" + "testing" + + . "github.com/apache/camel-k/v2/e2e/support" + "github.com/apache/camel-k/v2/pkg/util/defaults" + . "github.com/onsi/gomega" + corev1 "k8s.io/api/core/v1" +) + +// WARNING: this test is not OLM specific but needs certain setting we provide in OLM installation scenario +func TestHelmOperatorUpgrade(t *testing.T) { + RegisterTestingT(t) + + KAMEL_INSTALL_REGISTRY := os.Getenv("KAMEL_INSTALL_REGISTRY") + // need to add last release version + releaseVersion := os.Getenv("KAMEL_K_TEST_RELEASE_VERSION") + customImage := fmt.Sprintf("%s/apache/camel-k", KAMEL_INSTALL_REGISTRY) + + os.Setenv("CAMEL_K_TEST_MAKE_DIR", "../../../") + + // Ensure no CRDs are already installed + UninstallAll() + Eventually(CRDs()).Should(HaveLen(0)) + + WithNewTestNamespace(t, func(ns string) { + + // Install operator in last released version + ExpectExecSucceed(t, + exec.Command( + "helm", + "install", + "camel-k", + fmt.Sprintf("../../../docs/charts/camel-k-%s.tgz", releaseVersion), + "--set", + fmt.Sprintf("platform.build.registry.address=%s", KAMEL_INSTALL_REGISTRY), + "--set", + "platform.build.registry.insecure=true", + "-n", + ns, + ), + ) + + Eventually(OperatorPod(ns)).ShouldNot(BeNil()) + Eventually(OperatorImage(ns)).Should(ContainSubstring(releaseVersion)) + Eventually(CRDs()).Should(HaveLen(ExpectedCRDs)) + + //Test a simple route + t.Run("simple route", func(t *testing.T) { + name := "simpleyaml" + Expect(KamelRun(ns, "files/yaml.yaml", "--name", name).Execute()).To(Succeed()) + Eventually(IntegrationPodPhase(ns, name), TestTimeoutMedium).Should(Equal(corev1.PodRunning)) + Eventually(IntegrationLogs(ns, name), TestTimeoutShort).Should(ContainSubstring("Magicstring!")) + }) + + // Upgrade CRDs with kustomize + ExpectExecSucceed(t, + exec.Command( + "kubectl", + "replace", + "-f", + "../../../helm/camel-k/crds/", + "-n", + ns, + ), + ) + + // Upgrade operator to current version + ExpectExecSucceed(t, Make(fmt.Sprintf("CUSTOM_IMAGE=%s", customImage), "set-version")) + ExpectExecSucceed(t, Make("release-helm")) + ExpectExecSucceed(t, + exec.Command( + "helm", + "upgrade", + "camel-k", + fmt.Sprintf("../../../docs/charts/camel-k-%s.tgz", defaults.Version), + "--set", + fmt.Sprintf("platform.build.registry.address=%s", KAMEL_INSTALL_REGISTRY), + "--set", + "platform.build.registry.insecure=true", + "-n", + ns, + "--force", + ), + ) + + Eventually(OperatorPod(ns)).ShouldNot(BeNil()) + Eventually(OperatorImage(ns)).Should(ContainSubstring(defaults.Version)) + + //Test again a simple route + t.Run("simple route upgraded", func(t *testing.T) { + name := "upgradedyaml" + Expect(KamelRun(ns, "files/yaml.yaml", "--name", name).Execute()).To(Succeed()) + Eventually(IntegrationPodPhase(ns, name), TestTimeoutMedium).Should(Equal(corev1.PodRunning)) + Eventually(IntegrationLogs(ns, name), TestTimeoutShort).Should(ContainSubstring("Magicstring!")) + }) + + // Uninstall with helm + ExpectExecSucceed(t, + exec.Command( + "helm", + "uninstall", + "camel-k", + "-n", + ns, + ), + ) + Eventually(OperatorPod(ns)).Should(BeNil()) + + // helm does not remove the CRDs + Eventually(CRDs()).Should(HaveLen(ExpectedCRDs)) + ExpectExecSucceed(t, + exec.Command( + "kubectl", + "delete", + "-k", + "../../../config/crd/", + "-n", + ns, + ), + ) + Eventually(CRDs()).Should(HaveLen(0)) + }) +} diff --git a/e2e/support/test_support.go b/e2e/support/test_support.go index 91b4228ad..61aa98a53 100644 --- a/e2e/support/test_support.go +++ b/e2e/support/test_support.go @@ -95,6 +95,12 @@ import ( const kubeConfigEnvVar = "KUBECONFIG" const ciPID = "/tmp/ci-k8s-pid" +// v1.Build, v1.Integration +// v1.IntegrationKit, v1.IntegrationPlatform +// v1.Kamelet, v1.Pipe, +// v1alpha1.Kamelet, v1alpha1.KameletBinding +const ExpectedCRDs = 8 + var TestTimeoutShort = 1 * time.Minute var TestTimeoutMedium = 5 * time.Minute var TestTimeoutLong = 15 * time.Minute