@@ -76,7 +76,32 @@ var _ = Describe("Webhook", func() {
76
76
77
77
ctx , cancel := context .WithCancel (context .Background ())
78
78
go func () {
79
- _ = server .Start (ctx )
79
+ err = server .Start (ctx )
80
+ Expect (err ).NotTo (HaveOccurred ())
81
+ }()
82
+
83
+ Eventually (func () bool {
84
+ err = c .Create (context .TODO (), obj )
85
+ return errors .ReasonForError (err ) == metav1 .StatusReason ("Always denied" )
86
+ }, 1 * time .Second ).Should (BeTrue ())
87
+
88
+ cancel ()
89
+ close (done )
90
+ })
91
+ It ("should reject create request for multi-webhook that rejects all requests" , func (done Done ) {
92
+ m , err := manager .New (cfg , manager.Options {
93
+ Port : testenv .WebhookInstallOptions .LocalServingPort ,
94
+ Host : testenv .WebhookInstallOptions .LocalServingHost ,
95
+ CertDir : testenv .WebhookInstallOptions .LocalServingCertDir ,
96
+ }) // we need manager here just to leverage manager.SetFields
97
+ Expect (err ).NotTo (HaveOccurred ())
98
+ server := m .GetWebhookServer ()
99
+ server .Register ("/failing" , & webhook.Admission {Handler : admission .MultiValidatingHandler (& rejectingValidator {})})
100
+
101
+ ctx , cancel := context .WithCancel (context .Background ())
102
+ go func () {
103
+ err = server .Start (ctx )
104
+ Expect (err ).NotTo (HaveOccurred ())
80
105
}()
81
106
82
107
Eventually (func () bool {
@@ -99,7 +124,8 @@ var _ = Describe("Webhook", func() {
99
124
100
125
ctx , cancel := context .WithCancel (context .Background ())
101
126
go func () {
102
- _ = server .StartStandalone (ctx , scheme .Scheme )
127
+ err := server .StartStandalone (ctx , scheme .Scheme )
128
+ Expect (err ).NotTo (HaveOccurred ())
103
129
}()
104
130
105
131
Eventually (func () bool {
@@ -170,8 +196,18 @@ var _ = Describe("Webhook", func() {
170
196
})
171
197
172
198
type rejectingValidator struct {
199
+ d * admission.Decoder
200
+ }
201
+
202
+ func (v * rejectingValidator ) InjectDecoder (d * admission.Decoder ) error {
203
+ v .d = d
204
+ return nil
173
205
}
174
206
175
207
func (v * rejectingValidator ) Handle (ctx context.Context , req admission.Request ) admission.Response {
208
+ var obj appsv1.Deployment
209
+ if err := v .d .Decode (req , & obj ); err != nil {
210
+ return admission .Denied (err .Error ())
211
+ }
176
212
return admission .Denied (fmt .Sprint ("Always denied" ))
177
213
}
0 commit comments