github.com/kotalco/kotal@v0.3.0/controllers/ipfs/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 ipfsv1alpha1 "github.com/kotalco/kotal/apis/ipfs/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 = ipfsv1alpha1.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 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 peer reconciler 87 peerReconciler := &PeerReconciler{ 88 Reconciler: shared.Reconciler{ 89 Client: k8sManager.GetClient(), 90 Scheme: scheme.Scheme, 91 }, 92 } 93 peerReconciler.SetupWithManager(k8sManager) 94 Expect(err).ToNot(HaveOccurred()) 95 96 // start cluster peer reconciler 97 clusterPeerReconciler := &ClusterPeerReconciler{ 98 Reconciler: shared.Reconciler{ 99 Client: k8sManager.GetClient(), 100 Scheme: scheme.Scheme, 101 }, 102 } 103 clusterPeerReconciler.SetupWithManager(k8sManager) 104 Expect(err).ToNot(HaveOccurred()) 105 106 go func() { 107 err = k8sManager.Start(ctx) 108 Expect(err).ToNot(HaveOccurred()) 109 }() 110 111 }) 112 113 var _ = AfterSuite(func() { 114 By("tearing down the test environment") 115 cancel() 116 err := testEnv.Stop() 117 Expect(err).ToNot(HaveOccurred()) 118 })