sigs.k8s.io/cluster-api@v1.7.1/internal/controllers/machinehealthcheck/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 machinehealthcheck 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 clustercontroller "sigs.k8s.io/cluster-api/internal/controllers/cluster" 38 machinecontroller "sigs.k8s.io/cluster-api/internal/controllers/machine" 39 machinesetcontroller "sigs.k8s.io/cluster-api/internal/controllers/machineset" 40 "sigs.k8s.io/cluster-api/internal/test/envtest" 41 ) 42 43 const ( 44 timeout = time.Second * 30 45 testClusterName = "test-cluster" 46 ) 47 48 var ( 49 env *envtest.Environment 50 ctx = ctrl.SetupSignalHandler() 51 fakeScheme = runtime.NewScheme() 52 ) 53 54 func init() { 55 _ = clientgoscheme.AddToScheme(fakeScheme) 56 _ = clusterv1.AddToScheme(fakeScheme) 57 _ = apiextensionsv1.AddToScheme(fakeScheme) 58 } 59 60 func TestMain(m *testing.M) { 61 setupIndexes := func(ctx context.Context, mgr ctrl.Manager) { 62 if err := index.AddDefaultIndexes(ctx, mgr); err != nil { 63 panic(fmt.Sprintf("unable to setup index: %v", err)) 64 } 65 } 66 67 setupReconcilers := func(ctx context.Context, mgr ctrl.Manager) { 68 // Set up a ClusterCacheTracker and ClusterCacheReconciler to provide to controllers 69 // requiring a connection to a remote cluster 70 tracker, err := remote.NewClusterCacheTracker( 71 mgr, 72 remote.ClusterCacheTrackerOptions{ 73 Log: &ctrl.Log, 74 Indexes: []remote.Index{remote.NodeProviderIDIndex}, 75 }, 76 ) 77 if err != nil { 78 panic(fmt.Sprintf("unable to create cluster cache tracker: %v", err)) 79 } 80 if err := (&remote.ClusterCacheReconciler{ 81 Client: mgr.GetClient(), 82 Tracker: tracker, 83 }).SetupWithManager(ctx, mgr, controller.Options{MaxConcurrentReconciles: 1}); err != nil { 84 panic(fmt.Sprintf("Failed to start ClusterCacheReconciler: %v", err)) 85 } 86 87 unstructuredCachingClient, err := client.New(mgr.GetConfig(), client.Options{ 88 HTTPClient: mgr.GetHTTPClient(), 89 Cache: &client.CacheOptions{ 90 Reader: mgr.GetCache(), 91 Unstructured: true, 92 }, 93 }) 94 if err != nil { 95 panic(fmt.Sprintf("unable to create unstructuredCachineClient: %v", err)) 96 } 97 98 if err := (&clustercontroller.Reconciler{ 99 Client: mgr.GetClient(), 100 UnstructuredCachingClient: unstructuredCachingClient, 101 APIReader: mgr.GetClient(), 102 }).SetupWithManager(ctx, mgr, controller.Options{MaxConcurrentReconciles: 1}); err != nil { 103 panic(fmt.Sprintf("Failed to start ClusterReconciler: %v", err)) 104 } 105 if err := (&Reconciler{ 106 Client: mgr.GetClient(), 107 Tracker: tracker, 108 }).SetupWithManager(ctx, mgr, controller.Options{MaxConcurrentReconciles: 1}); err != nil { 109 panic(fmt.Sprintf("Failed to start Reconciler : %v", err)) 110 } 111 if err := (&machinecontroller.Reconciler{ 112 Client: mgr.GetClient(), 113 UnstructuredCachingClient: unstructuredCachingClient, 114 APIReader: mgr.GetAPIReader(), 115 Tracker: tracker, 116 }).SetupWithManager(ctx, mgr, controller.Options{MaxConcurrentReconciles: 1}); err != nil { 117 panic(fmt.Sprintf("Failed to start MachineReconciler: %v", err)) 118 } 119 if err := (&machinesetcontroller.Reconciler{ 120 Client: mgr.GetClient(), 121 UnstructuredCachingClient: unstructuredCachingClient, 122 APIReader: mgr.GetAPIReader(), 123 Tracker: tracker, 124 }).SetupWithManager(ctx, mgr, controller.Options{MaxConcurrentReconciles: 1}); err != nil { 125 panic(fmt.Sprintf("Failed to start MMachineSetReconciler: %v", err)) 126 } 127 } 128 129 SetDefaultEventuallyPollingInterval(100 * time.Millisecond) 130 SetDefaultEventuallyTimeout(timeout) 131 132 os.Exit(envtest.Run(ctx, envtest.RunInput{ 133 M: m, 134 SetupEnv: func(e *envtest.Environment) { env = e }, 135 SetupIndexes: setupIndexes, 136 SetupReconcilers: setupReconcilers, 137 })) 138 }