github.com/kotalco/kotal@v0.3.0/controllers/ethereum2/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 ethereum2v1alpha1 "github.com/kotalco/kotal/apis/ethereum2/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 cfg, err = testEnv.Start() 65 Expect(err).ToNot(HaveOccurred()) 66 Expect(cfg).ToNot(BeNil()) 67 68 err = ethereum2v1alpha1.AddToScheme(scheme.Scheme) 69 Expect(err).NotTo(HaveOccurred()) 70 71 // +kubebuilder:scaffold:scheme 72 73 // create new controller manager 74 k8sManager, err := ctrl.NewManager(cfg, ctrl.Options{ 75 Metrics: server.Options{BindAddress: "0"}, 76 Scheme: scheme.Scheme, 77 }) 78 Expect(err).ToNot(HaveOccurred()) 79 80 // create a new k8s client 81 k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme}) 82 Expect(err).ToNot(HaveOccurred()) 83 Expect(k8sClient).ToNot(BeNil()) 84 85 // start beacon node reconciler 86 beaconNodeReconciler := &BeaconNodeReconciler{ 87 Reconciler: shared.Reconciler{ 88 Client: k8sManager.GetClient(), 89 Scheme: scheme.Scheme, 90 }, 91 } 92 beaconNodeReconciler.SetupWithManager(k8sManager) 93 Expect(err).ToNot(HaveOccurred()) 94 95 // start validator reconciler 96 validatorReconciler := &ValidatorReconciler{ 97 Reconciler: shared.Reconciler{ 98 Client: k8sManager.GetClient(), 99 Scheme: scheme.Scheme, 100 }, 101 } 102 validatorReconciler.SetupWithManager(k8sManager) 103 Expect(err).ToNot(HaveOccurred()) 104 105 go func() { 106 err = k8sManager.Start(ctx) 107 Expect(err).ToNot(HaveOccurred()) 108 }() 109 110 }) 111 112 var _ = AfterSuite(func() { 113 cancel() 114 By("tearing down the test environment") 115 err := testEnv.Stop() 116 Expect(err).ToNot(HaveOccurred()) 117 })