github.com/kotalco/kotal@v0.3.0/controllers/stacks/suite_test.go (about) 1 package controllers 2 3 import ( 4 "context" 5 "os" 6 "path/filepath" 7 "testing" 8 9 . "github.com/onsi/ginkgo/v2" 10 . "github.com/onsi/gomega" 11 "k8s.io/client-go/kubernetes/scheme" 12 "k8s.io/client-go/rest" 13 ctrl "sigs.k8s.io/controller-runtime" 14 "sigs.k8s.io/controller-runtime/pkg/client" 15 "sigs.k8s.io/controller-runtime/pkg/envtest" 16 logf "sigs.k8s.io/controller-runtime/pkg/log" 17 "sigs.k8s.io/controller-runtime/pkg/log/zap" 18 "sigs.k8s.io/controller-runtime/pkg/metrics/server" 19 20 stacksv1alpha1 "github.com/kotalco/kotal/apis/stacks/v1alpha1" 21 "github.com/kotalco/kotal/controllers/shared" 22 // +kubebuilder:scaffold:imports 23 ) 24 25 var cfg *rest.Config 26 var k8sClient client.Client 27 var testEnv *envtest.Environment 28 var ctx context.Context 29 var cancel context.CancelFunc 30 31 func TestAPIs(t *testing.T) { 32 RegisterFailHandler(Fail) 33 34 suiteConfig, reporterConfig := GinkgoConfiguration() 35 36 RunSpecs(t, 37 "Controller Suite", 38 suiteConfig, 39 reporterConfig) 40 } 41 42 var _ = BeforeSuite(func() { 43 logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true))) 44 45 ctx, cancel = context.WithCancel(context.TODO()) 46 47 By("bootstrapping test environment") 48 // create new test environment 49 if os.Getenv(shared.EnvUseExistingCluster) == "true" { 50 t := true 51 testEnv = &envtest.Environment{ 52 UseExistingCluster: &t, 53 } 54 } else { 55 testEnv = &envtest.Environment{ 56 CRDDirectoryPaths: []string{filepath.Join("..", "..", "config", "crd", "bases")}, 57 } 58 } 59 60 var err error 61 // start the test environment 62 cfg, err = testEnv.Start() 63 Expect(err).ToNot(HaveOccurred()) 64 Expect(cfg).ToNot(BeNil()) 65 66 err = stacksv1alpha1.AddToScheme(scheme.Scheme) 67 Expect(err).NotTo(HaveOccurred()) 68 69 // +kubebuilder:scaffold:scheme 70 71 // create new controller manager 72 k8sManager, err := ctrl.NewManager(cfg, ctrl.Options{ 73 Metrics: server.Options{BindAddress: "0"}, 74 Scheme: scheme.Scheme, 75 }) 76 Expect(err).ToNot(HaveOccurred()) 77 78 k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme}) 79 Expect(err).ToNot(HaveOccurred()) 80 Expect(k8sClient).ToNot(BeNil()) 81 82 // start node reconciler 83 nodeReconciler := &NodeReconciler{ 84 Reconciler: shared.Reconciler{ 85 Client: k8sManager.GetClient(), 86 Scheme: scheme.Scheme, 87 }, 88 } 89 nodeReconciler.SetupWithManager(k8sManager) 90 Expect(err).ToNot(HaveOccurred()) 91 92 go func() { 93 err = k8sManager.Start(ctx) 94 Expect(err).ToNot(HaveOccurred()) 95 }() 96 97 }) 98 99 var _ = AfterSuite(func() { 100 By("tearing down the test environment") 101 cancel() 102 err := testEnv.Stop() 103 Expect(err).ToNot(HaveOccurred()) 104 })