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 7091e25fc chore(e2e): max pipelines refactoring
7091e25fc is described below

commit 7091e25fc15b5020b775f838be7d5fe20f81d0b4
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Tue Sep 29 08:49:07 2026 +0200

    chore(e2e): max pipelines refactoring
---
 e2e/advanced/build_max_pipelines_test.go | 195 +++++--------------------------
 e2e/support/test_support.go              |  29 ++++-
 2 files changed, 52 insertions(+), 172 deletions(-)

diff --git a/e2e/advanced/build_max_pipelines_test.go 
b/e2e/advanced/build_max_pipelines_test.go
index f7b1814d8..263d83ddc 100644
--- a/e2e/advanced/build_max_pipelines_test.go
+++ b/e2e/advanced/build_max_pipelines_test.go
@@ -24,182 +24,45 @@ package advanced
 
 import (
        "context"
-       "strconv"
        "testing"
-       "time"
 
        . "github.com/onsi/gomega"
+       corev1 "k8s.io/api/core/v1"
 
        . "github.com/apache/camel-k/v2/e2e/support"
        v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1"
-       corev1 "k8s.io/api/core/v1"
 )
 
-type kitOptions struct {
-       dependencies []string
-       traits       []string
-}
-
-func kitMaxBuildLimit(t *testing.T, maxRunningBuilds int32, condition 
func(runningBuilds int) bool, buildOrderStrategy v1.BuildOrderStrategy) {
+func TestRunBuildMaxParallelPipelines(t *testing.T) {
        WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
                InstallOperatorWithConf(t, ctx, g, ns, "", false, 
map[string]string{
-                       "MAX_RUNNING_BUILDS":   
strconv.FormatInt(int64(maxRunningBuilds), 10),
-                       "BUILD_ORDER_STRATEGY": string(buildOrderStrategy),
+                       "MAX_RUNNING_BUILDS": "1",
                })
-
-               buildA := "integration-a"
-               buildB := "integration-b"
-               buildC := "integration-c"
-
-               doKitBuildInNamespace(t, ctx, g, buildA, ns, TestTimeoutShort, 
kitOptions{
-                       dependencies: []string{
-                               "camel:timer", "camel:log",
-                       },
-                       traits: []string{
-                               "builder.properties=build-property=A",
-                       },
-               }, v1.BuildPhaseRunning, v1.IntegrationKitPhaseBuildRunning)
-
-               doKitBuildInNamespace(t, ctx, g, buildB, ns, TestTimeoutShort, 
kitOptions{
-                       dependencies: []string{
-                               "camel:timer", "camel:log",
-                       },
-                       traits: []string{
-                               "builder.properties=build-property=B",
-                       },
-               }, v1.BuildPhaseRunning, v1.IntegrationKitPhaseBuildRunning)
-
-               doKitBuildInNamespace(t, ctx, g, buildC, ns, TestTimeoutShort, 
kitOptions{
-                       dependencies: []string{
-                               "camel:timer", "camel:log",
-                       },
-                       traits: []string{
-                               "builder.properties=build-property=C",
-                       },
-               }, v1.BuildPhaseScheduling, v1.IntegrationKitPhaseNone)
-
-               g.Consistently(BuildsRunning(
-                       BuildPhase(t, ctx, ns, buildA),
-                       BuildPhase(t, ctx, ns, buildB),
-                       BuildPhase(t, ctx, ns, buildC),
-               ), TestTimeoutShort, 10*time.Second).Should(Satisfy(condition))
-
-               // verify that all builds are successful
-               g.Eventually(BuildPhase(t, ctx, ns, buildA), 
TestTimeoutLong).Should(Equal(v1.BuildPhaseSucceeded))
-               g.Eventually(KitPhase(t, ctx, ns, buildA), 
TestTimeoutLong).Should(Equal(v1.IntegrationKitPhaseReady))
-               g.Eventually(BuildPhase(t, ctx, ns, buildB), 
TestTimeoutLong).Should(Equal(v1.BuildPhaseSucceeded))
-               g.Eventually(KitPhase(t, ctx, ns, buildB), 
TestTimeoutLong).Should(Equal(v1.IntegrationKitPhaseReady))
-               g.Eventually(BuildPhase(t, ctx, ns, buildC), 
TestTimeoutLong).Should(Equal(v1.BuildPhaseSucceeded))
-               g.Eventually(KitPhase(t, ctx, ns, buildC), 
TestTimeoutLong).Should(Equal(v1.IntegrationKitPhaseReady))
+               integrationA := RandomizedSuffixName("java-a")
+               g.Expect(KamelRun(t, ctx, ns, "files/Java.java",
+                       "--name", integrationA,
+               ).Execute()).To(Succeed())
+
+               // The presence of a builder property guarantee a new build
+               integrationB := RandomizedSuffixName("java-b")
+               g.Expect(KamelRun(t, ctx, ns, "files/Java.java",
+                       "--name", integrationB,
+                       "-t", "builder.properties=build-property=new",
+               ).Execute()).To(Succeed())
+
+               g.Eventually(Builds(t, ctx, ns)).Should(Equal(2))
+               // At least one build starts running
+               g.Eventually(BuildsRunning(t, ctx, ns)).Should(Equal(1))
+               // Never more than one build running concurrently
+               g.Consistently(BuildsRunning(t, ctx, ns), "30s", "2s").
+                       Should(BeNumerically("<=", 1))
+               // Eventually all builds complete
+               g.Eventually(BuildsRunning(t, ctx, ns), TestTimeoutLong).
+                       Should(Equal(0))
+
+               g.Eventually(IntegrationConditionStatus(t, ctx, ns, 
integrationA, v1.IntegrationConditionReady)).
+                       Should(Equal(corev1.ConditionTrue))
+               g.Eventually(IntegrationConditionStatus(t, ctx, ns, 
integrationB, v1.IntegrationConditionReady)).
+                       Should(Equal(corev1.ConditionTrue))
        })
 }
