@@ -217,73 +217,96 @@ func TestTLSConfigFromSecret(t *testing.T) {
217
217
errMsg : "secret default/tls-secret not found" ,
218
218
},
219
219
{
220
- name : "missing certificate " ,
220
+ name : "deprecated fields without option " ,
221
221
secret : & corev1.Secret {
222
222
ObjectMeta : metav1.ObjectMeta {
223
223
Name : "tls-secret" ,
224
224
Namespace : testNS ,
225
225
},
226
226
Data : map [string ][]byte {
227
- secrets .TLSKeyKey : tlsKey ,
227
+ secrets .TLSCertFileKey : tlsCert ,
228
+ secrets .TLSKeyFileKey : tlsKey ,
228
229
},
229
230
},
230
- errMsg : "failed to get TLS certificate" ,
231
+ errMsg : "no CA certificate or client certificate pair found " ,
231
232
},
232
233
{
233
- name : "missing private key " ,
234
+ name : "invalid certificate data " ,
234
235
secret : & corev1.Secret {
235
236
ObjectMeta : metav1.ObjectMeta {
236
237
Name : "tls-secret" ,
237
238
Namespace : testNS ,
238
239
},
239
240
Data : map [string ][]byte {
240
- secrets .TLSCertKey : tlsCert ,
241
+ secrets .TLSCertKey : []byte ("invalid-cert-data" ),
242
+ secrets .TLSKeyKey : []byte ("invalid-key-data" ),
241
243
},
242
244
},
243
- errMsg : "failed to get TLS private key" ,
245
+ errMsg : "failed to parse TLS certificate and key" ,
244
246
},
245
247
{
246
- name : "deprecated fields without option " ,
248
+ name : "invalid CA certificate " ,
247
249
secret : & corev1.Secret {
248
250
ObjectMeta : metav1.ObjectMeta {
249
251
Name : "tls-secret" ,
250
252
Namespace : testNS ,
251
253
},
252
254
Data : map [string ][]byte {
253
- secrets .TLSCertFileKey : tlsCert ,
254
- secrets .TLSKeyFileKey : tlsKey ,
255
+ secrets .TLSCertKey : tlsCert ,
256
+ secrets .TLSKeyKey : tlsKey ,
257
+ secrets .CACertKey : []byte ("invalid-ca-data" ),
255
258
},
256
259
},
257
- errMsg : `key 'tls.crt' not found in secret` ,
260
+ errMsg : "failed to parse CA certificate" ,
258
261
},
259
262
{
260
- name : "invalid certificate data " ,
263
+ name : "CA certificate only " ,
261
264
secret : & corev1.Secret {
262
265
ObjectMeta : metav1.ObjectMeta {
263
266
Name : "tls-secret" ,
264
267
Namespace : testNS ,
265
268
},
266
269
Data : map [string ][]byte {
267
- secrets .TLSCertKey : []byte ("invalid-cert-data" ),
268
- secrets .TLSKeyKey : []byte ("invalid-key-data" ),
270
+ secrets .CACertKey : caCert ,
269
271
},
270
272
},
271
- errMsg : "failed to parse TLS certificate and key" ,
272
273
},
273
274
{
274
- name : "invalid CA certificate " ,
275
+ name : "certificate without key " ,
275
276
secret : & corev1.Secret {
276
277
ObjectMeta : metav1.ObjectMeta {
277
278
Name : "tls-secret" ,
278
279
Namespace : testNS ,
279
280
},
280
281
Data : map [string ][]byte {
281
282
secrets .TLSCertKey : tlsCert ,
282
- secrets .TLSKeyKey : tlsKey ,
283
- secrets .CACertKey : []byte ("invalid-ca-data" ),
284
283
},
285
284
},
286
- errMsg : "failed to parse CA certificate" ,
285
+ errMsg : "found certificate but missing private key" ,
286
+ },
287
+ {
288
+ name : "key without certificate" ,
289
+ secret : & corev1.Secret {
290
+ ObjectMeta : metav1.ObjectMeta {
291
+ Name : "tls-secret" ,
292
+ Namespace : testNS ,
293
+ },
294
+ Data : map [string ][]byte {
295
+ secrets .TLSKeyKey : tlsKey ,
296
+ },
297
+ },
298
+ errMsg : "found private key but missing certificate" ,
299
+ },
300
+ {
301
+ name : "no certificates at all" ,
302
+ secret : & corev1.Secret {
303
+ ObjectMeta : metav1.ObjectMeta {
304
+ Name : "tls-secret" ,
305
+ Namespace : testNS ,
306
+ },
307
+ Data : map [string ][]byte {},
308
+ },
309
+ errMsg : "no CA certificate or client certificate pair found" ,
287
310
},
288
311
}
289
312
@@ -303,11 +326,24 @@ func TestTLSConfigFromSecret(t *testing.T) {
303
326
} else {
304
327
g .Expect (err ).ToNot (HaveOccurred ())
305
328
g .Expect (tlsConfig ).ToNot (BeNil ())
306
- g .Expect (tlsConfig .Certificates ).To (HaveLen (1 ))
307
329
308
- expectedCert , err := tls .X509KeyPair (tlsCert , tlsKey )
309
- g .Expect (err ).ToNot (HaveOccurred ())
310
- g .Expect (tlsConfig .Certificates [0 ]).To (Equal (expectedCert ))
330
+ hasCert := len (tt .secret .Data [secrets .TLSCertKey ]) > 0 || len (tt .secret .Data [secrets .TLSCertFileKey ]) > 0
331
+ hasKey := len (tt .secret .Data [secrets .TLSKeyKey ]) > 0 || len (tt .secret .Data [secrets .TLSKeyFileKey ]) > 0
332
+ hasCertPair := hasCert && hasKey
333
+
334
+ if hasCertPair {
335
+ g .Expect (tlsConfig .Certificates ).To (HaveLen (1 ))
336
+ expectedCert , err := tls .X509KeyPair (tlsCert , tlsKey )
337
+ g .Expect (err ).ToNot (HaveOccurred ())
338
+ g .Expect (tlsConfig .Certificates [0 ]).To (Equal (expectedCert ))
339
+ } else {
340
+ g .Expect (tlsConfig .Certificates ).To (BeEmpty ())
341
+ }
342
+
343
+ hasCA := len (tt .secret .Data [secrets .CACertKey ]) > 0 || len (tt .secret .Data [secrets .CACertFileKey ]) > 0
344
+ if hasCA {
345
+ g .Expect (tlsConfig .RootCAs ).ToNot (BeNil ())
346
+ }
311
347
}
312
348
})
313
349
}
0 commit comments