blob: 2ce57759a0305ccb92fa974a666ba5942a56b079 [file] [log] [blame]
// +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 (
"os"
"testing"
"time"
. "github.com/onsi/gomega"
v1 "k8s.io/api/core/v1"
. "github.com/apache/camel-k/e2e/support"
camelv1 "github.com/apache/camel-k/pkg/apis/camel/v1"
"github.com/apache/camel-k/pkg/util/defaults"
)
func TestOperatorUpgrade(t *testing.T) {
// Clean all cluster-wide resources that could corrupt the test run
Expect(Kamel("uninstall", "--all", "--olm=false").Execute()).To(Succeed())
WithNewTestNamespace(t, func(ns string) {
version, ok := os.LookupEnv("KAMEL_K_TEST_RELEASE_VERSION")
Expect(ok).To(BeTrue())
image, ok := os.LookupEnv("KAMEL_K_TEST_OPERATOR_CURRENT_IMAGE")
Expect(ok).To(BeTrue())
kamel, ok := os.LookupEnv("RELEASED_KAMEL_BIN")
Expect(ok).To(BeTrue())
//set KAMEL_BIN only for this test - don't override the ENV variable for all tests
Expect(os.Setenv("KAMEL_BIN", kamel)).To(Succeed())
Expect(Kamel("install", "--olm=false", "--cluster-setup", "--force").Execute()).To(Succeed())
Expect(Kamel("install", "--olm=false", "-n", ns).Execute()).To(Succeed())
// Check the operator pod is running
Eventually(OperatorPodPhase(ns), TestTimeoutMedium).Should(Equal(v1.PodRunning))
// Refresh the test client to account for the newly installed CRDs
SyncClient()
// Check the IntegrationPlatform has been reconciled
Eventually(PlatformVersion(ns), TestTimeoutMedium).Should(Equal(version))
// Run the Integration
name := "yaml"
Expect(Kamel("run", "-n", ns, "files/yaml.yaml").Execute()).To(Succeed())
Eventually(IntegrationPodPhase(ns, name), TestTimeoutMedium).Should(Equal(v1.PodRunning))
Eventually(IntegrationCondition(ns, name, camelv1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(v1.ConditionTrue))
// Check the Integration version
Eventually(IntegrationVersion(ns, "yaml")).Should(Equal(version))
kit := IntegrationKit(ns, "yaml")()
// Clear the KAMEL_BIN environment variable so that the current version is used from now on
Expect(os.Setenv("KAMEL_BIN", "")).To(Succeed())
// Upgrade the operator by installing the current version
// FIXME: it seems forcing the installation does not re-install the CRDs
Expect(Kamel("install", "--olm=false", "--cluster-setup", "--force").Execute()).To(Succeed())
Expect(Kamel("install", "-n", ns, "--olm=false", "--force", "--operator-image", image).Execute()).To(Succeed())
// Check the operator image is the current built one
Eventually(OperatorImage(ns)).Should(Equal(image))
// Check the operator pod is running
Eventually(OperatorPodPhase(ns), TestTimeoutMedium).Should(Equal(v1.PodRunning))
// Check the IntegrationPlatform has been reconciled
Eventually(PlatformVersion(ns), TestTimeoutMedium).Should(Equal(defaults.Version))
// Check the Integration hasn't been upgraded
Consistently(IntegrationVersion(ns, "yaml"), 3*time.Second).Should(Equal(version))
// Force the Integration upgrade
Expect(Kamel("rebuild", "yaml", "-n", ns).Execute()).To(Succeed())
// Check the Integration version change
Eventually(IntegrationVersion(ns, "yaml")).Should(Equal(defaults.Version))
// Check the previous kit is not garbage collected
Eventually(KitsWithVersion(ns, version)).Should(Equal(1))
// Check a new kit is created with the current version
Eventually(KitsWithVersion(ns, defaults.Version)).Should(Equal(1))
// Check the Integration uses the new kit
Eventually(IntegrationKit(ns, "yaml"), TestTimeoutMedium).ShouldNot(Equal(kit))
// Check the Integration runs correctly
Eventually(IntegrationPodPhase(ns, "yaml"), TestTimeoutMedium).Should(Equal(v1.PodRunning))
Eventually(IntegrationCondition(ns, name, camelv1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(v1.ConditionTrue))
// Clean up
Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed())
Expect(Kamel("uninstall", "--all", "--olm=false").Execute()).To(Succeed())
})
}