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 })