You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ts...@apache.org on 2022/05/25 13:48:31 UTC

[camel-k] 01/02: test(e2e): add test for 'kamel run --dev' in a warmed-up environment

This is an automated email from the ASF dual-hosted git repository.

tsato pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit a092e8b7f6085683fe1be9d4b1fd6c34401c18dc
Author: Tadayoshi Sato <sa...@gmail.com>
AuthorDate: Wed May 25 13:55:15 2022 +0900

    test(e2e): add test for 'kamel run --dev' in a warmed-up environment
    
    Fix #3211
---
 e2e/common/cli/dev_mode_test.go | 46 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/e2e/common/cli/dev_mode_test.go b/e2e/common/cli/dev_mode_test.go
index db7fd7309..180b1565d 100644
--- a/e2e/common/cli/dev_mode_test.go
+++ b/e2e/common/cli/dev_mode_test.go
@@ -29,9 +29,11 @@ import (
 	"io/ioutil"
 	"os"
 	"testing"
+	"time"
 
 	. "github.com/onsi/gomega"
 	"github.com/stretchr/testify/assert"
+	corev1 "k8s.io/api/core/v1"
 
 	. "github.com/apache/camel-k/e2e/support"
 	"github.com/apache/camel-k/e2e/support/util"
@@ -144,5 +146,49 @@ func TestRunDevMode(t *testing.T) {
 			// When the integration is deleted, then, also the autogenerated configmaps must be cleaned
 			Eventually(AutogeneratedConfigmapsCount(ns), TestTimeoutShort).Should(Equal(0))
 		})
+
+		// This test makes sure that `kamel run --dev` runs in seconds after initial build is
+		// already done for the same integration.
+		t.Run("dev mode rebuild in seconds", func(t *testing.T) {
+			/*
+			 * !!! NOTE !!!
+			 * If you find this test flaky, instead of thinking it as simply unstable, investigate
+			 * why it does not finish in a few seconds and remove the bottlenecks which are lagging
+			 * the integration startup.
+			 */
+			RegisterTestingT(t)
+
+			// First run (warm up)
+			Expect(Kamel("run", "-n", ns, "files/yaml.yaml").Execute()).To(Succeed())
+			Eventually(IntegrationPodPhase(ns, "yaml"), TestTimeoutMedium).Should(Equal(corev1.PodRunning))
+			Eventually(IntegrationLogs(ns, "yaml"), TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
+			Expect(Kamel("delete", "yaml", "-n", ns).Execute()).To(Succeed())
+			Eventually(Integration(ns, "yaml")).Should(BeNil())
+			Eventually(IntegrationPod(ns, "yaml")).Should(BeNil())
+
+			// Second run (rebuild)
+			ctx, cancel := context.WithCancel(TestContext)
+			defer cancel()
+			piper, pipew := io.Pipe()
+			defer pipew.Close()
+			defer piper.Close()
+
+			file := util.MakeTempCopy(t, "files/yaml.yaml")
+
+			kamelRun := KamelWithContext(ctx, "run", "-n", ns, file, "--dev")
+			kamelRun.SetOut(pipew)
+
+			logScanner := util.NewLogScanner(ctx, piper, `integration "yaml" in phase Running`, "Magicstring!")
+
+			args := os.Args
+			defer func() { os.Args = args }()
+			os.Args = []string{"kamel", "run", "-n", ns, file, "--dev"}
+			go kamelRun.Execute()
+
+			// Second run should start up within a few seconds
+			timeout := 10 * time.Second
+			Eventually(logScanner.IsFound(`integration "yaml" in phase Running`), timeout).Should(BeTrue())
+			Eventually(logScanner.IsFound("Magicstring!"), timeout).Should(BeTrue())
+		})
 	})
 }