github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/worker/caasadmission/admission_test.go (about) 1 // Copyright 2020 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package caasadmission_test 5 6 import ( 7 jc "github.com/juju/testing/checkers" 8 gc "gopkg.in/check.v1" 9 admission "k8s.io/api/admissionregistration/v1" 10 11 pkitest "github.com/juju/juju/pki/test" 12 "github.com/juju/juju/worker/caasadmission" 13 ) 14 15 type AdmissionSuite struct { 16 } 17 18 type dummyAdmissionCreator struct { 19 EnsureMutatingWebhookConfigurationFunc func() (func(), error) 20 } 21 22 var _ = gc.Suite(&AdmissionSuite{}) 23 24 func (d *dummyAdmissionCreator) EnsureMutatingWebhookConfiguration() (func(), error) { 25 if d.EnsureMutatingWebhookConfigurationFunc == nil { 26 return func() {}, nil 27 } 28 return d.EnsureMutatingWebhookConfigurationFunc() 29 } 30 31 func int32Ptr(i int32) *int32 { 32 return &i 33 } 34 35 func strPtr(s string) *string { 36 return &s 37 } 38 39 func (a *AdmissionSuite) TestAdmissionCreatorObject(c *gc.C) { 40 var ( 41 ensureWebhookCalled = false 42 ensureWebhookCleanupCalled = false 43 namespace = "testns" 44 path = "/test" 45 port int32 = 1111 46 svcName = "testsvc" 47 ) 48 49 authority, err := pkitest.NewTestAuthority() 50 c.Assert(err, jc.ErrorIsNil) 51 52 serviceRef := &admission.ServiceReference{ 53 Namespace: namespace, 54 Name: svcName, 55 Path: strPtr(path), 56 Port: int32Ptr(port), 57 } 58 59 admissionCreator, err := caasadmission.NewAdmissionCreator( 60 authority, "testns", "testmodel", false, 61 func(obj *admission.MutatingWebhookConfiguration) (func(), error) { 62 ensureWebhookCalled = true 63 64 c.Assert(obj.Namespace, gc.Equals, namespace) 65 c.Assert(len(obj.Webhooks), gc.Equals, 1) 66 webhook := obj.Webhooks[0] 67 c.Assert(webhook.AdmissionReviewVersions, gc.DeepEquals, []string{"v1beta1"}) 68 c.Assert(webhook.SideEffects, gc.NotNil) 69 c.Assert(*webhook.SideEffects, gc.Equals, admission.SideEffectClassNone) 70 svc := webhook.ClientConfig.Service 71 c.Assert(svc.Name, gc.Equals, svcName) 72 c.Assert(svc.Namespace, gc.Equals, namespace) 73 c.Assert(*svc.Path, gc.Equals, path) 74 c.Assert(*svc.Port, gc.Equals, port) 75 76 return func() { ensureWebhookCleanupCalled = true }, nil 77 }, serviceRef) 78 79 c.Assert(err, jc.ErrorIsNil) 80 81 cleanup, err := admissionCreator.EnsureMutatingWebhookConfiguration() 82 c.Assert(err, jc.ErrorIsNil) 83 c.Assert(ensureWebhookCalled, jc.IsTrue) 84 85 cleanup() 86 c.Assert(ensureWebhookCleanupCalled, jc.IsTrue) 87 }