This is an automated email from the ASF dual-hosted git repository.
squakez pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git
The following commit(s) were added to refs/heads/main by this push:
new c7bc01764 chore(e2e): attempt to fix test flakiness
c7bc01764 is described below
commit c7bc01764f26b1e3a2ddc0f754912d9c01d60936
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Tue Aug 11 08:50:46 2026 +0200
chore(e2e): attempt to fix test flakiness
Closes #6650
Closes #6689
Closes #6699
---
e2e/advanced/operator_id_filtering_test.go | 122 -----------------------------
e2e/common/misc/scale_integration_test.go | 10 ++-
e2e/common/misc/structured_logs_test.go | 8 +-
e2e/common/traits/init_container_test.go | 4 +-
e2e/knative/kamelet_test.go | 25 +++---
5 files changed, 26 insertions(+), 143 deletions(-)
diff --git a/e2e/advanced/operator_id_filtering_test.go
b/e2e/advanced/operator_id_filtering_test.go
deleted file mode 100644
index 184603d91..000000000
--- a/e2e/advanced/operator_id_filtering_test.go
+++ /dev/null
@@ -1,122 +0,0 @@
-//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 advanced
-
-import (
- "context"
- "testing"
- "time"
-
- . "github.com/onsi/gomega"
- corev1 "k8s.io/api/core/v1"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-
- . "github.com/apache/camel-k/v2/e2e/support"
- v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1"
-)
-
-func TestOperatorIDFiltering(t *testing.T) {
- t.Parallel()
-
- WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
- WithNewTestNamespace(t, func(ctx context.Context, g *WithT,
nsop1 string) {
- operator1 := "operator-1"
- InstallOperatorWithConf(t, ctx, g, nsop1, operator1,
true, nil)
-
- WithNewTestNamespace(t, func(ctx context.Context, g
*WithT, nsop2 string) {
- operator2 := "operator-2"
- InstallOperatorWithConf(t, ctx, g, nsop2,
operator2, true, nil)
-
- t.Run("Operators ignore non-scoped
integrations", func(t *testing.T) {
- g.Expect(KamelRunWithID(t, ctx,
"operator-x", ns, "files/yaml.yaml", "--name",
"untouched").Execute()).To(Succeed())
- g.Consistently(IntegrationPhase(t, ctx,
ns, "untouched"), 10*time.Second).Should(BeEmpty())
- })
-
- t.Run("Operators run scoped integrations",
func(t *testing.T) {
- g.Expect(KamelRunWithID(t, ctx,
"operator-x", ns, "files/yaml.yaml", "--name",
"moving").Execute()).To(Succeed())
- g.Expect(AssignIntegrationToOperator(t,
ctx, ns, "moving", operator1)).To(Succeed())
- g.Eventually(IntegrationPhase(t, ctx,
ns, "moving"), TestTimeoutMedium).Should(Equal(v1.IntegrationPhaseRunning))
- g.Eventually(IntegrationPodPhase(t,
ctx, ns, "moving"), TestTimeoutLong).Should(Equal(corev1.PodRunning))
- g.Eventually(IntegrationLogs(t, ctx,
ns, "moving"), TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
- })
-
- t.Run("Operators can handoff scoped
integrations", func(t *testing.T) {
- g.Expect(AssignIntegrationToOperator(t,
ctx, ns, "moving", operator2)).To(Succeed())
- g.Eventually(IntegrationPhase(t, ctx,
ns, "moving"), TestTimeoutMedium).Should(Equal(v1.IntegrationPhaseBuildingKit))
- g.Eventually(IntegrationPhase(t, ctx,
ns, "moving"), TestTimeoutMedium).Should(Equal(v1.IntegrationPhaseRunning))
- g.Eventually(IntegrationPodPhase(t,
ctx, ns, "moving"), TestTimeoutLong).Should(Equal(corev1.PodRunning))
- g.Eventually(IntegrationLogs(t, ctx,
ns, "moving"), TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
- })
-
- t.Run("Operators can be deactivated after
completely handing off scoped integrations", func(t *testing.T) {
- g.Expect(ScaleOperator(t, ctx, nsop1,
0)).To(Succeed())
- g.Expect(Kamel(t, ctx, "rebuild", "-n",
ns, "moving").Execute()).To(Succeed())
- g.Eventually(IntegrationPhase(t, ctx,
ns, "moving"), TestTimeoutMedium).Should(Equal(v1.IntegrationPhaseRunning))
- g.Eventually(IntegrationPodPhase(t,
ctx, ns, "moving"), TestTimeoutLong).Should(Equal(corev1.PodRunning))
- g.Eventually(IntegrationLogs(t, ctx,
ns, "moving"), TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
- g.Expect(ScaleOperator(t, ctx, nsop1,
1)).To(Succeed())
- })
-
- t.Run("Operators can run scoped integrations
with fixed image", func(t *testing.T) {
- kitName := IntegrationKitName(t, ctx,
ns, "moving")()
- g.Expect(kitName).NotTo(BeEmpty())
- kitImage := KitImage(t, ctx, nsop2,
kitName)()
- g.Expect(kitImage).NotTo(BeEmpty())
- // external kit creation
- externalKit := v1.IntegrationKit{
- ObjectMeta: metav1.ObjectMeta{
- Namespace: ns,
- Name: "external",
- Labels:
map[string]string{
-
v1.IntegrationKitTypeLabel: v1.IntegrationKitTypeExternal,
- },
- Annotations:
map[string]string{
-
v1.OperatorIDAnnotation: operator2,
- },
- },
- Spec: v1.IntegrationKitSpec{
- Image: kitImage,
- },
- }
- g.Expect(TestClient(t).Create(ctx,
&externalKit)).Should(BeNil())
- g.Expect(KamelRunWithID(t, ctx,
operator2, ns, "files/yaml.yaml", "--name", "pre-built", "--kit",
"external").Execute()).To(Succeed())
- g.Consistently(IntegrationPhase(t, ctx,
ns, "pre-built"),
10*time.Second).ShouldNot(Equal(v1.IntegrationPhaseBuildingKit))
- g.Eventually(IntegrationPhase(t, ctx,
ns, "pre-built"), TestTimeoutShort).Should(Equal(v1.IntegrationPhaseRunning))
- g.Eventually(IntegrationStatusImage(t,
ctx, ns, "pre-built"), TestTimeoutShort).Should(Equal(kitImage))
- g.Eventually(IntegrationPodPhase(t,
ctx, ns, "pre-built"), TestTimeoutLong).Should(Equal(corev1.PodRunning))
- g.Eventually(IntegrationLogs(t, ctx,
ns, "pre-built"), TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
- g.Expect(Kamel(t, ctx, "delete",
"pre-built", "-n", ns).Execute()).To(Succeed())
- })
-
- t.Run("Operators can run scoped Pipes", func(t
*testing.T) {
- g.Expect(KamelBindWithID(t, ctx,
"operator-x", ns, "timer-source?message=Hello", "log-sink", "--name",
"klb").Execute()).To(Succeed())
- g.Consistently(Integration(t, ctx, ns,
"klb"), 10*time.Second).Should(BeNil())
- g.Expect(AssignPipeToOperator(t, ctx,
ns, "klb", operator1)).To(Succeed())
- g.Eventually(Integration(t, ctx, ns,
"klb"), TestTimeoutShort).ShouldNot(BeNil())
- g.Eventually(IntegrationPhase(t, ctx,
ns, "klb"), TestTimeoutMedium).Should(Equal(v1.IntegrationPhaseRunning))
- g.Eventually(IntegrationPodPhase(t,
ctx, ns, "klb"), TestTimeoutLong).Should(Equal(corev1.PodRunning))
- })
- })
- })
- })
-}
diff --git a/e2e/common/misc/scale_integration_test.go
b/e2e/common/misc/scale_integration_test.go
index 4572e0ff1..ec36d4270 100644
--- a/e2e/common/misc/scale_integration_test.go
+++ b/e2e/common/misc/scale_integration_test.go
@@ -116,14 +116,16 @@ func TestIntegrationScale(t *testing.T) {
// Save resources by deleting the integration
g.Expect(Kamel(t, ctx, "delete", name, "-n",
ns).Execute()).To(Succeed())
- g.Expect(KamelRun(t, ctx, ns, "files/Java.java",
"--name", "pre-built", "-t", fmt.Sprintf("container.image=%s",
image)).Execute()).To(Succeed())
+ g.Expect(KamelRun(t, ctx, ns, "files/Java.java",
+ "--name", "pre-built",
+ "-t", fmt.Sprintf("container.image=%s", image),
+ ).Execute()).To(Succeed())
g.Eventually(IntegrationPhase(t, ctx, ns, "pre-built"),
TestTimeoutShort).Should(Equal(v1.IntegrationPhaseRunning))
- g.Eventually(IntegrationPodPhase(t, ctx, ns,
"pre-built"), TestTimeoutLong).Should(Equal(corev1.PodRunning))
g.Expect(ScaleIntegration(t, ctx, ns, "pre-built",
0)).To(Succeed())
- g.Eventually(IntegrationPod(t, ctx, ns, "pre-built"),
TestTimeoutMedium).Should(BeNil())
+ g.Eventually(IntegrationPod(t, ctx, ns,
"pre-built")).Should(BeNil())
g.Expect(ScaleIntegration(t, ctx, ns, "pre-built",
1)).To(Succeed())
g.Eventually(IntegrationPhase(t, ctx, ns, "pre-built"),
TestTimeoutShort).Should(Equal(v1.IntegrationPhaseRunning))
- g.Eventually(IntegrationPodPhase(t, ctx, ns,
"pre-built"), TestTimeoutLong).Should(Equal(corev1.PodRunning))
+ g.Eventually(IntegrationPodPhase(t, ctx, ns,
"pre-built")).Should(Equal(corev1.PodRunning))
})
})
}
diff --git a/e2e/common/misc/structured_logs_test.go
b/e2e/common/misc/structured_logs_test.go
index 2af59f0b9..ba08e3bd0 100644
--- a/e2e/common/misc/structured_logs_test.go
+++ b/e2e/common/misc/structured_logs_test.go
@@ -24,7 +24,6 @@ package common
import (
"context"
- "fmt"
"testing"
. "github.com/onsi/gomega"
@@ -40,20 +39,17 @@ func TestStructuredLogs(t *testing.T) {
WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
name := RandomizedSuffixName("java")
g.Expect(KamelRun(t, ctx, ns, "files/Java.java", "--name",
name).Execute()).To(Succeed())
- g.Eventually(IntegrationPodPhase(t, ctx, ns, name),
TestTimeoutLong).Should(Equal(corev1.PodRunning))
- g.Eventually(IntegrationConditionStatus(t, ctx, ns, name,
v1.IntegrationConditionReady), TestTimeoutShort).
+ g.Eventually(IntegrationConditionStatus(t, ctx, ns, name,
v1.IntegrationConditionReady), TestTimeoutMedium).
Should(Equal(corev1.ConditionTrue))
pod := OperatorPodGlobal(t, ctx)()
g.Expect(pod).NotTo(BeNil())
- // pod.Namespace could be different from ns if using global
operator
- fmt.Printf("Fetching logs for operator pod %s in namespace %s",
pod.Name, pod.Namespace)
logOptions := &corev1.PodLogOptions{
Container: "camel-k-operator",
}
logs, err := StructuredLogs(t, ctx, pod.Namespace, pod.Name,
logOptions, false)
- g.Expect(err).To(BeNil())
+ g.Expect(err).NotTo(HaveOccurred())
g.Expect(logs).NotTo(BeEmpty())
})
}
diff --git a/e2e/common/traits/init_container_test.go
b/e2e/common/traits/init_container_test.go
index 388ebc057..20a1d648c 100644
--- a/e2e/common/traits/init_container_test.go
+++ b/e2e/common/traits/init_container_test.go
@@ -47,7 +47,7 @@ func TestInitContainerTrait(t *testing.T) {
"init-containers.init-tasks=init;alpine;/bin/sh
-c \"echo helloInit >> /tmp/init\"",
"--name",
name).Execute()).To(Succeed())
- g.Eventually(IntegrationConditionStatus(t, ctx, ns,
name, v1.IntegrationConditionReady)).
+ g.Eventually(IntegrationConditionStatus(t, ctx, ns,
name, v1.IntegrationConditionReady), TestTimeoutMedium).
Should(Equal(corev1.ConditionTrue))
g.Eventually(IntegrationPodPhase(t, ctx, ns,
name)).Should(Equal(corev1.PodRunning))
g.Eventually(IntegrationLogs(t, ctx, ns,
name)).Should(ContainSubstring("helloInit"))
@@ -62,7 +62,7 @@ func TestInitContainerTrait(t *testing.T) {
"init-containers.sidecar-tasks=sidecar;alpine;/bin/sh -c \"for i in $(seq 1
10); do echo helloSidecar$i > /tmp/sidecar_$i.txt; sleep 1; done\"",
"--name",
name).Execute()).To(Succeed())
- g.Eventually(IntegrationConditionStatus(t, ctx, ns,
name, v1.IntegrationConditionReady)).
+ g.Eventually(IntegrationConditionStatus(t, ctx, ns,
name, v1.IntegrationConditionReady), TestTimeoutMedium).
Should(Equal(corev1.ConditionTrue))
g.Eventually(IntegrationPodPhase(t, ctx, ns,
name)).Should(Equal(corev1.PodRunning))
g.Eventually(IntegrationLogs(t, ctx, ns,
name)).Should(ContainSubstring("helloSidecar10"))
diff --git a/e2e/knative/kamelet_test.go b/e2e/knative/kamelet_test.go
index b9dea9832..bd5a71c0f 100644
--- a/e2e/knative/kamelet_test.go
+++ b/e2e/knative/kamelet_test.go
@@ -47,15 +47,20 @@ func TestKameletChange(t *testing.T) {
timerSource := "my-timer-source"
g.Expect(CreateTimerKamelet(t, ctx, ns,
timerSource)()).To(Succeed())
g.Expect(CreateKnativeChannel(t, ctx, ns,
knChannel)()).To(Succeed())
+
// Consumer route that will read from the Knative channel
g.Expect(KamelRun(t, ctx, ns,
"files/test-kamelet-display.yaml", "-w").Execute()).To(Succeed())
- g.Eventually(IntegrationPodPhase(t, ctx, ns,
"test-kamelet-display")).Should(Equal(corev1.PodRunning))
+ g.Eventually(IntegrationConditionStatus(t, ctx, ns,
"test-kamelet-display", v1.IntegrationConditionReady), TestTimeoutMedium).
+ Should(Equal(corev1.ConditionTrue))
// Create the Pipe
- g.Expect(KamelBind(t, ctx, ns, timerSource, knChannelConf,
"-p", "source.message=HelloKnative!",
- "--trait", "health.enabled=true", "--trait",
"health.readiness-initial-delay=10", "--name",
timerPipe).Execute()).To(Succeed())
- g.Eventually(IntegrationPodPhase(t, ctx, ns,
timerPipe)).Should(Equal(corev1.PodRunning))
- g.Eventually(IntegrationConditionStatus(t, ctx, ns, timerPipe,
v1.IntegrationConditionReady),
TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
+ g.Expect(KamelBind(t, ctx, ns, timerSource, knChannelConf,
+ "-p", "source.message=HelloKnative!",
+ "--name", timerPipe,
+ ).Execute()).To(Succeed())
+ g.Eventually(IntegrationConditionStatus(t, ctx, ns, timerPipe,
v1.IntegrationConditionReady), TestTimeoutMedium).
+ Should(Equal(corev1.ConditionTrue))
+
// Consume the message
g.Eventually(IntegrationLogs(t, ctx, ns,
"test-kamelet-display"),
TestTimeoutShort).Should(ContainSubstring("HelloKnative!"))
@@ -66,11 +71,13 @@ func TestKameletChange(t *testing.T) {
))
// Update the Pipe
- g.Expect(KamelBind(t, ctx, ns, timerSource, knChannelConf,
"-p", "source.message=message is Hi",
- "--trait", "health.enabled=true", "--trait",
"health.readiness-initial-delay=10", "--name",
timerPipe).Execute()).To(Succeed())
+ g.Expect(KamelBind(t, ctx, ns, timerSource, knChannelConf,
+ "-p", "source.message=message is Hi",
+ "--name", timerPipe,
+ ).Execute()).To(Succeed())
- g.Eventually(IntegrationPodPhase(t, ctx, ns, timerPipe),
TestTimeoutLong).Should(Equal(corev1.PodRunning))
- g.Eventually(IntegrationConditionStatus(t, ctx, ns, timerPipe,
v1.IntegrationConditionReady),
TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
+ g.Eventually(IntegrationConditionStatus(t, ctx, ns, timerPipe,
v1.IntegrationConditionReady), TestTimeoutMedium).
+ Should(Equal(corev1.ConditionTrue))
g.Eventually(IntegrationLogs(t, ctx, ns,
"test-kamelet-display"), TestTimeoutShort).Should(ContainSubstring("message is
Hi"))
g.Eventually(PipeCondition(t, ctx, ns, timerPipe,
v1.PipeConditionReady), TestTimeoutMedium).