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.ferr...@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 {