fleet/integrationtests/helmops/controller/suite_test.go

135 lines
3.4 KiB
Go

package controller
import (
"bytes"
"context"
"testing"
"time"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/reugn/go-quartz/quartz"
"go.uber.org/mock/gomock"
"github.com/rancher/fleet/integrationtests/utils"
"github.com/rancher/fleet/internal/cmd/controller/helmops/reconciler"
ctrlreconciler "github.com/rancher/fleet/internal/cmd/controller/reconciler"
"github.com/rancher/fleet/internal/cmd/controller/target"
"github.com/rancher/fleet/internal/config"
"github.com/rancher/fleet/internal/manifest"
v1alpha1 "github.com/rancher/fleet/pkg/apis/fleet.cattle.io/v1alpha1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/envtest"
"sigs.k8s.io/controller-runtime/pkg/log/zap"
)
const (
timeout = 60 * time.Second
)
var (
cfg *rest.Config
testEnv *envtest.Environment
ctx context.Context
cancel context.CancelFunc
k8sClient client.Client
namespace string
k8sClientSet *kubernetes.Clientset
logsBuffer bytes.Buffer
)
func TestHelmOpsController(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Helm Ops Controller Suite")
}
var _ = BeforeSuite(func() {
SetDefaultEventuallyTimeout(timeout)
ctx, cancel = context.WithCancel(context.TODO())
testEnv = utils.NewEnvTest("../../..")
GinkgoWriter.TeeTo(&logsBuffer)
ctrl.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true)))
var err error
cfg, err = utils.StartTestEnv(testEnv)
Expect(err).NotTo(HaveOccurred())
Expect(cfg).NotTo(BeNil())
err = v1alpha1.AddToScheme(scheme.Scheme)
Expect(err).NotTo(HaveOccurred())
k8sClientSet, err = kubernetes.NewForConfig(cfg)
Expect(err).NotTo(HaveOccurred())
k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme})
Expect(err).NotTo(HaveOccurred())
Expect(k8sClient).NotTo(BeNil())
mgr, err := ctrl.NewManager(cfg, ctrl.Options{
Scheme: scheme.Scheme,
})
Expect(err).ToNot(HaveOccurred())
ctlr := gomock.NewController(GinkgoT())
config.Set(&config.Config{})
sched, err := quartz.NewStdScheduler()
Expect(err).ToNot(HaveOccurred())
err = (&reconciler.HelmOpReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Recorder: mgr.GetEventRecorderFor("helmops-controller"),
Scheduler: sched,
Workers: 50,
}).SetupWithManager(mgr)
Expect(err).ToNot(HaveOccurred())
sched.Start(ctx)
err = (&reconciler.HelmOpStatusReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Workers: 50,
}).SetupWithManager(mgr)
Expect(err).ToNot(HaveOccurred())
store := manifest.NewStore(mgr.GetClient())
builder := target.New(mgr.GetClient(), mgr.GetAPIReader())
err = (&ctrlreconciler.BundleReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Builder: builder,
Store: store,
Query: builder,
Workers: 50,
}).SetupWithManager(mgr)
Expect(err).ToNot(HaveOccurred(), "failed to set up manager")
err = (&ctrlreconciler.BundleDeploymentReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Workers: 50,
}).SetupWithManager(mgr)
Expect(err).ToNot(HaveOccurred(), "failed to set up manager")
go func() {
defer GinkgoRecover()
defer ctlr.Finish()
err = mgr.Start(ctx)
Expect(err).ToNot(HaveOccurred(), "failed to run manager")
}()
})
var _ = AfterSuite(func() {
cancel()
Expect(testEnv.Stop()).ToNot(HaveOccurred())
})