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

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

commit a89e54c467c4ed4761b0ec5705afe29527ee9548
Author: nferraro <ni.ferr...@gmail.com>
AuthorDate: Fri Sep 20 09:27:44 2019 +0200

    Adding test to verify kamel inside image
---
 e2e/{test_staging_hooks.go => tekton_test.go} | 32 ++++++++-----
 e2e/test_staging_hooks.go                     | 18 +++++---
 e2e/test_support.go                           | 66 +++++++++++++++++++++++----
 3 files changed, 89 insertions(+), 27 deletions(-)

diff --git a/e2e/test_staging_hooks.go b/e2e/tekton_test.go
similarity index 58%
copy from e2e/test_staging_hooks.go
copy to e2e/tekton_test.go
index f85998b..dd4d7dc 100644
--- a/e2e/test_staging_hooks.go
+++ b/e2e/tekton_test.go
@@ -1,4 +1,4 @@
-// +build integration knative
+// +build integration
 
 // To enable compilation of this file in Goland, go to "Settings -> Go -> 
Vendoring & Build Tags -> Custom Tags" and add "integration"
 
@@ -21,15 +21,25 @@ limitations under the License.
 
 package e2e
 
-func init() {
-       // this hook can be used to test a released version of the operator, 
e.g. the staging version during a voting period
-       // Uncomment the following lines and change references to enable the 
hook
-       kamelHooks = append(kamelHooks, func(cmd []string) []string {
-               //if len(cmd) > 0 && cmd[0] == "install" {
-               //      cmd = append(cmd, 
"--operator-image=docker.io/camelk/camel-k:1.0.0-M1")
-               //      cmd = append(cmd, 
"--maven-repository=https://repository.apache.org/content/repositories/orgapachecamel-1145";)
-               //}
-               return cmd
-       })
+import (
+       "testing"
+
+       . "github.com/onsi/gomega"
+)
+
+// TestTektonLikeBehavior verifies that the kamel binary can be invoked from 
within the Camel K image.
+// This feature is used in Tekton pipelines.
+func TestTektonLikeBehavior(t *testing.T) {
+       withNewTestNamespace(func(ns string) {
+               RegisterTestingT(t)
 
+               Expect(createOperatorServiceAccount(ns)).Should(BeNil())
+               Expect(createOperatorRole(ns)).Should(BeNil())
+               Expect(createOperatorRoleBinding(ns)).Should(BeNil())
+
+               Eventually(operatorPod(ns)).Should(BeNil())
+               Expect(createKamelPod(ns, "tekton-task", 
"install")).Should(BeNil())
+
+               Eventually(operatorPod(ns)).ShouldNot(BeNil())
+       })
 }
diff --git a/e2e/test_staging_hooks.go b/e2e/test_staging_hooks.go
index f85998b..a441084 100644
--- a/e2e/test_staging_hooks.go
+++ b/e2e/test_staging_hooks.go
@@ -24,12 +24,16 @@ package e2e
 func init() {
        // this hook can be used to test a released version of the operator, 
e.g. the staging version during a voting period
        // Uncomment the following lines and change references to enable the 
hook
-       kamelHooks = append(kamelHooks, func(cmd []string) []string {
-               //if len(cmd) > 0 && cmd[0] == "install" {
-               //      cmd = append(cmd, 
"--operator-image=docker.io/camelk/camel-k:1.0.0-M1")
-               //      cmd = append(cmd, 
"--maven-repository=https://repository.apache.org/content/repositories/orgapachecamel-1145";)
-               //}
-               return cmd
-       })
+
+       //testImageName = "docker.io/camelk/camel-k"
+       //testImageVersion = "1.0.0-M2-SNAPSHOT"
+
+       //kamelHooks = append(kamelHooks, func(cmd []string) []string {
+       //      if len(cmd) > 0 && cmd[0] == "install" {
+       //              cmd = append(cmd, 
"--operator-image=docker.io/camelk/camel-k:1.0.0-M2-SNAPSHOT")
+       //              cmd = append(cmd, 
"--maven-repository=https://repository.apache.org/content/repositories/orgapachecamel-1145";)
+       //      }
+       //      return cmd
+       //})
 
 }
