Path: blob/main/components/ws-manager-api/go/crd/v1/webhook_suite_test.go
2501 views
// Copyright (c) 2022 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 v156import (7"context"8"crypto/tls"9"fmt"10"net"11"path/filepath"12"testing"13"time"1415"github.com/gitpod-io/gitpod/common-go/util"16. "github.com/onsi/ginkgo/v2"17. "github.com/onsi/gomega"1819admissionv1beta1 "k8s.io/api/admission/v1beta1"20//+kubebuilder:scaffold:imports21"k8s.io/apimachinery/pkg/runtime"22ctrl "sigs.k8s.io/controller-runtime"23"sigs.k8s.io/controller-runtime/pkg/client"24"sigs.k8s.io/controller-runtime/pkg/envtest"25logf "sigs.k8s.io/controller-runtime/pkg/log"26"sigs.k8s.io/controller-runtime/pkg/log/zap"27metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"28"sigs.k8s.io/controller-runtime/pkg/webhook"29)3031// These tests use Ginkgo (BDD-style Go testing framework). Refer to32// http://onsi.github.io/ginkgo/ to learn more about Ginkgo.3334// var cfg *rest.Config35var k8sClient client.Client36var testEnv *envtest.Environment37var ctx context.Context38var cancel context.CancelFunc3940func TestAPIs(t *testing.T) {41RegisterFailHandler(Fail)4243RunSpecs(t, "Webhook Suite")44}4546var _ = BeforeSuite(func() {47logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true)))4849ctx, cancel = context.WithCancel(context.TODO())5051crdPath := filepath.Join("..", "..", "config", "crd", "bases")52if !util.InLeewayBuild() {53crdPath = filepath.Join("..", "..", "..", "..", "ws-manager-mk2", "config", "crd", "bases")54}5556By("bootstrapping test environment")57testEnv = &envtest.Environment{58ControlPlaneStartTimeout: 1 * time.Minute,59ControlPlaneStopTimeout: 1 * time.Minute,60CRDDirectoryPaths: []string{crdPath},61ErrorIfCRDPathMissing: false,62WebhookInstallOptions: envtest.WebhookInstallOptions{63Paths: []string{filepath.Join("..", "..", "config", "webhook")},64},65}6667cfg, err := testEnv.Start()68Expect(err).NotTo(HaveOccurred())69Expect(cfg).NotTo(BeNil())7071scheme := runtime.NewScheme()72err = AddToScheme(scheme)73Expect(err).NotTo(HaveOccurred())7475err = admissionv1beta1.AddToScheme(scheme)76Expect(err).NotTo(HaveOccurred())7778//+kubebuilder:scaffold:scheme7980k8sClient, err = client.New(cfg, client.Options{Scheme: scheme})81Expect(err).NotTo(HaveOccurred())82Expect(k8sClient).NotTo(BeNil())8384// start webhook server using Manager85webhookInstallOptions := &testEnv.WebhookInstallOptions86mgr, err := ctrl.NewManager(cfg, ctrl.Options{87Scheme: scheme,88HealthProbeBindAddress: "0",89Metrics: metricsserver.Options{BindAddress: "0"},90WebhookServer: webhook.NewServer(webhook.Options{91Port: webhookInstallOptions.LocalServingPort,92Host: webhookInstallOptions.LocalServingHost,93CertDir: webhookInstallOptions.LocalServingCertDir,94}),95LeaderElection: false,96})97Expect(err).NotTo(HaveOccurred())9899err = (&Workspace{}).SetupWebhookWithManager(mgr)100Expect(err).NotTo(HaveOccurred())101102//+kubebuilder:scaffold:webhook103104go func() {105defer GinkgoRecover()106err = mgr.Start(ctx)107Expect(err).NotTo(HaveOccurred())108}()109110// wait for the webhook server to get ready111dialer := &net.Dialer{Timeout: time.Second}112addrPort := fmt.Sprintf("%s:%d", webhookInstallOptions.LocalServingHost, webhookInstallOptions.LocalServingPort)113Eventually(func() error {114conn, err := tls.DialWithDialer(dialer, "tcp", addrPort, &tls.Config{InsecureSkipVerify: true})115if err != nil {116return err117}118conn.Close()119return nil120}).Should(Succeed())121122})123124var _ = AfterSuite(func() {125cancel()126By("tearing down the test environment")127err := testEnv.Stop()128Expect(err).NotTo(HaveOccurred())129})130131132