You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2019/01/07 14:25:39 UTC

[camel-k] 02/13: Fix #237: fix integration tests

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 d948a43b57f4d969ba79336c619ede2231647876
Author: nferraro <ni...@gmail.com>
AuthorDate: Fri Jan 4 10:12:42 2019 +0100

    Fix #237: fix integration tests
---
 deploy/resources.go                                | 52 ----------------------
 .../client/cmd/client.go                           | 41 +++++++++--------
 pkg/client/cmd/root.go                             | 23 ++--------
 test/build_manager_integration_test.go             |  7 +--
 test/cluster_integration_test.go                   |  6 +--
 test/log_scrape_integration_test.go                | 14 +++---
 test/testing_env.go                                | 40 +++++++++++------
 7 files changed, 65 insertions(+), 118 deletions(-)

diff --git a/deploy/resources.go b/deploy/resources.go
index 72cd8dd..f256198 100644
--- a/deploy/resources.go
+++ b/deploy/resources.go
@@ -2813,58 +2813,6 @@ spec:
         enabled: "true"
 
 `
-	Resources["role.yaml"] =
-		`
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
-  creationTimestamp: null
-  name: camel-k
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - pods
-  - services
-  - endpoints
-  - persistentvolumeclaims
-  - events
-  - configmaps
-  - secrets
-  verbs:
-  - '*'
-- apiGroups:
-  - ""
-  resources:
-  - namespaces
-  verbs:
-  - get
-- apiGroups:
-  - apps
-  resources:
-  - deployments
-  - daemonsets
-  - replicasets
-  - statefulsets
-  verbs:
-  - '*'
-- apiGroups:
-  - monitoring.coreos.com
-  resources:
-  - servicemonitors
-  verbs:
-  - get
-  - create
-- apiGroups:
-  - camel.apache.org
-  resources:
-  - '*'
-  - integrationcontexts
-  - integrationplatforms
-  verbs:
-  - '*'
-
-`
 	Resources["user-cluster-role.yaml"] =
 		`
 kind: ClusterRole
