github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/controllers/apps/configuration/suite_test.go (about) 1 /* 2 Copyright (C) 2022-2023 ApeCloud Co., Ltd 3 4 This file is part of KubeBlocks project 5 6 This program is free software: you can redistribute it and/or modify 7 it under the terms of the GNU Affero General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU Affero General Public License for more details. 15 16 You should have received a copy of the GNU Affero General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 package configuration 21 22 import ( 23 "context" 24 "path/filepath" 25 "testing" 26 27 . "github.com/onsi/ginkgo/v2" 28 . "github.com/onsi/gomega" 29 30 "go.uber.org/zap/zapcore" 31 "k8s.io/client-go/kubernetes/scheme" 32 "k8s.io/client-go/rest" 33 ctrl "sigs.k8s.io/controller-runtime" 34 "sigs.k8s.io/controller-runtime/pkg/client" 35 "sigs.k8s.io/controller-runtime/pkg/envtest" 36 logf "sigs.k8s.io/controller-runtime/pkg/log" 37 "sigs.k8s.io/controller-runtime/pkg/log/zap" 38 39 appsv1alpha1 "github.com/1aal/kubeblocks/apis/apps/v1alpha1" 40 workloads "github.com/1aal/kubeblocks/apis/workloads/v1alpha1" 41 intctrlutil "github.com/1aal/kubeblocks/pkg/controllerutil" 42 "github.com/1aal/kubeblocks/pkg/testutil" 43 viper "github.com/1aal/kubeblocks/pkg/viperx" 44 ) 45 46 var cfg *rest.Config 47 var k8sClient client.Client 48 var testEnv *envtest.Environment 49 var ctx context.Context 50 var cancel context.CancelFunc 51 var testCtx testutil.TestContext 52 53 func TestReconfigure(t *testing.T) { 54 RegisterFailHandler(Fail) 55 56 RunSpecs(t, "Configuration Suite") 57 } 58 59 var _ = BeforeSuite(func() { 60 if viper.GetBool("ENABLE_DEBUG_LOG") { 61 logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true), func(o *zap.Options) { 62 o.TimeEncoder = zapcore.ISO8601TimeEncoder 63 })) 64 } 65 66 ctx, cancel = context.WithCancel(context.TODO()) 67 68 By("bootstrapping test environment") 69 testEnv = &envtest.Environment{ 70 CRDDirectoryPaths: []string{filepath.Join("..", "..", "..", "config", "crd", "bases")}, 71 ErrorIfCRDPathMissing: true, 72 } 73 74 var err error 75 // cfg is defined in this file globally. 76 cfg, err = testEnv.Start() 77 Expect(err).NotTo(HaveOccurred()) 78 Expect(cfg).NotTo(BeNil()) 79 80 err = appsv1alpha1.AddToScheme(scheme.Scheme) 81 Expect(err).NotTo(HaveOccurred()) 82 err = workloads.AddToScheme(scheme.Scheme) 83 Expect(err).NotTo(HaveOccurred()) 84 85 // +kubebuilder:scaffold:scheme 86 87 k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme}) 88 Expect(err).NotTo(HaveOccurred()) 89 Expect(k8sClient).NotTo(BeNil()) 90 91 // run reconcile 92 k8sManager, err := ctrl.NewManager(cfg, ctrl.Options{ 93 Scheme: scheme.Scheme, 94 MetricsBindAddress: "0", 95 ClientDisableCacheFor: intctrlutil.GetUncachedObjects(), 96 }) 97 Expect(err).ToNot(HaveOccurred()) 98 99 err = (&ReconfigureReconciler{ 100 Client: k8sManager.GetClient(), 101 Scheme: k8sManager.GetScheme(), 102 Recorder: k8sManager.GetEventRecorderFor("reconfigure-controller"), 103 }).SetupWithManager(k8sManager) 104 Expect(err).ToNot(HaveOccurred()) 105 106 err = (&ConfigConstraintReconciler{ 107 Client: k8sManager.GetClient(), 108 Scheme: k8sManager.GetScheme(), 109 Recorder: k8sManager.GetEventRecorderFor("configuration-cc-controller"), 110 }).SetupWithManager(k8sManager) 111 Expect(err).ToNot(HaveOccurred()) 112 113 err = (&ConfigurationReconciler{ 114 Client: k8sManager.GetClient(), 115 Scheme: k8sManager.GetScheme(), 116 Recorder: k8sManager.GetEventRecorderFor("configuration-controller"), 117 }).SetupWithManager(k8sManager) 118 Expect(err).ToNot(HaveOccurred()) 119 120 testCtx = testutil.NewDefaultTestContext(ctx, k8sClient, testEnv) 121 122 go func() { 123 defer GinkgoRecover() 124 err = k8sManager.Start(ctx) 125 Expect(err).ToNot(HaveOccurred(), "failed to run manager") 126 }() 127 }) 128 129 var _ = AfterSuite(func() { 130 cancel() 131 By("tearing down the test environment") 132 133 err := testEnv.Stop() 134 Expect(err).NotTo(HaveOccurred()) 135 })