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 }