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  }