sigs.k8s.io/cluster-api@v1.7.1/internal/controllers/cluster/suite_test.go (about) 1 /* 2 Copyright 2022 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package cluster 18 19 import ( 20 "context" 21 "fmt" 22 "os" 23 "testing" 24 "time" 25 26 . "github.com/onsi/gomega" 27 apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" 28 "k8s.io/apimachinery/pkg/runtime" 29 clientgoscheme "k8s.io/client-go/kubernetes/scheme" 30 ctrl "sigs.k8s.io/controller-runtime" 31 "sigs.k8s.io/controller-runtime/pkg/client" 32 "sigs.k8s.io/controller-runtime/pkg/controller" 33 34 clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" 35 "sigs.k8s.io/cluster-api/api/v1beta1/index" 36 "sigs.k8s.io/cluster-api/controllers/remote" 37 machinecontroller "sigs.k8s.io/cluster-api/internal/controllers/machine" 38 "sigs.k8s.io/cluster-api/internal/test/envtest" 39 ) 40 41 const ( 42 timeout = time.Second * 30 43 ) 44 45 var ( 46 env *envtest.Environment 47 ctx = ctrl.SetupSignalHandler() 48 fakeScheme = runtime.NewScheme() 49 ) 50 51 func init() { 52 _ = clientgoscheme.AddToScheme(fakeScheme) 53 _ = clusterv1.AddToScheme(fakeScheme) 54 _ = apiextensionsv1.AddToScheme(fakeScheme) 55 } 56 57 func TestMain(m *testing.M) { 58 setupIndexes := func(ctx context.Context, mgr ctrl.Manager) { 59 if err := index.AddDefaultIndexes(ctx, mgr); err != nil { 60 panic(fmt.Sprintf("unable to setup index: %v", err)) 61 } 62 } 63 64 setupReconcilers := func(ctx context.Context, mgr ctrl.Manager) { 65 // Set up a ClusterCacheTracker and ClusterCacheReconciler to provide to controllers 66 // requiring a connection to a remote cluster 67 tracker, err := remote.NewClusterCacheTracker( 68 mgr, 69 remote.ClusterCacheTrackerOptions{ 70 Log: &ctrl.Log, 71 Indexes: []remote.Index{remote.NodeProviderIDIndex}, 72 }, 73 ) 74 if err != nil { 75 panic(fmt.Sprintf("unable to create cluster cache tracker: %v", err)) 76 } 77 if err := (&remote.ClusterCacheReconciler{ 78 Client: mgr.GetClient(), 79 Tracker: tracker, 80 }).SetupWithManager(ctx, mgr, controller.Options{MaxConcurrentReconciles: 1}); err != nil { 81 panic(fmt.Sprintf("Failed to start ClusterCacheReconciler: %v", err)) 82 } 83 84 unstructuredCachingClient, err := client.New(mgr.GetConfig(), client.Options{ 85 HTTPClient: mgr.GetHTTPClient(), 86 Cache: &client.CacheOptions{ 87 Reader: mgr.GetCache(), 88 Unstructured: true, 89 }, 90 }) 91 if err != nil { 92 panic(fmt.Sprintf("unable to create unstructuredCachineClient: %v", err)) 93 } 94 95 if err := (&Reconciler{ 96 Client: mgr.GetClient(), 97 UnstructuredCachingClient: unstructuredCachingClient, 98 APIReader: mgr.GetClient(), 99 }).SetupWithManager(ctx, mgr, controller.Options{MaxConcurrentReconciles: 1}); err != nil { 100 panic(fmt.Sprintf("Failed to start ClusterReconciler: %v", err)) 101 } 102 if err := (&machinecontroller.Reconciler{ 103 Client: mgr.GetClient(), 104 UnstructuredCachingClient: unstructuredCachingClient, 105 APIReader: mgr.GetAPIReader(), 106 Tracker: tracker, 107 }).SetupWithManager(ctx, mgr, controller.Options{MaxConcurrentReconciles: 1}); err != nil { 108 panic(fmt.Sprintf("Failed to start MachineReconciler: %v", err)) 109 } 110 } 111 112 SetDefaultEventuallyPollingInterval(100 * time.Millisecond) 113 SetDefaultEventuallyTimeout(timeout) 114 115 os.Exit(envtest.Run(ctx, envtest.RunInput{ 116 M: m, 117 SetupEnv: func(e *envtest.Environment) { env = e }, 118 SetupIndexes: setupIndexes, 119 SetupReconcilers: setupReconcilers, 120 })) 121 }