github.com/kotalco/kotal@v0.3.0/controllers/chainlink/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 chainlinkv1alpha1 "github.com/kotalco/kotal/apis/chainlink/v1alpha1" 21 "github.com/kotalco/kotal/controllers/shared" 22 // +kubebuilder:scaffold:imports 23 ) 24 25 // These tests use Ginkgo (BDD-style Go testing framework). Refer to 26 // http://onsi.github.io/ginkgo/ to learn more about Ginkgo. 27 28 var cfg *rest.Config 29 var k8sClient client.Client 30 var testEnv *envtest.Environment 31 var ctx context.Context 32 var cancel context.CancelFunc 33 34 func TestAPIs(t *testing.T) { 35 RegisterFailHandler(Fail) 36 37 suiteConfig, reporterConfig := GinkgoConfiguration() 38 39 RunSpecs(t, 40 "Controller Suite", 41 suiteConfig, 42 reporterConfig) 43 } 44 45 var _ = BeforeSuite(func() { 46 logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true))) 47 48 ctx, cancel = context.WithCancel(context.TODO()) 49 50 By("bootstrapping test environment") 51 // create new test environment 52 if os.Getenv(shared.EnvUseExistingCluster) == "true" { 53 t := true 54 testEnv = &envtest.Environment{ 55 UseExistingCluster: &t, 56 } 57 } else { 58 testEnv = &envtest.Environment{ 59 CRDDirectoryPaths: []string{filepath.Join("..", "..", "config", "crd", "bases")}, 60 } 61 } 62 63 var err error 64 // start the test environment 65 cfg, err = testEnv.Start() 66 Expect(err).ToNot(HaveOccurred()) 67 Expect(cfg).ToNot(BeNil()) 68 69 err = chainlinkv1alpha1.AddToScheme(scheme.Scheme) 70 Expect(err).NotTo(HaveOccurred()) 71 72 // +kubebuilder:scaffold:scheme 73 74 // create new controller manager 75 k8sManager, err := ctrl.NewManager(cfg, ctrl.Options{ 76 Metrics: server.Options{BindAddress: "0"}, 77 Scheme: scheme.Scheme, 78 }) 79 Expect(err).ToNot(HaveOccurred()) 80 81 k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme}) 82 Expect(err).ToNot(HaveOccurred()) 83 Expect(k8sClient).ToNot(BeNil()) 84 85 // start node reconciler 86 nodeReconciler := &NodeReconciler{ 87 Reconciler: shared.Reconciler{ 88 Client: k8sManager.GetClient(), 89 Scheme: scheme.Scheme, 90 }, 91 } 92 nodeReconciler.SetupWithManager(k8sManager) 93 Expect(err).ToNot(HaveOccurred()) 94 95 go func() { 96 err = k8sManager.Start(ctx) 97 Expect(err).ToNot(HaveOccurred()) 98 }() 99 }) 100 101 var _ = AfterSuite(func() { 102 By("tearing down the test environment") 103 cancel() 104 err := testEnv.Stop() 105 Expect(err).ToNot(HaveOccurred()) 106 })