github.com/kotalco/kotal@v0.3.0/controllers/ethereum/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 ethereumv1alpha1 "github.com/kotalco/kotal/apis/ethereum/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 nodeReconciler *NodeReconciler 32 var ctx context.Context 33 var cancel context.CancelFunc 34 35 func TestAPIs(t *testing.T) { 36 RegisterFailHandler(Fail) 37 38 suiteConfig, reporterConfig := GinkgoConfiguration() 39 40 RunSpecs(t, 41 "Controller Suite", 42 suiteConfig, 43 reporterConfig) 44 } 45 46 var _ = BeforeSuite(func() { 47 logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true))) 48 49 ctx, cancel = context.WithCancel(context.TODO()) 50 51 By("bootstrapping test environment") 52 // create new test environment 53 if os.Getenv(shared.EnvUseExistingCluster) == "true" { 54 t := true 55 testEnv = &envtest.Environment{ 56 UseExistingCluster: &t, 57 } 58 } else { 59 testEnv = &envtest.Environment{ 60 CRDDirectoryPaths: []string{filepath.Join("..", "..", "config", "crd", "bases")}, 61 } 62 } 63 64 var err error 65 cfg, err = testEnv.Start() 66 Expect(err).ToNot(HaveOccurred()) 67 Expect(cfg).ToNot(BeNil()) 68 69 err = ethereumv1alpha1.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 // create a new k8s client 82 k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme}) 83 Expect(err).ToNot(HaveOccurred()) 84 Expect(k8sClient).ToNot(BeNil()) 85 86 // start node reconciler 87 nodeReconciler = &NodeReconciler{ 88 Client: k8sManager.GetClient(), 89 Scheme: scheme.Scheme, 90 } 91 nodeReconciler.SetupWithManager(k8sManager) 92 Expect(err).ToNot(HaveOccurred()) 93 94 go func() { 95 err = k8sManager.Start(ctx) 96 Expect(err).ToNot(HaveOccurred()) 97 }() 98 99 }) 100 101 var _ = AfterSuite(func() { 102 cancel() 103 By("tearing down the test environment") 104 err := testEnv.Stop() 105 Expect(err).ToNot(HaveOccurred()) 106 })