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 */