github.com/metaprov/modela-operator@v0.0.0-20240118193048-f378be8b74d2/api/v1alpha1/webhook_suite_test.go (about)

     1  /*
     2  Copyright 2022.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package v1alpha1
    18  
    19  import (
    20  	"context"
    21  	"crypto/tls"
    22  	"fmt"
    23  	"net"
    24  	"path/filepath"
    25  	"testing"
    26  	"time"
    27  
    28  	. "github.com/onsi/ginkgo"
    29  	. "github.com/onsi/gomega"
    30  
    31  	admissionv1beta1 "k8s.io/api/admission/v1beta1"
    32  	//+kubebuilder:scaffold:imports
    33  	"k8s.io/apimachinery/pkg/runtime"
    34  	"k8s.io/client-go/rest"
    35  	ctrl "sigs.k8s.io/controller-runtime"
    36  	"sigs.k8s.io/controller-runtime/pkg/client"
    37  	"sigs.k8s.io/controller-runtime/pkg/envtest"
    38  	"sigs.k8s.io/controller-runtime/pkg/envtest/printer"
    39  	logf "sigs.k8s.io/controller-runtime/pkg/log"
    40  	"sigs.k8s.io/controller-runtime/pkg/log/zap"
    41  )
    42  
    43  // These tests use Ginkgo (BDD-style Go testing framework). Refer to
    44  // http://onsi.github.io/ginkgo/ to learn more about Ginkgo.
    45  
    46  var cfg *rest.Config
    47  var k8sClient client.Client
    48  var testEnv *envtest.Environment
    49  var ctx context.Context
    50  var cancel context.CancelFunc
    51  
    52  func TestAPIs(t *testing.T) {
    53  	RegisterFailHandler(Fail)
    54  
    55  	RunSpecsWithDefaultAndCustomReporters(t,
    56  		"Webhook Suite",
    57  		[]Reporter{printer.NewlineReporter{}})
    58  }
    59  
    60  var _ = BeforeSuite(func() {
    61  	logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true)))
    62  
    63  	ctx, cancel = context.WithCancel(context.TODO())
    64  
    65  	By("bootstrapping test environment")
    66  	testEnv = &envtest.Environment{
    67  		CRDDirectoryPaths:     []string{filepath.Join("..", "..", "config", "crd", "bases")},
    68  		ErrorIfCRDPathMissing: false,
    69  		WebhookInstallOptions: envtest.WebhookInstallOptions{
    70  			Paths: []string{filepath.Join("..", "..", "config", "webhook")},
    71  		},
    72  	}
    73  
    74  	var err error
    75  	// cfg is defined in this file globally.
    76  	cfg, err = testEnv.Start()
    77  	Expect(err).NotTo(HaveOccurred())
    78  	Expect(cfg).NotTo(BeNil())
    79  
    80  	scheme := runtime.NewScheme()
    81  	err = AddToScheme(scheme)
    82  	Expect(err).NotTo(HaveOccurred())
    83  
    84  	err = admissionv1beta1.AddToScheme(scheme)
    85  	Expect(err).NotTo(HaveOccurred())
    86  
    87  	//+kubebuilder:scaffold:scheme
    88  
    89  	k8sClient, err = client.New(cfg, client.Options{Scheme: scheme})
    90  	Expect(err).NotTo(HaveOccurred())
    91  	Expect(k8sClient).NotTo(BeNil())
    92  
    93  	// start webhook server using Manager
    94  	webhookInstallOptions := &testEnv.WebhookInstallOptions
    95  	mgr, err := ctrl.NewManager(cfg, ctrl.Options{
    96  		Scheme:             scheme,
    97  		Host:               webhookInstallOptions.LocalServingHost,
    98  		Port:               webhookInstallOptions.LocalServingPort,
    99  		CertDir:            webhookInstallOptions.LocalServingCertDir,
   100  		LeaderElection:     false,
   101  		MetricsBindAddress: "0",
   102  	})
   103  	Expect(err).NotTo(HaveOccurred())
   104  
   105  	err = (&Modela{}).SetupWebhookWithManager(mgr)
   106  	Expect(err).NotTo(HaveOccurred())
   107  
   108  	err = (&ModelaBackup{}).SetupWebhookWithManager(mgr)
   109  	Expect(err).NotTo(HaveOccurred())
   110  
   111  	err = (&ModelaBackupRun{}).SetupWebhookWithManager(mgr)
   112  	Expect(err).NotTo(HaveOccurred())
   113  
   114  	//+kubebuilder:scaffold:webhook
   115  
   116  	go func() {
   117  		defer GinkgoRecover()
   118  		err = mgr.Start(ctx)
   119  		Expect(err).NotTo(HaveOccurred())
   120  	}()
   121  
   122  	// wait for the webhook server to get ready
   123  	dialer := &net.Dialer{Timeout: time.Second}
   124  	addrPort := fmt.Sprintf("%s:%d", webhookInstallOptions.LocalServingHost, webhookInstallOptions.LocalServingPort)
   125  	Eventually(func() error {
   126  		conn, err := tls.DialWithDialer(dialer, "tcp", addrPort, &tls.Config{InsecureSkipVerify: true})
   127  		if err != nil {
   128  			return err
   129  		}
   130  		conn.Close()
   131  		return nil
   132  	}).Should(Succeed())
   133  
   134  }, 60)
   135  
   136  var _ = AfterSuite(func() {
   137  	cancel()
   138  	By("tearing down the test environment")
   139  	err := testEnv.Stop()
   140  	Expect(err).NotTo(HaveOccurred())
   141  })