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

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

commit 5acde800984d4717f759b7d9b84a5adbc506743c
Author: Antonin Stefanutti <[email protected]>
AuthorDate: Mon Mar 15 11:55:39 2021 +0100

    test: Add toleration trait e2e tests
---
 e2e/common/traits/toleration_test.go | 128 ++++++++++++++++++++++++-----------
 e2e/support/test_support.go          |  19 ++++++
 2 files changed, 107 insertions(+), 40 deletions(-)

diff --git a/e2e/common/traits/toleration_test.go 
b/e2e/common/traits/toleration_test.go
index b0469d4..50a5386 100644
--- a/e2e/common/traits/toleration_test.go
+++ b/e2e/common/traits/toleration_test.go
@@ -25,8 +25,10 @@ import (
        "testing"
 
        . "github.com/onsi/gomega"
+       . "github.com/onsi/gomega/gstruct"
 
        v1 "k8s.io/api/core/v1"
+       "k8s.io/utils/pointer"
 
        . "github.com/apache/camel-k/e2e/support"
        camelv1 "github.com/apache/camel-k/pkg/apis/camel/v1"
@@ -35,46 +37,92 @@ import (
 func TestTolerationTrait(t *testing.T) {
        WithNewTestNamespace(t, func(ns string) {
                Expect(Kamel("install", "-n", ns).Execute()).To(Succeed())
-               var wait int64 = 300
-
-               InvokeUserTestCode(t, ns, func(ns string) {
-                       t.Run("Run Java with node toleration operation exists", 
func(t *testing.T) {
-                               Expect(Kamel("run", "-n", ns, "files/Java.java",
-                                       "--name", "java1",
-                                       "-t", "toleration.enabled=true",
-                                       "-t", 
"toleration.taints=camel.apache.org/master:NoExecute:300").Execute()).To(Succeed())
-                               Eventually(IntegrationPodPhase(ns, "java1"), 
TestTimeoutLong).Should(Equal(v1.PodRunning))
-                               Eventually(IntegrationCondition(ns, "java1", 
camelv1.IntegrationConditionReady), 
TestTimeoutShort).Should(Equal(v1.ConditionTrue))
-                               Eventually(IntegrationLogs(ns, "java1"), 
TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
-
-                               pod := IntegrationPod(ns, "java1")()
-                               Expect(pod.Spec.Tolerations).NotTo(BeNil())
-
-                               
Expect(pod.Spec.Tolerations).To(ContainElement(v1.Toleration{
-                                       "camel.apache.org/master", 
v1.TolerationOpExists, "", v1.TaintEffectNoExecute, &wait,
-                               }))
-
-                               Expect(Kamel("delete", "--all", "-n", 
ns).Execute()).To(Succeed())
-                       })
-
-                       t.Run("Run Java with node toleration operation equals", 
func(t *testing.T) {
-                               Expect(Kamel("run", "-n", ns, "files/Java.java",
-                                       "--name", "java2",
-                                       "-t", "toleration.enabled=true",
-                                       "-t", 
"toleration.taints=camel.apache.org/master=test:NoExecute:300").Execute()).To(Succeed())
-                               Eventually(IntegrationPodPhase(ns, "java2"), 
TestTimeoutLong).Should(Equal(v1.PodRunning))
-                               Eventually(IntegrationCondition(ns, "java2", 
camelv1.IntegrationConditionReady), 
TestTimeoutShort).Should(Equal(v1.ConditionTrue))
-                               Eventually(IntegrationLogs(ns, "java2"), 
TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
-
-                               pod := IntegrationPod(ns, "java2")()
-                               Expect(pod.Spec.Tolerations).NotTo(BeNil())
-
-                               
Expect(pod.Spec.Tolerations).To(ContainElement(v1.Toleration{
-                                       "camel.apache.org/master", 
v1.TolerationOpEqual, "test", v1.TaintEffectNoExecute, &wait,
-                               }))
-
-                               Expect(Kamel("delete", "--all", "-n", 
ns).Execute()).To(Succeed())
-                       })
+
+               t.Run("Run Java with node toleration operation exists", func(t 
*testing.T) {
+                       name := "java1"
+                       Expect(Kamel("run", "-n", ns, "files/Java.java",
+                               "--name", name,
+                               "-t", "toleration.enabled=true",
+                               "-t", 
"toleration.taints=camel.apache.org/master:NoExecute:300",
+                       ).Execute()).To(Succeed())
+                       Eventually(IntegrationPodPhase(ns, name), 
TestTimeoutLong).Should(Equal(v1.PodRunning))
+                       Eventually(IntegrationCondition(ns, name, 
camelv1.IntegrationConditionReady), 
TestTimeoutShort).Should(Equal(v1.ConditionTrue))
+                       Eventually(IntegrationLogs(ns, name), 
TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
+
+                       pod := IntegrationPod(ns, name)()
+                       Expect(pod.Spec.Tolerations).NotTo(BeNil())
+
+                       
Expect(pod.Spec.Tolerations).To(ContainElement(v1.Toleration{
+                               Key:               "camel.apache.org/master",
+                               Operator:          v1.TolerationOpExists,
+                               Effect:            v1.TaintEffectNoExecute,
+                               TolerationSeconds: pointer.Int64Ptr(300),
+                       }))
+               })
+
+               t.Run("Run Java with node toleration operation equals", func(t 
*testing.T) {
+                       name := "java2"
+                       Expect(Kamel("run", "-n", ns, "files/Java.java",
+                               "--name", name,
+                               "-t", "toleration.enabled=true",
+                               "-t", 
"toleration.taints=camel.apache.org/master=test:NoExecute:300",
+                       ).Execute()).To(Succeed())
+                       Eventually(IntegrationPodPhase(ns, name), 
TestTimeoutLong).Should(Equal(v1.PodRunning))
+                       Eventually(IntegrationCondition(ns, name, 
camelv1.IntegrationConditionReady), 
TestTimeoutShort).Should(Equal(v1.ConditionTrue))
+                       Eventually(IntegrationLogs(ns, name), 
TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
+
+                       pod := IntegrationPod(ns, name)()
+                       Expect(pod.Spec.Tolerations).NotTo(BeNil())
+
+                       
Expect(pod.Spec.Tolerations).To(ContainElement(v1.Toleration{
+                               Key:      "camel.apache.org/master",
+                               Operator: v1.TolerationOpEqual,
+                               Value:    "test", Effect: 
v1.TaintEffectNoExecute,
+                               TolerationSeconds: pointer.Int64Ptr(300),
+                       }))
                })
+
+               t.Run("Run Java with master node toleration", func(t 
*testing.T) {
+                       name := "java3"
+                       Expect(Kamel("install", "-n", 
ns).Execute()).To(Succeed())
+                       Expect(Kamel("run", "-n", ns, "files/Java.java",
+                               "--name", name,
+                               // Use the affinity trait to force the 
scheduling of the Integration pod onto a master node
+                               "-t", "affinity.enabled=true",
+                               "-t", 
"affinity.node-affinity-labels=node-role.kubernetes.io/master",
+                               // And tolerate the corresponding taint
+                               "-t", "toleration.enabled=true",
+                               "-t", 
"toleration.taints=node-role.kubernetes.io/master:NoSchedule",
+                       ).Execute()).To(Succeed())
+
+                       Eventually(IntegrationPodPhase(ns, name), 
TestTimeoutMedium).Should(Equal(v1.PodRunning))
+                       Eventually(IntegrationCondition(ns, name, 
camelv1.IntegrationConditionReady), 
TestTimeoutShort).Should(Equal(v1.ConditionTrue))
+                       Eventually(IntegrationLogs(ns, name), 
TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
+
+                       pod := IntegrationPod(ns, name)()
+                       Expect(pod).NotTo(BeNil())
+
+                       // Check the Integration pod contains the toleration
+                       
Expect(pod.Spec.Tolerations).To(ContainElement(v1.Toleration{
+                               Key:      "node-role.kubernetes.io/master",
+                               Operator: v1.TolerationOpExists,
+                               Effect:   v1.TaintEffectNoSchedule,
+                       }))
+
+                       // Check the Integration pod is running on a master node
+                       node := Node(pod.Spec.NodeName)()
+                       Expect(node).NotTo(BeNil())
+                       Expect(node).To(PointTo(MatchFields(IgnoreExtras, 
Fields{
+                               "Spec": MatchFields(IgnoreExtras, Fields{
+                                       "Taints": ContainElement(v1.Taint{
+                                               Key:    
"node-role.kubernetes.io/master",
+                                               Effect: 
v1.TaintEffectNoSchedule,
+                                       }),
+                               }),
+                       })))
+               })
+
+               // Clean up
+               Expect(Kamel("delete", "--all", "-n", 
ns).Execute()).To(Succeed())
        })
 }
diff --git a/e2e/support/test_support.go b/e2e/support/test_support.go
index 4431d0b..dd7365c 100644
--- a/e2e/support/test_support.go
+++ b/e2e/support/test_support.go
@@ -382,6 +382,25 @@ func Lease(ns string, name string) func() 
*coordination.Lease {
        }
 }
 
+func Node(name string) func() *corev1.Node {
+       return func() *corev1.Node {
+               node := &corev1.Node{
+                       TypeMeta: metav1.TypeMeta{
+                               Kind:       "Node",
+                               APIVersion: corev1.SchemeGroupVersion.String(),
+                       },
+                       ObjectMeta: metav1.ObjectMeta{
+                               Name: name,
+                       },
+               }
+               err := TestClient().Get(TestContext, 
ctrl.ObjectKeyFromObject(node), node)
+               if err != nil {
+                       panic(err)
+               }
+               return node
+       }
+}
+
 func Service(ns string, name string) func() *corev1.Service {
        return func() *corev1.Service {
                svc := corev1.Service{}

Reply via email to