-
-func TestKitMaxBuildLimitSequential(t *testing.T) {
-       t.Parallel()
-       // We must verify we have at least 1 build at a time
-       var condition = func(runningBuilds int) bool {
-               return runningBuilds <= 1
-       }
-       kitMaxBuildLimit(t, 2, condition, v1.BuildOrderStrategySequential)
-}
-
-func TestKitMaxBuildLimitFIFO(t *testing.T) {
-       t.Parallel()
-       // We may have up to 2 parallel builds
-       var condition = func(runningBuilds int) bool {
-               return runningBuilds <= 2
-       }
-       kitMaxBuildLimit(t, 2, condition, v1.BuildOrderStrategyFIFO)
-}
-
-func TestKitMaxBuildLimitDependencies(t *testing.T) {
-       t.Parallel()
-       // We may have up to 2 parallel builds
-       var condition = func(runningBuilds int) bool {
-               return runningBuilds <= 2
-       }
-       kitMaxBuildLimit(t, 2, condition, v1.BuildOrderStrategyDependencies)
-}
-
-func TestMaxBuildLimitWaitingBuilds(t *testing.T) {
-       t.Parallel()
-       WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
-               InstallOperatorWithConf(t, ctx, g, ns, "", false, 
map[string]string{
-                       "MAX_RUNNING_BUILDS":   "1",
-                       "BUILD_ORDER_STRATEGY": 
string(v1.BuildOrderStrategyFIFO),
-               })
-
-               buildA := "integration-a"
-               buildB := "integration-b"
-               buildC := "integration-c"
-
-               doKitBuildInNamespace(t, ctx, g, buildA, ns, TestTimeoutShort, 
kitOptions{
-                       dependencies: []string{
-                               "camel:timer", "camel:log",
-                       },
-                       traits: []string{
-                               "builder.properties=build-property=A",
-                       },
-               }, v1.BuildPhaseRunning, v1.IntegrationKitPhaseBuildRunning)
-
-               doKitBuildInNamespace(t, ctx, g, buildB, ns, TestTimeoutShort, 
kitOptions{
-                       dependencies: []string{
-                               "camel:cron", "camel:log", "camel:joor",
-                       },
-                       traits: []string{
-                               "builder.properties=build-property=B",
-                       },
-               }, v1.BuildPhaseScheduling, v1.IntegrationKitPhaseNone)
-
-               doKitBuildInNamespace(t, ctx, g, buildC, ns, TestTimeoutShort, 
kitOptions{
-                       dependencies: []string{
-                               "camel:timer", "camel:log", "camel:joor", 
"camel:http",
-                       },
-                       traits: []string{
-                               "builder.properties=build-property=C",
-                       },
-               }, v1.BuildPhaseScheduling, v1.IntegrationKitPhaseNone)
-
-               // verify that last build is waiting
-               g.Eventually(BuildConditions(t, ctx, ns, buildC), 
TestTimeoutMedium).ShouldNot(BeNil())
-               g.Eventually(
-                       BuildCondition(t, ctx, ns, buildC, 
v1.BuildConditionType(v1.BuildConditionScheduled))().Status,
-                       TestTimeoutShort).Should(Equal(corev1.ConditionFalse))
-               g.Eventually(
-                       BuildCondition(t, ctx, ns, buildC, 
v1.BuildConditionType(v1.BuildConditionScheduled))().Reason,
-                       
TestTimeoutShort).Should(Equal(v1.BuildConditionWaitingReason))
-
-               // verify that last build is scheduled
-               g.Eventually(BuildPhase(t, ctx, ns, buildC), 
TestTimeoutLong).Should(Equal(v1.BuildPhaseSucceeded))
-               g.Eventually(KitPhase(t, ctx, ns, buildC), 
TestTimeoutLong).Should(Equal(v1.IntegrationKitPhaseReady))
-
-               g.Eventually(BuildConditions(t, ctx, ns, buildC), 
TestTimeoutLong).ShouldNot(BeNil())
-               g.Eventually(
-                       BuildCondition(t, ctx, ns, buildC, 
v1.BuildConditionType(v1.BuildConditionScheduled))().Status,
-                       TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
-               g.Eventually(
-                       BuildCondition(t, ctx, ns, buildC, 
v1.BuildConditionType(v1.BuildConditionScheduled))().Reason,
-                       
TestTimeoutShort).Should(Equal(v1.BuildConditionReadyReason))
-       })
-}
-
-func doKitBuildInNamespace(t *testing.T, ctx context.Context, g *WithT, name 
string, ns string,
-       testTimeout time.Duration, options kitOptions, buildPhase 
v1.BuildPhase, kitPhase v1.IntegrationKitPhase) {
-       buildKitArgs := []string{"kit", "create", name, "-n", ns}
-       for _, dependency := range options.dependencies {
-               buildKitArgs = append(buildKitArgs, "-d", dependency)
-       }
-       for _, trait := range options.traits {
-               buildKitArgs = append(buildKitArgs, "-t", trait)
-       }
-
-       g.Expect(Kamel(t, ctx, buildKitArgs...).Execute()).To(Succeed())
-
-       g.Eventually(Build(t, ctx, ns, name), testTimeout).ShouldNot(BeNil())
-       if buildPhase != v1.BuildPhaseNone {
-               g.Eventually(BuildPhase(t, ctx, ns, name), 
testTimeout).Should(Equal(buildPhase))
-       }
-       if kitPhase != v1.IntegrationKitPhaseNone {
-               g.Eventually(KitPhase(t, ctx, ns, name), 
testTimeout).Should(Equal(kitPhase))
-       }
-}
diff --git a/e2e/support/test_support.go b/e2e/support/test_support.go
index dab27c050..5635da546 100644
--- a/e2e/support/test_support.go
+++ b/e2e/support/test_support.go
@@ -1599,15 +1599,32 @@ func BuildFailureRecoveryAttempt(t *testing.T, ctx 
context.Context, ns, name str
        }
 }
 
-func BuildsRunning(predicates ...func() v1.BuildPhase) func() int {
+func BuildsRunning(t *testing.T, ctx context.Context, ns string) func() int {
        return func() int {
-               runningBuilds := 0
-               for _, predicate := range predicates {
-                       if predicate() == v1.BuildPhaseRunning {
-                               runningBuilds++
+               lst := v1.BuildList{}
+               if err := TestClient(t).List(ctx, &lst, ctrl.InNamespace(ns)); 
err != nil {
+                       failTest(t, err)
+               }
+
+               running := 0
+               for _, build := range lst.Items {
+                       if build.Status.Phase == v1.BuildPhaseRunning {
+                               running++
                        }
                }
-               return runningBuilds
+
+               return running
+       }
+}
+
+func Builds(t *testing.T, ctx context.Context, ns string) func() int {
+       return func() int {
+               lst := v1.BuildList{}
+               if err := TestClient(t).List(ctx, &lst, ctrl.InNamespace(ns)); 
err != nil {
+                       failTest(t, err)
+               }
+
+               return len(lst.Items)
        }
 }
 

Reply via email to