github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/worker/caasadmission/controller_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  	"net/http"
     8  	"sync"
     9  
    10  	"github.com/juju/errors"
    11  	"github.com/juju/loggo"
    12  	jc "github.com/juju/testing/checkers"
    13  	gc "gopkg.in/check.v1"
    14  
    15  	"github.com/juju/juju/worker/caasadmission"
    16  	rbacmappertest "github.com/juju/juju/worker/caasrbacmapper/test"
    17  )
    18  
    19  type ControllerSuite struct {
    20  }
    21  
    22  type dummyMux struct {
    23  	AddHandlerFunc    func(string, string, http.Handler) error
    24  	RemoveHandlerFunc func(string, string)
    25  }
    26  
    27  var _ = gc.Suite(&ControllerSuite{})
    28  
    29  func (d *dummyMux) AddHandler(i, j string, h http.Handler) error {
    30  	if d.AddHandlerFunc == nil {
    31  		return nil
    32  	}
    33  	return d.AddHandlerFunc(i, j, h)
    34  }
    35  
    36  func (d *dummyMux) RemoveHandler(i, j string) {
    37  	if d.RemoveHandlerFunc != nil {
    38  		d.RemoveHandlerFunc(i, j)
    39  	}
    40  }
    41  
    42  func (s *ControllerSuite) TestControllerStartup(c *gc.C) {
    43  	var (
    44  		logger     = loggo.Logger{}
    45  		rbacMapper = &rbacmappertest.Mapper{}
    46  		waitGroup  = sync.WaitGroup{}
    47  		path       = "/test"
    48  	)
    49  	// Setup function counter
    50  	waitGroup.Add(2)
    51  	mux := &dummyMux{
    52  		AddHandlerFunc: func(m, p string, _ http.Handler) error {
    53  			c.Assert(m, jc.DeepEquals, http.MethodPost)
    54  			c.Assert(p, jc.DeepEquals, path)
    55  			waitGroup.Done()
    56  			return nil
    57  		},
    58  		RemoveHandlerFunc: func(_, _ string) {
    59  			waitGroup.Done()
    60  		},
    61  	}
    62  	creator := &dummyAdmissionCreator{
    63  		EnsureMutatingWebhookConfigurationFunc: func() (func(), error) {
    64  			waitGroup.Done()
    65  			return func() { waitGroup.Done() }, nil
    66  		},
    67  	}
    68  
    69  	ctrl, err := caasadmission.NewController(logger, mux, path, false, creator, rbacMapper)
    70  	c.Assert(err, jc.ErrorIsNil)
    71  
    72  	waitGroup.Wait()
    73  	waitGroup.Add(2)
    74  	ctrl.Kill()
    75  
    76  	// Cleanup function counter
    77  	waitGroup.Wait()
    78  	err = ctrl.Wait()
    79  	c.Assert(err, jc.ErrorIsNil)
    80  }
    81  
    82  func (s *ControllerSuite) TestControllerStartupMuxError(c *gc.C) {
    83  	var (
    84  		logger     = loggo.Logger{}
    85  		rbacMapper = &rbacmappertest.Mapper{}
    86  		waitGroup  = sync.WaitGroup{}
    87  		path       = "/test"
    88  	)
    89  	// Setup function counter
    90  	waitGroup.Add(1)
    91  	mux := &dummyMux{
    92  		AddHandlerFunc: func(m, p string, _ http.Handler) error {
    93  			waitGroup.Done()
    94  			c.Assert(m, jc.DeepEquals, http.MethodPost)
    95  			c.Assert(p, jc.DeepEquals, path)
    96  			return errors.NewNotValid(nil, "not valid")
    97  		},
    98  	}
    99  	creator := &dummyAdmissionCreator{}
   100  
   101  	ctrl, err := caasadmission.NewController(logger, mux, path, false, creator, rbacMapper)
   102  	c.Assert(err, jc.ErrorIsNil)
   103  
   104  	waitGroup.Wait()
   105  	ctrl.Kill()
   106  	err = ctrl.Wait()
   107  	c.Assert(errors.IsNotValid(err), jc.IsTrue)
   108  }
   109  
   110  func (s *ControllerSuite) TestControllerStartupAdmissionError(c *gc.C) {
   111  	var (
   112  		logger     = loggo.Logger{}
   113  		rbacMapper = &rbacmappertest.Mapper{}
   114  		waitGroup  = sync.WaitGroup{}
   115  		path       = "/test"
   116  	)
   117  	// Setup function counter
   118  	waitGroup.Add(1)
   119  	mux := &dummyMux{}
   120  	creator := &dummyAdmissionCreator{
   121  		EnsureMutatingWebhookConfigurationFunc: func() (func(), error) {
   122  			waitGroup.Done()
   123  			return func() {}, errors.NewNotValid(nil, "not valid")
   124  		},
   125  	}
   126  
   127  	ctrl, err := caasadmission.NewController(logger, mux, path, false, creator, rbacMapper)
   128  	c.Assert(err, jc.ErrorIsNil)
   129  
   130  	waitGroup.Wait()
   131  	ctrl.Kill()
   132  	err = ctrl.Wait()
   133  	c.Assert(errors.IsNotValid(err), jc.IsTrue)
   134  }