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,