diff --git a/controllers/controllers_suite_test.go b/controllers/controllers_suite_test.go index 7acfe4a7ff..b4cf44bf4e 100644 --- a/controllers/controllers_suite_test.go +++ b/controllers/controllers_suite_test.go @@ -116,12 +116,6 @@ func setup() { if err := AddVSphereDeploymentZoneControllerToManager(ctx, testEnv.GetControllerManagerContext(), testEnv.Manager, controllerOpts); err != nil { panic(fmt.Sprintf("unable to setup VSphereDeploymentZone controller: %v", err)) } - if err := AddServiceAccountProviderControllerToManager(ctx, testEnv.GetControllerManagerContext(), testEnv.Manager, tracker, controllerOpts); err != nil { - panic(fmt.Sprintf("unable to setup ServiceAccount controller: %v", err)) - } - if err := AddServiceDiscoveryControllerToManager(ctx, testEnv.GetControllerManagerContext(), testEnv.Manager, tracker, controllerOpts); err != nil { - panic(fmt.Sprintf("unable to setup SvcDiscovery controller: %v", err)) - } go func() { fmt.Println("Starting the manager") diff --git a/controllers/vmware/controllers_suite_test.go b/controllers/vmware/controllers_suite_test.go new file mode 100644 index 0000000000..159e2f977d --- /dev/null +++ b/controllers/vmware/controllers_suite_test.go @@ -0,0 +1,137 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package vmware + +import ( + "fmt" + "os" + "path/filepath" + "testing" + + . "github.com/onsi/ginkgo/v2" + "github.com/onsi/ginkgo/v2/types" + . "github.com/onsi/gomega" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/client-go/kubernetes/scheme" + clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" + "sigs.k8s.io/cluster-api/controllers/remote" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/controller" + + infrav1 "sigs.k8s.io/cluster-api-provider-vsphere/apis/v1beta1" + vmwarev1 "sigs.k8s.io/cluster-api-provider-vsphere/apis/vmware/v1beta1" + "sigs.k8s.io/cluster-api-provider-vsphere/internal/test/helpers" + "sigs.k8s.io/cluster-api-provider-vsphere/pkg/manager" +) + +func TestControllers(t *testing.T) { + RegisterFailHandler(Fail) + + reporterConfig := types.NewDefaultReporterConfig() + if artifactFolder, exists := os.LookupEnv("ARTIFACTS"); exists { + reporterConfig.JUnitReport = filepath.Join(artifactFolder, "junit.ginkgo.controllers_vmware.xml") + } + RunSpecs(t, "VMware Controller Suite", reporterConfig) +} + +var ( + testEnv *helpers.TestEnvironment + tracker *remote.ClusterCacheTracker + ctx = ctrl.SetupSignalHandler() +) + +func TestMain(m *testing.M) { + setup() + code := m.Run() + teardown() + os.Exit(code) +} + +func setup() { + utilruntime.Must(infrav1.AddToScheme(scheme.Scheme)) + utilruntime.Must(clusterv1.AddToScheme(scheme.Scheme)) + utilruntime.Must(vmwarev1.AddToScheme(scheme.Scheme)) + + testEnv = helpers.NewTestEnvironment(ctx) + + secretCachingClient, err := client.New(testEnv.Manager.GetConfig(), client.Options{ + HTTPClient: testEnv.Manager.GetHTTPClient(), + Cache: &client.CacheOptions{ + Reader: testEnv.Manager.GetCache(), + }, + }) + if err != nil { + panic("unable to create secret caching client") + } + + tracker, err = remote.NewClusterCacheTracker( + testEnv.Manager, + remote.ClusterCacheTrackerOptions{ + SecretCachingClient: secretCachingClient, + ControllerName: "testenv-manager", + }, + ) + if err != nil { + panic(fmt.Sprintf("unable to setup ClusterCacheTracker: %v", err)) + } + + controllerOpts := controller.Options{MaxConcurrentReconciles: 10} + + if err := (&remote.ClusterCacheReconciler{ + Client: testEnv.Manager.GetClient(), + Tracker: tracker, + }).SetupWithManager(ctx, testEnv.Manager, controllerOpts); err != nil { + panic(fmt.Sprintf("unable to create ClusterCacheReconciler controller: %v", err)) + } + + if err := AddServiceAccountProviderControllerToManager(ctx, testEnv.GetControllerManagerContext(), testEnv.Manager, tracker, controllerOpts); err != nil { + panic(fmt.Sprintf("unable to setup ServiceAccount controller: %v", err)) + } + if err := AddServiceDiscoveryControllerToManager(ctx, testEnv.GetControllerManagerContext(), testEnv.Manager, tracker, controllerOpts); err != nil { + panic(fmt.Sprintf("unable to setup SvcDiscovery controller: %v", err)) + } + + go func() { + fmt.Println("Starting the manager") + if err := testEnv.StartManager(ctx); err != nil { + panic(fmt.Sprintf("failed to start the envtest manager: %v", err)) + } + }() + <-testEnv.Manager.Elected() + + // wait for webhook port to be open prior to running tests + testEnv.WaitForWebhooks() + + // create manager pod namespace + ns := &corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: manager.DefaultPodNamespace, + }, + } + if err := testEnv.Create(ctx, ns); err != nil { + panic("unable to create controller namespace") + } +} + +func teardown() { + if err := testEnv.Stop(); err != nil { + panic(fmt.Sprintf("Failed to stop envtest: %v", err)) + } +} diff --git a/controllers/serviceaccount_controller.go b/controllers/vmware/serviceaccount_controller.go similarity index 99% rename from controllers/serviceaccount_controller.go rename to controllers/vmware/serviceaccount_controller.go index 1a3bb7c677..71f2b68363 100644 --- a/controllers/serviceaccount_controller.go +++ b/controllers/vmware/serviceaccount_controller.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package controllers +package vmware import ( "context" @@ -61,7 +61,6 @@ import ( const ( kindProviderServiceAccount = "ProviderServiceAccount" - systemServiceAccountPrefix = "system.serviceaccount" ) // AddServiceAccountProviderControllerToManager adds this controller to the provided manager. diff --git a/controllers/serviceaccount_controller_intg_test.go b/controllers/vmware/serviceaccount_controller_intg_test.go similarity index 99% rename from controllers/serviceaccount_controller_intg_test.go rename to controllers/vmware/serviceaccount_controller_intg_test.go index 93e82005b9..2530d23e4d 100644 --- a/controllers/serviceaccount_controller_intg_test.go +++ b/controllers/vmware/serviceaccount_controller_intg_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package controllers +package vmware import ( "fmt" diff --git a/controllers/serviceaccount_controller_suite_test.go b/controllers/vmware/serviceaccount_controller_suite_test.go similarity index 99% rename from controllers/serviceaccount_controller_suite_test.go rename to controllers/vmware/serviceaccount_controller_suite_test.go index 24a0720e81..072e3b8d28 100644 --- a/controllers/serviceaccount_controller_suite_test.go +++ b/controllers/vmware/serviceaccount_controller_suite_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package controllers +package vmware import ( "context" diff --git a/controllers/serviceaccount_controller_unit_test.go b/controllers/vmware/serviceaccount_controller_unit_test.go similarity index 99% rename from controllers/serviceaccount_controller_unit_test.go rename to controllers/vmware/serviceaccount_controller_unit_test.go index 4fd11e1d1d..531bc838c6 100644 --- a/controllers/serviceaccount_controller_unit_test.go +++ b/controllers/vmware/serviceaccount_controller_unit_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package controllers +package vmware import ( "context" diff --git a/controllers/servicediscovery_controller.go b/controllers/vmware/servicediscovery_controller.go similarity index 98% rename from controllers/servicediscovery_controller.go rename to controllers/vmware/servicediscovery_controller.go index db9c8f3ea0..df3c8814a1 100644 --- a/controllers/servicediscovery_controller.go +++ b/controllers/vmware/servicediscovery_controller.go @@ -14,13 +14,14 @@ See the License for the specific language governing permissions and limitations under the License. */ -package controllers +package vmware import ( "context" "fmt" "net" "net/url" + "reflect" "time" "github.com/pkg/errors" @@ -485,3 +486,8 @@ func allClustersRequests(ctx context.Context, c client.Client) []reconcile.Reque } return requests } + +func clusterToVMwareInfrastructureMapFunc(ctx context.Context, controllerCtx *capvcontext.ControllerManagerContext) handler.MapFunc { + gvk := vmwarev1.GroupVersion.WithKind(reflect.TypeOf(&vmwarev1.VSphereCluster{}).Elem().Name()) + return clusterutilv1.ClusterToInfrastructureMapFunc(ctx, gvk, controllerCtx.Client, &vmwarev1.VSphereCluster{}) +} diff --git a/controllers/servicediscovery_controller_intg_test.go b/controllers/vmware/servicediscovery_controller_intg_test.go similarity index 99% rename from controllers/servicediscovery_controller_intg_test.go rename to controllers/vmware/servicediscovery_controller_intg_test.go index edbb5c835d..1a69ada346 100644 --- a/controllers/servicediscovery_controller_intg_test.go +++ b/controllers/vmware/servicediscovery_controller_intg_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package controllers +package vmware import ( "fmt" diff --git a/controllers/servicediscovery_controller_suite_test.go b/controllers/vmware/servicediscovery_controller_suite_test.go similarity index 99% rename from controllers/servicediscovery_controller_suite_test.go rename to controllers/vmware/servicediscovery_controller_suite_test.go index cf4322b161..2c8da018cb 100644 --- a/controllers/servicediscovery_controller_suite_test.go +++ b/controllers/vmware/servicediscovery_controller_suite_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package controllers +package vmware import ( "context" diff --git a/controllers/servicediscovery_controller_unit_test.go b/controllers/vmware/servicediscovery_controller_unit_test.go similarity index 99% rename from controllers/servicediscovery_controller_unit_test.go rename to controllers/vmware/servicediscovery_controller_unit_test.go index 033473ff01..c2f28ac62f 100644 --- a/controllers/servicediscovery_controller_unit_test.go +++ b/controllers/vmware/servicediscovery_controller_unit_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package controllers +package vmware import ( . "github.com/onsi/ginkgo/v2" diff --git a/controllers/vmware/test/controllers_suite_test.go b/controllers/vmware/test/controllers_suite_test.go index 35ca47ee01..e018d2d0e6 100644 --- a/controllers/vmware/test/controllers_suite_test.go +++ b/controllers/vmware/test/controllers_suite_test.go @@ -64,7 +64,7 @@ func TestAPIs(t *testing.T) { if artifactFolder, exists := os.LookupEnv("ARTIFACTS"); exists { reporterConfig.JUnitReport = filepath.Join(artifactFolder, "junit.ginkgo.controllers_vmware_test.xml") } - RunSpecs(t, "VMware Controller Suite", reporterConfig) + RunSpecs(t, "VMware Controller Suite test", reporterConfig) } func getTestEnv() (*envtest.Environment, *rest.Config) { diff --git a/controllers/vmware/vspherecluster_reconciler_test.go b/controllers/vmware/vspherecluster_reconciler_test.go index 31a2d8ce1a..968a5acfd0 100644 --- a/controllers/vmware/vspherecluster_reconciler_test.go +++ b/controllers/vmware/vspherecluster_reconciler_test.go @@ -18,13 +18,10 @@ package vmware import ( "context" - "os" - "path/filepath" "reflect" "testing" . "github.com/onsi/ginkgo/v2" - "github.com/onsi/ginkgo/v2/types" . "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -34,7 +31,6 @@ import ( "k8s.io/utils/ptr" clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" "sigs.k8s.io/cluster-api/util/conditions" - ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" @@ -48,16 +44,6 @@ import ( "sigs.k8s.io/cluster-api-provider-vsphere/pkg/util" ) -func TestVSphereClusterReconciler(t *testing.T) { - RegisterFailHandler(Fail) - - reporterConfig := types.NewDefaultReporterConfig() - if artifactFolder, exists := os.LookupEnv("ARTIFACTS"); exists { - reporterConfig.JUnitReport = filepath.Join(artifactFolder, "junit.ginkgo.controllers_vmware.xml") - } - RunSpecs(t, "VSphereCluster Controller Suite", reporterConfig) -} - var _ = Describe("Cluster Controller Tests", func() { const ( clusterName = "test-cluster" @@ -72,7 +58,6 @@ var _ = Describe("Cluster Controller Tests", func() { cluster *clusterv1.Cluster vsphereCluster *vmwarev1.VSphereCluster vsphereMachine *vmwarev1.VSphereMachine - ctx = ctrl.SetupSignalHandler() clusterCtx *vmware.ClusterContext controllerManagerContext *capvcontext.ControllerManagerContext reconciler *ClusterReconciler diff --git a/controllers/vspherecluster_controller.go b/controllers/vspherecluster_controller.go index 095ec8a9d0..d2596f47a4 100644 --- a/controllers/vspherecluster_controller.go +++ b/controllers/vspherecluster_controller.go @@ -172,8 +172,3 @@ func clusterToInfrastructureMapFunc(ctx context.Context, controllerCtx *capvcont gvk := infrav1.GroupVersion.WithKind(reflect.TypeOf(&infrav1.VSphereCluster{}).Elem().Name()) return clusterutilv1.ClusterToInfrastructureMapFunc(ctx, gvk, controllerCtx.Client, &infrav1.VSphereCluster{}) } - -func clusterToVMwareInfrastructureMapFunc(ctx context.Context, controllerCtx *capvcontext.ControllerManagerContext) handler.MapFunc { - gvk := vmwarev1.GroupVersion.WithKind(reflect.TypeOf(&vmwarev1.VSphereCluster{}).Elem().Name()) - return clusterutilv1.ClusterToInfrastructureMapFunc(ctx, gvk, controllerCtx.Client, &vmwarev1.VSphereCluster{}) -} diff --git a/main.go b/main.go index 4da1a7ded6..3685bcf30b 100644 --- a/main.go +++ b/main.go @@ -408,11 +408,11 @@ func setupSupervisorControllers(ctx context.Context, controllerCtx *capvcontext. return err } - if err := controllers.AddServiceAccountProviderControllerToManager(ctx, controllerCtx, mgr, tracker, concurrency(providerServiceAccountConcurrency)); err != nil { + if err := vmware.AddServiceAccountProviderControllerToManager(ctx, controllerCtx, mgr, tracker, concurrency(providerServiceAccountConcurrency)); err != nil { return err } - return controllers.AddServiceDiscoveryControllerToManager(ctx, controllerCtx, mgr, tracker, concurrency(serviceDiscoveryConcurrency)) + return vmware.AddServiceDiscoveryControllerToManager(ctx, controllerCtx, mgr, tracker, concurrency(serviceDiscoveryConcurrency)) } func setupChecks(mgr ctrlmgr.Manager) {