@@ -23,6 +23,8 @@ import (
23
23
"io"
24
24
"net"
25
25
"net/http"
26
+ "path"
27
+ "reflect"
26
28
27
29
. "github.com/onsi/ginkgo/v2"
28
30
. "github.com/onsi/gomega"
@@ -52,7 +54,7 @@ var _ = Describe("Webhook Server", func() {
52
54
53
55
// bypass needing to set up the x509 cert pool, etc ourselves
54
56
clientTransport , err := rest .TransportFor (& rest.Config {
55
- TLSClientConfig : rest.TLSClientConfig {CAData : servingOpts . LocalServingCAData },
57
+ TLSClientConfig : rest.TLSClientConfig {Insecure : true },
56
58
})
57
59
Expect (err ).NotTo (HaveOccurred ())
58
60
client = & http.Client {
@@ -181,7 +183,7 @@ var _ = Describe("Webhook Server", func() {
181
183
}
182
184
server .Register ("/somepath" , & testHandler {})
183
185
doneCh := genericStartServer (func (ctx context.Context ) {
184
- Expect (server .Start (ctx ))
186
+ Expect (server .Start (ctx )). To ( Succeed ())
185
187
})
186
188
187
189
Eventually (func () ([]byte , error ) {
@@ -199,6 +201,53 @@ var _ = Describe("Webhook Server", func() {
199
201
ctxCancel ()
200
202
Eventually (doneCh , "4s" ).Should (BeClosed ())
201
203
})
204
+
205
+ It ("should prefer GetCertificate through TLSOpts" , func () {
206
+ var finalCfg * tls.Config
207
+ finalCert , err := tls .LoadX509KeyPair (
208
+ path .Join (servingOpts .LocalServingCertDir , "tls.crt" ),
209
+ path .Join (servingOpts .LocalServingCertDir , "tls.key" ),
210
+ )
211
+ Expect (err ).NotTo (HaveOccurred ())
212
+ finalGetCertificate := func (_ * tls.ClientHelloInfo ) (* tls.Certificate , error ) { //nolint:unparam
213
+ return & finalCert , nil
214
+ }
215
+ server = & webhook.Server {
216
+ Host : servingOpts .LocalServingHost ,
217
+ Port : servingOpts .LocalServingPort ,
218
+ CertDir : servingOpts .LocalServingCertDir ,
219
+ TLSMinVersion : "1.2" ,
220
+ TLSOpts : []func (* tls.Config ){
221
+ func (cfg * tls.Config ) {
222
+ cfg .GetCertificate = finalGetCertificate
223
+ // save cfg after changes to test against
224
+ finalCfg = cfg
225
+ },
226
+ },
227
+ }
228
+ server .Register ("/somepath" , & testHandler {})
229
+ doneCh := genericStartServer (func (ctx context.Context ) {
230
+ Expect (server .Start (ctx )).To (Succeed ())
231
+ })
232
+
233
+ Eventually (func () ([]byte , error ) {
234
+ resp , err := client .Get (fmt .Sprintf ("https://%s/somepath" , testHostPort ))
235
+ Expect (err ).NotTo (HaveOccurred ())
236
+ defer resp .Body .Close ()
237
+ return io .ReadAll (resp .Body )
238
+ }).Should (Equal ([]byte ("gadzooks!" )))
239
+ Expect (finalCfg .MinVersion ).To (Equal (uint16 (tls .VersionTLS12 )))
240
+ // We can't compare the functions directly, but we can compare their pointers
241
+ if reflect .ValueOf (finalCfg .GetCertificate ).Pointer () != reflect .ValueOf (finalGetCertificate ).Pointer () {
242
+ Fail ("GetCertificate was not set properly, or overwritten" )
243
+ }
244
+ cert , err := finalCfg .GetCertificate (nil )
245
+ Expect (err ).NotTo (HaveOccurred ())
246
+ Expect (cert ).To (BeEquivalentTo (& finalCert ))
247
+
248
+ ctxCancel ()
249
+ Eventually (doneCh , "4s" ).Should (BeClosed ())
250
+ })
202
251
})
203
252
204
253
type testHandler struct {
0 commit comments