diff --git a/e2e/test_support.go b/e2e/test_support.go
index c5db056..38e92bf 100644
--- a/e2e/test_support.go
+++ b/e2e/test_support.go
@@ -25,16 +25,17 @@ import (
        "context"
        "errors"
        "fmt"
+       "io/ioutil"
        "os"
        "os/exec"
        "strings"
        "time"
 
-       "io/ioutil"
-
        "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
        "github.com/apache/camel-k/pkg/client"
        "github.com/apache/camel-k/pkg/cmd"
+       "github.com/apache/camel-k/pkg/install"
+       "github.com/apache/camel-k/pkg/util/defaults"
        "github.com/apache/camel-k/pkg/util/log"
        "github.com/apache/camel-k/pkg/util/openshift"
        "github.com/google/uuid"
@@ -55,7 +56,10 @@ var testContext context.Context
 var testClient client.Client
 
 // kamelHooks contains hooks useful to add option to kamel commands at runtime
-var kamelHooks []func([]string)[]string
+var kamelHooks []func([]string) []string
+
+var testImageName = defaults.ImageName
+var testImageVersion = defaults.Version
 
 func init() {
        var err error
@@ -442,25 +446,70 @@ func scaleOperator(ns string, replicas int32) func() 
error {
 }
 
 /*
+       Tekton
+*/
+
+func createOperatorServiceAccount(ns string) error {
+       return install.Resource(testContext, testClient, ns, 
install.IdentityResourceCustomizer, "operator-service-account.yaml")
+}
+
+func createOperatorRole(ns string) error {
+       return install.Resource(testContext, testClient, ns, 
install.IdentityResourceCustomizer, "operator-role-openshift.yaml")
+}
+
+func createOperatorRoleBinding(ns string) error {
+       return install.Resource(testContext, testClient, ns, 
install.IdentityResourceCustomizer, "operator-role-binding.yaml")
+}
+
+func createKamelPod(ns string, name string, command ...string) error {
+       args := command
+       for _, hook := range kamelHooks {
+               args = hook(args)
+       }
+       pod := v1.Pod{
+               TypeMeta: metav1.TypeMeta{
+                       Kind:       "Pod",
+                       APIVersion: v1.SchemeGroupVersion.String(),
+               },
+               ObjectMeta: metav1.ObjectMeta{
+                       Namespace: ns,
+                       Name:      name,
+               },
+               Spec: v1.PodSpec{
+                       ServiceAccountName: "camel-k-operator",
+                       RestartPolicy:      v1.RestartPolicyNever,
+                       Containers: []v1.Container{
+                               {
+                                       Name:    "kamel-runner",
+                                       Image:   testImageName + ":" + 
testImageVersion,
+                                       Command: append([]string{"kamel"}, 
args...),
+                               },
+                       },
+               },
+       }
+       return testClient.Create(testContext, &pod)
+}
+
+/*
        Knative
- */
+*/
 
 func createKnativeChannel(ns string, name string) func() error {
        return func() error {
                channel := eventing.Channel{
                        TypeMeta: metav1.TypeMeta{
-                               Kind: "Channel",
+                               Kind:       "Channel",
                                APIVersion: 
eventing.SchemeGroupVersion.String(),
                        },
                        ObjectMeta: metav1.ObjectMeta{
                                Namespace: ns,
-                               Name: name,
+                               Name:      name,
                        },
                        Spec: eventing.ChannelSpec{
                                Provisioner: &v1.ObjectReference{
                                        APIVersion: 
"eventing.knative.dev/v1alpha1",
-                                       Kind: "ClusterChannelProvisioner",
-                                       Name: "in-memory",
+                                       Kind:       "ClusterChannelProvisioner",
+                                       Name:       "in-memory",
                                },
                        },
                }
@@ -468,7 +517,6 @@ func createKnativeChannel(ns string, name string) func() 
error {
        }
 }
 
-
 /*
        Namespace testing functions
 */

Reply via email to