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  })