github.com/operator-framework/operator-lifecycle-manager@v0.30.0/pkg/controller/operators/openshift/suite_test.go (about)

     1  package openshift
     2  
     3  import (
     4  	"context"
     5  	"path/filepath"
     6  	"testing"
     7  	"time"
     8  
     9  	. "github.com/onsi/ginkgo/v2"
    10  	. "github.com/onsi/gomega"
    11  	configv1 "github.com/openshift/api/config/v1"
    12  	"github.com/operator-framework/api/crds"
    13  	apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
    14  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    15  	ctrl "sigs.k8s.io/controller-runtime"
    16  	"sigs.k8s.io/controller-runtime/pkg/client"
    17  	"sigs.k8s.io/controller-runtime/pkg/envtest"
    18  	logf "sigs.k8s.io/controller-runtime/pkg/log"
    19  	"sigs.k8s.io/controller-runtime/pkg/log/zap"
    20  	metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
    21  )
    22  
    23  func TestControllers(t *testing.T) {
    24  	RegisterFailHandler(Fail)
    25  
    26  	RunSpecs(t, "OpenShift Suite")
    27  }
    28  
    29  var (
    30  	testEnv   *envtest.Environment
    31  	k8sClient client.Client
    32  	ctx       context.Context
    33  	fixedNow  NowFunc
    34  
    35  	syncCh chan error
    36  )
    37  
    38  const (
    39  	clusterOperator     = "operator-lifecycle-manager"
    40  	controllerNamespace = "default"
    41  	timeout             = time.Second * 20
    42  	clusterVersion      = "1.0.0+cluster"
    43  	controllerVersion   = "1.0.0+controller"
    44  )
    45  
    46  var _ = BeforeSuite(func() {
    47  	logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true)))
    48  
    49  	base := filepath.Join("..", "..", "..", "..", "vendor", "github.com", "openshift", "api", "config", "v1")
    50  	testEnv = &envtest.Environment{
    51  		ErrorIfCRDPathMissing: true,
    52  		CRDs: []*apiextensionsv1.CustomResourceDefinition{
    53  			crds.ClusterServiceVersion(),
    54  		},
    55  		CRDDirectoryPaths: []string{
    56  			filepath.Join(base, "0000_00_cluster-version-operator_01_clusteroperator.crd.yaml"),
    57  			filepath.Join(base, "0000_00_cluster-version-operator_01_clusterversion.crd.yaml"),
    58  		},
    59  	}
    60  
    61  	cfg, err := testEnv.Start()
    62  	Expect(err).ToNot(HaveOccurred())
    63  	Expect(cfg).ToNot(BeNil())
    64  
    65  	ctx = context.Background()
    66  	now := metav1.Date(2021, time.April, 13, 0, 0, 0, 0, time.Local)
    67  	fixedNow = func() metav1.Time {
    68  		return now
    69  	}
    70  
    71  	mgr, err := ctrl.NewManager(cfg, ctrl.Options{
    72  		Metrics: metricsserver.Options{BindAddress: "0"},
    73  	})
    74  	Expect(err).ToNot(HaveOccurred())
    75  
    76  	k8sClient = mgr.GetClient()
    77  
    78  	syncCh = make(chan error)
    79  	reconciler, err := NewClusterOperatorReconciler(
    80  		WithClient(k8sClient),
    81  		WithScheme(mgr.GetScheme()),
    82  		WithName(clusterOperator),
    83  		WithNamespace(controllerNamespace),
    84  		WithSyncChannel(syncCh),
    85  		WithOLMOperator(),
    86  		WithNow(fixedNow),
    87  		WithTargetVersions(
    88  			configv1.OperandVersion{
    89  				Name:    "operator",
    90  				Version: clusterVersion,
    91  			},
    92  			configv1.OperandVersion{
    93  				Name:    clusterOperator,
    94  				Version: controllerVersion,
    95  			},
    96  		),
    97  	)
    98  	Expect(err).ToNot(HaveOccurred())
    99  	Expect(reconciler).ToNot(BeNil())
   100  
   101  	Expect(reconciler.SetupWithManager(mgr)).To(Succeed())
   102  
   103  	go func() {
   104  		defer GinkgoRecover()
   105  		Expect(mgr.Start(ctrl.SetupSignalHandler())).To(Succeed())
   106  	}()
   107  })
   108  
   109  var _ = AfterSuite(func() {
   110  	By("tearing down the test environment")
   111  	close(syncCh)
   112  	testEnv.Stop()
   113  })