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

[camel-k] 02/24: feat(e2e): adding generated configmap checks

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

commit fd6e0cc3cbd4fdaf5a8e35e3ac78dd06239c42c8
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Thu Nov 25 13:36:44 2021 +0100

    feat(e2e): adding generated configmap checks
    
    Ref #2320
---
 e2e/common/cli/dev_mode_test.go  | 45 ++++++++++++++++++++++++++++++++++++++++
 e2e/common/config/config_test.go | 23 ++++++++++++++++++++
 e2e/support/test_support.go      | 20 ++++++++++++++++++
 pkg/cmd/run_help.go              |  2 +-
 pkg/util/kubernetes/factory.go   |  2 +-
 5 files changed, 90 insertions(+), 2 deletions(-)

diff --git a/e2e/common/cli/dev_mode_test.go b/e2e/common/cli/dev_mode_test.go
index 480204e..251d838 100644
--- a/e2e/common/cli/dev_mode_test.go
+++ b/e2e/common/cli/dev_mode_test.go
@@ -24,11 +24,14 @@ package common
 
 import (
 	"context"
+	"fmt"
 	"io"
+	"io/ioutil"
 	"os"
 	"testing"
 
 	. "github.com/onsi/gomega"
+	"github.com/stretchr/testify/assert"
 
 	. "github.com/apache/camel-k/e2e/support"
 	"github.com/apache/camel-k/e2e/support/util"
@@ -87,5 +90,47 @@ func TestRunDevMode(t *testing.T) {
 
 			Eventually(logScanner.IsFound("Magicstring!"), TestTimeoutMedium).Should(BeTrue())
 		})
+
+		t.Run("Dev mode resource file generated configmap", func(t *testing.T) {
+			var tmpFile *os.File
+			var err error
+			if tmpFile, err = ioutil.TempFile("", "camel-k-"); err != nil {
+				t.Error(err)
+			}
+			assert.Nil(t, tmpFile.Close())
+			assert.Nil(t, ioutil.WriteFile(tmpFile.Name(), []byte("Hello from test!"), 0o644))
+
+			RegisterTestingT(t)
+			ctx, cancel := context.WithCancel(TestContext)
+			defer cancel()
+			piper, pipew := io.Pipe()
+			defer pipew.Close()
+			defer piper.Close()
+
+			file := util.MakeTempCopy(t, "../config/files/resource-file-location-route.groovy")
+
+			kamelRun := KamelWithContext(ctx, "run", "-n", ns, file, "--dev", "--resource", fmt.Sprintf("file:%s@/tmp/file.txt", tmpFile.Name()))
+			kamelRun.SetOut(pipew)
+
+			logScanner := util.NewLogScanner(ctx, piper, `integration "resource-file-location-route" in phase Running`,
+				"Hello from test!", "Goodbye from test!")
+
+			args := os.Args
+			defer func() { os.Args = args }()
+			os.Args = []string{"kamel", "run", "-n", ns, file, "--dev", "--resource", fmt.Sprintf("file:%s@/tmp/file.txt", tmpFile.Name())}
+			go kamelRun.Execute()
+
+			Eventually(logScanner.IsFound(`integration "resource-file-location-route" in phase Running`), TestTimeoutMedium).Should(BeTrue())
+			Eventually(logScanner.IsFound("Hello from test!"), TestTimeoutMedium).Should(BeTrue())
+			Expect(logScanner.IsFound("Goodbye from test!")()).To(BeFalse())
+
+			// cool, now let's change the file to confirm the sync take place
+			assert.Nil(t, ioutil.WriteFile(tmpFile.Name(), []byte("Goodbye from test!"), 0o644))
+			Eventually(logScanner.IsFound("Goodbye from test!"), TestTimeoutMedium).Should(BeTrue())
+
+			Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed())
+			// When the integration is deleted, then, also the autogenerated configmaps must be cleaned
+			Eventually(AutogeneratedConfigmapsCount(ns), TestTimeoutShort).Should(Equal(0))
+		})
 	})
 }
diff --git a/e2e/common/config/config_test.go b/e2e/common/config/config_test.go
index d9b16f9..e5697a1 100644
--- a/e2e/common/config/config_test.go
+++ b/e2e/common/config/config_test.go
@@ -23,7 +23,9 @@ limitations under the License.
 package resources
 
 import (
+	"fmt"
 	"io/ioutil"
+	"os"
 	"testing"
 
 	. "github.com/onsi/gomega"
@@ -242,5 +244,26 @@ func TestRunConfigExamples(t *testing.T) {
 			Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed())
 		})
 
