This is an automated email from the ASF dual-hosted git repository.
pcongiusti 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 f31bc57e3 fix(e2e): Improve max build limit E2E test
f31bc57e3 is described below
commit f31bc57e34c029a7f2e295f041dc2b46452123b4
Author: Christoph Deppisch <[email protected]>
AuthorDate: Fri May 5 15:20:56 2023 +0200
fix(e2e): Improve max build limit E2E test
- Improve assertions on max parallel running builds
- Make sure to properly dump test namespaces on failure
---
e2e/builder/build_test.go | 151 ++++++++++++++++++++++++--------------------
e2e/support/test_support.go | 12 ++++
2 files changed, 93 insertions(+), 70 deletions(-)
diff --git a/e2e/builder/build_test.go b/e2e/builder/build_test.go
index 7a7d1b21d..4fb00e041 100644
--- a/e2e/builder/build_test.go
+++ b/e2e/builder/build_test.go
@@ -23,6 +23,7 @@ limitations under the License.
package builder
import (
+ "errors"
"fmt"
"os"
"testing"
@@ -57,76 +58,86 @@ func TestKitMaxBuildLimit(t *testing.T) {
buildB := "integration-b"
buildC := "integration-c"
- ns1 := NewTestNamespace(false).GetName()
- defer DumpNamespace(t, ns1)
- defer DeleteNamespace(t, ns1)
-
- pl1 := v1.NewIntegrationPlatform(ns1, fmt.Sprintf("camel-k-%s",
ns))
- pl.Spec.DeepCopyInto(&pl1.Spec)
- pl1.Spec.Build.Maven.Settings = v1.ValueSource{}
- pl1.SetOperatorID(fmt.Sprintf("camel-k-%s", ns))
- if err := TestClient().Create(TestContext, &pl1); err != nil {
- t.Error(err)
- t.FailNow()
- }
-
- Eventually(PlatformPhase(ns1),
TestTimeoutMedium).Should(Equal(v1.IntegrationPlatformPhaseReady))
-
- ns2 := NewTestNamespace(false).GetName()
- defer DumpNamespace(t, ns2)
- defer DeleteNamespace(t, ns2)
-
- pl2 := v1.NewIntegrationPlatform(ns2, fmt.Sprintf("camel-k-%s",
ns))
- pl.Spec.DeepCopyInto(&pl2.Spec)
- pl2.Spec.Build.Maven.Settings = v1.ValueSource{}
- pl2.SetOperatorID(fmt.Sprintf("camel-k-%s", ns))
- if err := TestClient().Create(TestContext, &pl2); err != nil {
- t.Error(err)
- t.FailNow()
- }
-
- Eventually(PlatformPhase(ns2),
TestTimeoutMedium).Should(Equal(v1.IntegrationPlatformPhaseReady))
-
- doKitBuildInNamespace(buildA, ns, TestTimeoutShort, kitOptions{
- operatorID: fmt.Sprintf("camel-k-%s", ns),
- dependencies: []string{
- "camel:timer", "camel:log",
- },
- traits: []string{
- "builder.properties=build-property=A",
- },
- }, v1.BuildPhaseRunning, v1.IntegrationKitPhaseBuildRunning)
-
- doKitBuildInNamespace(buildB, ns1, TestTimeoutShort, kitOptions{
- operatorID: fmt.Sprintf("camel-k-%s", ns),
- dependencies: []string{
- "camel:timer", "camel:log",
- },
- traits: []string{
- "builder.properties=build-property=B",
- },
- }, v1.BuildPhaseRunning, v1.IntegrationKitPhaseBuildRunning)
-
- doKitBuildInNamespace(buildC, ns2, TestTimeoutShort, kitOptions{
- operatorID: fmt.Sprintf("camel-k-%s", ns),
- dependencies: []string{
- "camel:timer", "camel:log",
- },
- traits: []string{
- "builder.properties=build-property=C",
- },
- }, v1.BuildPhaseScheduling, v1.IntegrationKitPhaseNone)
-
- // verify that buildC is allowed to build as soon as buildA has
finished
- Eventually(BuildPhase(ns, buildA),
TestTimeoutLong).Should(Equal(v1.BuildPhaseSucceeded))
- Eventually(BuildPhase(ns2, buildC),
TestTimeoutShort).Should(Equal(v1.BuildPhaseRunning))
- Eventually(KitPhase(ns2, buildC),
TestTimeoutLong).Should(Equal(v1.IntegrationKitPhaseBuildRunning))
-
- // verify that all builds are successful
- Eventually(BuildPhase(ns1, buildB),
TestTimeoutLong).Should(Equal(v1.BuildPhaseSucceeded))
- Eventually(KitPhase(ns1, buildB),
TestTimeoutLong).Should(Equal(v1.IntegrationKitPhaseReady))
- Eventually(BuildPhase(ns2, buildC),
TestTimeoutLong).Should(Equal(v1.BuildPhaseSucceeded))
- Eventually(KitPhase(ns2, buildC),
TestTimeoutLong).Should(Equal(v1.IntegrationKitPhaseReady))
+ WithNewTestNamespace(t, func(ns1 string) {
+ WithNewTestNamespace(t, func(ns2 string) {
+ pl1 := v1.NewIntegrationPlatform(ns1,
fmt.Sprintf("camel-k-%s", ns))
+ pl.Spec.DeepCopyInto(&pl1.Spec)
+ pl1.Spec.Build.Maven.Settings = v1.ValueSource{}
+ pl1.SetOperatorID(fmt.Sprintf("camel-k-%s", ns))
+ if err := TestClient().Create(TestContext,
&pl1); err != nil {
+ t.Error(err)
+ t.FailNow()
+ }
+
+ Eventually(PlatformPhase(ns1),
TestTimeoutMedium).Should(Equal(v1.IntegrationPlatformPhaseReady))
+
+ pl2 := v1.NewIntegrationPlatform(ns2,
fmt.Sprintf("camel-k-%s", ns))
+ pl.Spec.DeepCopyInto(&pl2.Spec)
+ pl2.Spec.Build.Maven.Settings = v1.ValueSource{}
+ pl2.SetOperatorID(fmt.Sprintf("camel-k-%s", ns))
+ if err := TestClient().Create(TestContext,
&pl2); err != nil {
+ t.Error(err)
+ t.FailNow()
+ }
+
+ Eventually(PlatformPhase(ns2),
TestTimeoutMedium).Should(Equal(v1.IntegrationPlatformPhaseReady))
+
+ doKitBuildInNamespace(buildA, ns,
TestTimeoutShort, kitOptions{
+ operatorID: fmt.Sprintf("camel-k-%s",
ns),
+ dependencies: []string{
+ "camel:timer", "camel:log",
+ },
+ traits: []string{
+
"builder.properties=build-property=A",
+ },
+ }, v1.BuildPhaseRunning,
v1.IntegrationKitPhaseBuildRunning)
+
+ doKitBuildInNamespace(buildB, ns1,
TestTimeoutShort, kitOptions{
+ operatorID: fmt.Sprintf("camel-k-%s",
ns),
+ dependencies: []string{
+ "camel:timer", "camel:log",
+ },
+ traits: []string{
+
"builder.properties=build-property=B",
+ },
+ }, v1.BuildPhaseRunning,
v1.IntegrationKitPhaseBuildRunning)
+
+ doKitBuildInNamespace(buildC, ns2,
TestTimeoutShort, kitOptions{
+ operatorID: fmt.Sprintf("camel-k-%s",
ns),
+ dependencies: []string{
+ "camel:timer", "camel:log",
+ },
+ traits: []string{
+
"builder.properties=build-property=C",
+ },
+ }, v1.BuildPhaseScheduling,
v1.IntegrationKitPhaseNone)
+
+ var notExceedsMaxBuildLimit =
func(runningBuilds int) bool {
+ return runningBuilds <= 2
+ }
+
+ limit := 0
+ for limit < 5 && BuildPhase(ns, buildA)() ==
v1.BuildPhaseRunning {
+ // verify that number of running builds
does not exceed max build limit
+
Consistently(BuildsRunning(BuildPhase(ns, buildA), BuildPhase(ns1, buildB),
BuildPhase(ns2, buildC)), TestTimeoutShort,
10*time.Second).Should(Satisfy(notExceedsMaxBuildLimit))
+ limit++
+ }
+
+ // make sure we have verified max build limit
at least once
+ if limit == 0 {
+
t.Error(errors.New(fmt.Sprintf("Unexpected build phase '%s' for %s - not able
to verify max builds limit", BuildPhase(ns, buildA)(), buildA)))
+ t.FailNow()
+ }
+
+ // verify that all builds are successful
+ Eventually(BuildPhase(ns, buildA),
TestTimeoutLong).Should(Equal(v1.BuildPhaseSucceeded))
+ Eventually(KitPhase(ns, buildA),
TestTimeoutLong).Should(Equal(v1.IntegrationKitPhaseReady))
+ Eventually(BuildPhase(ns1, buildB),
TestTimeoutLong).Should(Equal(v1.BuildPhaseSucceeded))
+ Eventually(KitPhase(ns1, buildB),
TestTimeoutLong).Should(Equal(v1.IntegrationKitPhaseReady))
+ Eventually(BuildPhase(ns2, buildC),
TestTimeoutLong).Should(Equal(v1.BuildPhaseSucceeded))
+ Eventually(KitPhase(ns2, buildC),
TestTimeoutLong).Should(Equal(v1.IntegrationKitPhaseReady))
+ })
+ })
})
}
diff --git a/e2e/support/test_support.go b/e2e/support/test_support.go
index c70725ff0..021f41aca 100644
--- a/e2e/support/test_support.go
+++ b/e2e/support/test_support.go
@@ -1621,6 +1621,18 @@ func BuildFailureRecovery(ns, name string) func() int {
}
}
+func BuildsRunning(predicates ...func() v1.BuildPhase) func() int {
+ return func() int {
+ runningBuilds := 0
+ for _, predicate := range predicates {
+ if predicate() == v1.BuildPhaseRunning {
+ runningBuilds++
+ }
+ }
+ return runningBuilds
+ }
+}
+
func HasPlatform(ns string) func() bool {
return func() bool {
lst := v1.NewIntegrationPlatformList()