Path: blob/main/components/ws-daemon/pkg/controller/suite_test.go
2500 views
// Copyright (c) 2023 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package controller56import (7"context"8"path/filepath"9"testing"10"time"1112"github.com/golang/mock/gomock"13. "github.com/onsi/ginkgo/v2"14. "github.com/onsi/gomega"15corev1 "k8s.io/api/core/v1"16metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"17"k8s.io/client-go/tools/record"18"k8s.io/kubectl/pkg/scheme"19ctrl "sigs.k8s.io/controller-runtime"20"sigs.k8s.io/controller-runtime/pkg/client"21"sigs.k8s.io/controller-runtime/pkg/envtest"22"sigs.k8s.io/controller-runtime/pkg/log/zap"23ctrl_metrics "sigs.k8s.io/controller-runtime/pkg/metrics"2425//+kubebuilder:scaffold:imports2627"github.com/gitpod-io/gitpod/common-go/util"28workspacev1 "github.com/gitpod-io/gitpod/ws-manager/api/crd/v1"29logf "sigs.k8s.io/controller-runtime/pkg/log"30)3132const secretsNamespace = "workspace-secrets"3334var (35k8sClient client.Client36testEnv *envtest.Environment37mock_ctrl *gomock.Controller38ctx context.Context39cancel context.CancelFunc40workspaceCtrl *WorkspaceController41NodeName = "ws-daemon-node"42)4344func TestAPIs(t *testing.T) {45mock_ctrl = gomock.NewController(t)46RegisterFailHandler(Fail)47RunSpecs(t, "Controller Suite")48}4950var _ = BeforeSuite(func() {51logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true)))5253crdPath := filepath.Join("..", "..", "crd")54if !util.InLeewayBuild() {55crdPath = filepath.Join("..", "..", "..", "ws-manager-mk2", "config", "crd", "bases")56}5758By("bootstrapping test environment")59testEnv = &envtest.Environment{60ControlPlaneStartTimeout: 1 * time.Minute,61ControlPlaneStopTimeout: 1 * time.Minute,62CRDDirectoryPaths: []string{crdPath},63ErrorIfCRDPathMissing: true,64}6566cfg, err := testEnv.Start()67Expect(err).NotTo(HaveOccurred())68Expect(cfg).NotTo(BeNil())6970err = workspacev1.AddToScheme(scheme.Scheme)71Expect(err).NotTo(HaveOccurred())7273//+kubebuilder:scaffold:scheme7475k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme})76Expect(err).NotTo(HaveOccurred())77Expect(k8sClient).NotTo(BeNil())7879k8sManager, err := ctrl.NewManager(cfg, ctrl.Options{80Scheme: scheme.Scheme,81})82Expect(err).ToNot(HaveOccurred())83ctx, cancel = context.WithCancel(context.Background())8485workspaceCtrl, err = NewWorkspaceController(k8sClient, record.NewFakeRecorder(100), NodeName, secretsNamespace, 5, nil, ctrl_metrics.Registry, nil)86Expect(err).NotTo(HaveOccurred())8788Expect(workspaceCtrl.SetupWithManager(k8sManager)).To(Succeed())89_ = createNamespace(secretsNamespace)9091go func() {92defer GinkgoRecover()93err = k8sManager.Start(ctx)94Expect(err).ToNot(HaveOccurred(), "failed to run manager")95}()96})9798func createNamespace(name string) *corev1.Namespace {99GinkgoHelper()100101namespace := &corev1.Namespace{102ObjectMeta: metav1.ObjectMeta{103Name: name,104},105}106107Expect(k8sClient.Create(ctx, namespace)).To(Succeed())108return namespace109}110111var _ = AfterSuite(func() {112if cancel != nil {113cancel()114}115By("tearing down the test environment")116err := testEnv.Stop()117Expect(err).NotTo(HaveOccurred())118})119120121