diff --git a/test/cluster_integration_test.go b/pkg/client/cmd/client.go
similarity index 51%
copy from test/cluster_integration_test.go
copy to pkg/client/cmd/client.go
index 28fc854..12f35e5 100644
--- a/test/cluster_integration_test.go
+++ b/pkg/client/cmd/client.go
@@ -1,7 +1,3 @@
-// +build integration
-
-// To enable compilation of this file in Goland, go to "Settings -> Go -> Vendoring & Build Tags -> Custom Tags" and add "integration"
-
 /*
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
@@ -19,25 +15,28 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
-package test
+package cmd
 
 import (
-	"testing"
-
-	"github.com/apache/camel-k/pkg/install"
-	"github.com/stretchr/testify/assert"
+	"github.com/apache/camel-k/pkg/apis"
+	"sigs.k8s.io/controller-runtime/pkg/client"
+	"sigs.k8s.io/controller-runtime/pkg/client/config"
+	"sigs.k8s.io/controller-runtime/pkg/manager"
 )
 
-func TestInstallation(t *testing.T) {
-	installedCtxCRD, err := install.IsCRDInstalled("IntegrationContext")
-	assert.Nil(t, err)
-	assert.True(t, installedCtxCRD)
-
-	installedCRD, err := install.IsCRDInstalled("Integration")
-	assert.Nil(t, err)
-	assert.True(t, installedCRD)
-
-	installedClusterRole, err := install.IsClusterRoleInstalled()
-	assert.Nil(t, err)
-	assert.True(t, installedClusterRole)
+// NewCmdClient returns a new client that can be used from command line tools
+func NewCmdClient(namespace string) (client.Client, error) {
+	// Get a config to talk to the apiserver
+	cfg, err := config.GetConfig()
+	if err != nil {
+		return nil, err
+	}
+	// Create a new Cmd to provide shared dependencies and start components
+	mgr, err := manager.New(cfg, manager.Options{Namespace: namespace})
+
+	// Setup Scheme for all resources
+	if err := apis.AddToScheme(mgr.GetScheme()); err != nil {
+		return nil, err
+	}
+	return mgr.GetClient(), nil
 }
diff --git a/pkg/client/cmd/root.go b/pkg/client/cmd/root.go
index 0ed2cda..6b2aba9 100644
--- a/pkg/client/cmd/root.go
+++ b/pkg/client/cmd/root.go
@@ -19,14 +19,10 @@ package cmd
 
 import (
 	"context"
-	"github.com/apache/camel-k/pkg/apis"
-	"sigs.k8s.io/controller-runtime/pkg/client"
-	"sigs.k8s.io/controller-runtime/pkg/client/config"
-	"sigs.k8s.io/controller-runtime/pkg/manager"
-
 	"github.com/apache/camel-k/pkg/util/kubernetes"
 	"github.com/pkg/errors"
 	"github.com/spf13/cobra"
+	"sigs.k8s.io/controller-runtime/pkg/client"
 )
 
 const kamelCommandLongDescription = `
@@ -92,18 +88,7 @@ func (command *RootCmdOptions) GetCmdClient() (client.Client, error) {
 	if command._client != nil {
 		return command._client, nil
 	}
-	// Get a config to talk to the apiserver
-	cfg, err := config.GetConfig()
-	if err != nil {
-		return nil, err
-	}
-	// Create a new Cmd to provide shared dependencies and start components
-	mgr, err := manager.New(cfg, manager.Options{Namespace: command.Namespace})
-
-	// Setup Scheme for all resources
-	if err := apis.AddToScheme(mgr.GetScheme()); err != nil {
-		return nil, err
-	}
-	command._client = mgr.GetClient()
-	return command._client, nil
+	var err error
+	command._client, err = NewCmdClient(command.Namespace)
+	return command._client, err
 }
diff --git a/test/build_manager_integration_test.go b/test/build_manager_integration_test.go
index b315ec4..b1f3342 100644
--- a/test/build_manager_integration_test.go
+++ b/test/build_manager_integration_test.go
@@ -22,7 +22,6 @@ limitations under the License.
 package test
 
 import (
-	"context"
 	"testing"
 	"time"
 
@@ -35,9 +34,8 @@ import (
 )
 
 func TestBuildManagerBuild(t *testing.T) {
-	ctx := context.TODO()
 	namespace := getTargetNamespace()
-	b := builder.New(ctx, namespace)
+	b := builder.New(testContext, testClient, namespace)
 
 	r := builder.Request{
 		Meta: v1.ObjectMeta{
@@ -76,9 +74,8 @@ func TestBuildManagerBuild(t *testing.T) {
 }
 
 func TestBuildManagerFailedBuild(t *testing.T) {
-	ctx := context.TODO()
 	namespace := getTargetNamespace()
-	b := builder.New(ctx, namespace)
+	b := builder.New(testContext, testClient, namespace)
 
 	r := builder.Request{
 		Meta: v1.ObjectMeta{
diff --git a/test/cluster_integration_test.go b/test/cluster_integration_test.go
index 28fc854..93897b8 100644
--- a/test/cluster_integration_test.go
+++ b/test/cluster_integration_test.go
@@ -29,15 +29,15 @@ import (
 )
 
 func TestInstallation(t *testing.T) {
-	installedCtxCRD, err := install.IsCRDInstalled("IntegrationContext")
+	installedCtxCRD, err := install.IsCRDInstalled(testContext, testClient, "IntegrationContext")
 	assert.Nil(t, err)
 	assert.True(t, installedCtxCRD)
 
-	installedCRD, err := install.IsCRDInstalled("Integration")
+	installedCRD, err := install.IsCRDInstalled(testContext, testClient, "Integration")
 	assert.Nil(t, err)
 	assert.True(t, installedCRD)
 
-	installedClusterRole, err := install.IsClusterRoleInstalled()
+	installedClusterRole, err := install.IsClusterRoleInstalled(testContext, testClient)
 	assert.Nil(t, err)
 	assert.True(t, installedClusterRole)
 }
diff --git a/test/log_scrape_integration_test.go b/test/log_scrape_integration_test.go
index 744d756..70f074d 100644
--- a/test/log_scrape_integration_test.go
+++ b/test/log_scrape_integration_test.go
@@ -23,24 +23,26 @@ package test
 
 import (
 	"context"
+	"github.com/apache/camel-k/pkg/util/kubernetes"
 	"strings"
 	"testing"
 	"time"
 
 	"github.com/apache/camel-k/pkg/util/log"
-	"sigs.k8s.io/controller-runtime/pkg/client"
 	"github.com/stretchr/testify/assert"
 )
 
 func TestPodLogScrape(t *testing.T) {
 	token := "Hello Camel K!"
 	pod, err := createDummyPod("scraped", "/bin/sh", "-c", "for i in `seq 1 50`; do echo \""+token+"\" && sleep 2; done")
-	defer sdk.Delete(pod)
+	defer testClient.Delete(testContext, pod)
 	assert.Nil(t, err)
 
 	ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(30*time.Second))
 	defer cancel()
-	scraper := log.NewPodScraper(pod.Namespace, pod.Name)
+	kc, err := kubernetes.AsKubernetesClient(testClient)
+	assert.Nil(t, err)
+	scraper := log.NewPodScraper(kc, pod.Namespace, pod.Name)
 	in := scraper.Start(ctx)
 
 	res := make(chan bool)
@@ -70,12 +72,14 @@ func TestSelectorLogScrape(t *testing.T) {
 	token := "Hello Camel K!"
 	replicas := int32(3)
 	deployment, err := createDummyDeployment("scraped-deployment", &replicas, "scrape", "me", "/bin/sh", "-c", "for i in `seq 1 50`; do echo \""+token+"\" && sleep 2; done")
-	defer sdk.Delete(deployment)
+	defer testClient.Delete(testContext, deployment)
 	assert.Nil(t, err)
 
 	ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(30*time.Second))
 	defer cancel()
-	scraper := log.NewSelectorScraper(deployment.Namespace, "scrape=me")
+	kc, err := kubernetes.AsKubernetesClient(testClient)
+	assert.Nil(t, err)
+	scraper := log.NewSelectorScraper(kc, deployment.Namespace, "scrape=me")
 	in := scraper.Start(ctx)
 
 	res := make(chan string)
diff --git a/test/testing_env.go b/test/testing_env.go
index cbbdada..f8df4c5 100644
--- a/test/testing_env.go
+++ b/test/testing_env.go
@@ -22,27 +22,40 @@ limitations under the License.
 package test
 
 import (
+	"context"
+	"github.com/apache/camel-k/pkg/client/cmd"
+	"k8s.io/apimachinery/pkg/labels"
 	"time"
 
 	"github.com/apache/camel-k/pkg/install"
 	"github.com/apache/camel-k/pkg/util/kubernetes"
-	"sigs.k8s.io/controller-runtime/pkg/client"
 	appsv1 "k8s.io/api/apps/v1"
 	"k8s.io/api/core/v1"
 	k8serrors "k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"sigs.k8s.io/controller-runtime/pkg/client"
 )
 
+var testContext context.Context
+var testClient client.Client
+
 func init() {
 	// Initializes the kubernetes client to auto-detect the context
 	kubernetes.InitKubeClient("")
 
-	err := install.SetupClusterwideResources()
+	testContext = context.TODO()
+	var err error
+	testClient, err = cmd.NewCmdClient(getTargetNamespace())
+	if err != nil {
+		panic(err)
+	}
+
+	err = install.SetupClusterwideResources(testContext, testClient)
 	if err != nil {
 		panic(err)
 	}
 
-	err = install.Operator(getTargetNamespace())
+	err = install.Operator(testContext, testClient, getTargetNamespace())
 	if err != nil {
 		panic(err)
 	}
@@ -58,8 +71,7 @@ func getTargetNamespace() string {
 
 func createDummyDeployment(name string, replicas *int32, labelKey string, labelValue string, command ...string) (*appsv1.Deployment, error) {
 	deployment := getDummyDeployment(name, replicas, labelKey, labelValue, command...)
-	gracePeriod := int64(0)
-	err := sdk.Delete(&deployment, sdk.WithDeleteOptions(&metav1.DeleteOptions{GracePeriodSeconds: &gracePeriod}))
+	err := testClient.Delete(testContext, &deployment, client.GracePeriodSeconds(0))
 	if err != nil && !k8serrors.IsNotFound(err) {
 		return nil, err
 	}
@@ -70,10 +82,13 @@ func createDummyDeployment(name string, replicas *int32, labelKey string, labelV
 				APIVersion: v1.SchemeGroupVersion.String(),
 			},
 		}
-
-		err := sdk.List(getTargetNamespace(), &list, sdk.WithListOptions(&metav1.ListOptions{
-			LabelSelector: labelKey + "=" + labelValue,
-		}))
+		options := client.ListOptions{
+			Namespace: getTargetNamespace(),
+			LabelSelector: labels.SelectorFromSet(labels.Set{
+				labelKey: labelValue,
+			}),
+		}
+		err := testClient.List(testContext, &options, &list)
 		if err != nil {
 			return nil, err
 		}
@@ -84,7 +99,7 @@ func createDummyDeployment(name string, replicas *int32, labelKey string, labelV
 			break
 		}
 	}
-	err = sdk.Create(&deployment)
+	err = testClient.Create(testContext, &deployment)
 	return &deployment, err
 }
 
@@ -119,13 +134,12 @@ func getDummyDeployment(name string, replicas *int32, labelKey string, labelValu
 
 func createDummyPod(name string, command ...string) (*v1.Pod, error) {
 	pod := getDummyPod(name, command...)
-	gracePeriod := int64(0)
-	err := sdk.Delete(&pod, sdk.WithDeleteOptions(&metav1.DeleteOptions{GracePeriodSeconds: &gracePeriod}))
+	err := testClient.Delete(testContext, &pod, client.GracePeriodSeconds(0))
 	if err != nil && !k8serrors.IsNotFound(err) {
 		return nil, err
 	}
 	for {
-		err := sdk.Create(&pod)
+		err := testClient.Create(testContext, &pod)
 		if err != nil && k8serrors.IsAlreadyExists(err) {
 			time.Sleep(1 * time.Second)
 		} else if err != nil {