+		// Resource File: generated configmap must be deleted when Integration is deleted
+
+		t.Run("Plain text sync resource file generated configmap", func(t *testing.T) {
+			var tmpFile *os.File
+			var err error
+			if tmpFile, err = ioutil.TempFile("", "camel-k-"); err != nil {
+				t.Error(err)
+			}
+			assert.Nil(t, tmpFile.Close())
+			assert.Nil(t, ioutil.WriteFile(tmpFile.Name(), []byte("Hello from test!"), 0o644))
+
+			Expect(Kamel("run", "-n", ns, "./files/resource-file-location-route.groovy", "--resource", fmt.Sprintf("file:%s@/tmp/file.txt", tmpFile.Name())).Execute()).To(Succeed())
+			Eventually(IntegrationPodPhase(ns, "resource-file-location-route"), TestTimeoutMedium).Should(Equal(corev1.PodRunning))
+			Eventually(IntegrationConditionStatus(ns, "resource-file-location-route", v1.IntegrationConditionReady), TestTimeoutMedium).Should(Equal(corev1.ConditionTrue))
+			Eventually(IntegrationLogs(ns, "resource-file-location-route"), TestTimeoutMedium).Should(ContainSubstring("Hello from test!"))
+
+			Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed())
+			// When the integration is deleted, then, also the autogenerated configmaps must be cleaned
+			Eventually(AutogeneratedConfigmapsCount(ns), TestTimeoutShort).Should(Equal(0))
+		})
+
 	})
 }
diff --git a/e2e/support/test_support.go b/e2e/support/test_support.go
index 8d3ab96..8d75eb6 100644
--- a/e2e/support/test_support.go
+++ b/e2e/support/test_support.go
@@ -918,6 +918,26 @@ func Configmap(ns string, name string) func() *corev1.ConfigMap {
 	}
 }
 
+func AutogeneratedConfigmapsCount(ns string) func() int {
+	return func() int {
+		lst := corev1.ConfigMapList{
+			TypeMeta: metav1.TypeMeta{
+				Kind:       "ConfigMap",
+				APIVersion: corev1.SchemeGroupVersion.String(),
+			},
+		}
+		err := TestClient().List(TestContext, &lst,
+			ctrl.InNamespace(ns),
+			ctrl.MatchingLabels{
+				"camel.apache.org/autogenerated": "true",
+			})
+		if err != nil {
+			panic(err)
+		}
+		return len(lst.Items)
+	}
+}
+
 func NewPlainTextConfigmap(ns string, name string, data map[string]string) error {
 	cm := corev1.ConfigMap{
 		TypeMeta: metav1.TypeMeta{
diff --git a/pkg/cmd/run_help.go b/pkg/cmd/run_help.go
index 5ccbe14..1970da0 100644
--- a/pkg/cmd/run_help.go
+++ b/pkg/cmd/run_help.go
@@ -249,7 +249,7 @@ func convertFileToConfigmap(ctx context.Context, c client.Client, resourceSpec v
 		config.destinationPath = filepath.Dir(config.DestinationPath())
 	}
 	genCmName := fmt.Sprintf("cm-%s", hashFrom([]byte(resourceSpec.Content), resourceSpec.RawContent))
-	cm := kubernetes.NewConfigmap(namespace, genCmName, config.Name(), config.Key(), resourceSpec.Content, resourceSpec.RawContent)
+	cm := kubernetes.NewConfigmap(namespace, genCmName, filepath.Base(config.Name()), config.Key(), resourceSpec.Content, resourceSpec.RawContent)
 	err := c.Create(ctx, cm)
 	if err != nil {
 		if k8serrors.IsAlreadyExists(err) {
diff --git a/pkg/util/kubernetes/factory.go b/pkg/util/kubernetes/factory.go
index 6fa42ec..6b0e892 100644
--- a/pkg/util/kubernetes/factory.go
+++ b/pkg/util/kubernetes/factory.go
@@ -129,7 +129,7 @@ func NewConfigmap(namespace, cmName, originalFilename string, generatedKey strin
 			Name:      cmName,
 			Namespace: namespace,
 			Labels: map[string]string{
-				"camel.apache.org/original-path": originalFilename,
+				"camel.apache.org/filename": originalFilename,
 			},
 		},
 		Immutable: &immutable,