@@ -330,6 +330,112 @@ func TestNewAuthenticatedClientCertAuthFailed(t *testing.T) {
330
330
spiretest .RequireGRPCStatusHasPrefix (t , err , codes .Unauthenticated , "authentication failed auth/cert/login: Error making API request." )
331
331
}
332
332
333
+ func TestNewAuthenticatedClientK8sAuth (t * testing.T ) {
334
+ fakeVaultServer := newFakeVaultServer ()
335
+ fakeVaultServer .K8sAuthResponseCode = 200
336
+ for _ , tt := range []struct {
337
+ name string
338
+ response []byte
339
+ renew bool
340
+ namespace string
341
+ }{
342
+ {
343
+ name : "K8s Authentication success / Token is renewable" ,
344
+ response : []byte (testK8sAuthResponse ),
345
+ renew : true ,
346
+ },
347
+ {
348
+ name : "K8s Authentication success / Token is not renewable" ,
349
+ response : []byte (testK8sAuthResponseNotRenewable ),
350
+ },
351
+ {
352
+ name : "K8s Authentication success / Token is renewable / Namespace is given" ,
353
+ response : []byte (testK8sAuthResponse ),
354
+ renew : true ,
355
+ namespace : "test-ns" ,
356
+ },
357
+ } {
358
+ tt := tt
359
+ t .Run (tt .name , func (t * testing.T ) {
360
+ fakeVaultServer .K8sAuthResponse = tt .response
361
+
362
+ s , addr , err := fakeVaultServer .NewTLSServer ()
363
+ require .NoError (t , err )
364
+
365
+ s .Start ()
366
+ defer s .Close ()
367
+
368
+ cp := & ClientParams {
369
+ VaultAddr : fmt .Sprintf ("https://%v/" , addr ),
370
+ Namespace : tt .namespace ,
371
+ CACertPath : testRootCert ,
372
+ K8sAuthRoleName : "my-role" ,
373
+ K8sAuthTokenPath : "testdata/k8s/token" ,
374
+ }
375
+ cc , err := NewClientConfig (cp , hclog .Default ())
376
+ require .NoError (t , err )
377
+
378
+ renewCh := make (chan struct {})
379
+ client , err := cc .NewAuthenticatedClient (K8S , renewCh )
380
+ require .NoError (t , err )
381
+
382
+ select {
383
+ case <- renewCh :
384
+ require .Equal (t , false , tt .renew )
385
+ default :
386
+ require .Equal (t , true , tt .renew )
387
+ }
388
+
389
+ if cp .Namespace != "" {
390
+ headers := client .vaultClient .Headers ()
391
+ require .Equal (t , cp .Namespace , headers .Get (consts .NamespaceHeaderName ))
392
+ }
393
+ })
394
+ }
395
+ }
396
+
397
+ func TestNewAuthenticatedClientK8sAuthFailed (t * testing.T ) {
398
+ fakeVaultServer := newFakeVaultServer ()
399
+ fakeVaultServer .K8sAuthResponseCode = 500
400
+
401
+ s , addr , err := fakeVaultServer .NewTLSServer ()
402
+ require .NoError (t , err )
403
+
404
+ s .Start ()
405
+ defer s .Close ()
406
+
407
+ retry := 0 // Disable retry
408
+ cp := & ClientParams {
409
+ MaxRetries : & retry ,
410
+ VaultAddr : fmt .Sprintf ("https://%v/" , addr ),
411
+ CACertPath : testRootCert ,
412
+ K8sAuthRoleName : "my-role" ,
413
+ K8sAuthTokenPath : "testdata/k8s/token" ,
414
+ }
415
+ cc , err := NewClientConfig (cp , hclog .Default ())
416
+ require .NoError (t , err )
417
+
418
+ renewCh := make (chan struct {})
419
+ _ , err = cc .NewAuthenticatedClient (K8S , renewCh )
420
+ spiretest .RequireGRPCStatusHasPrefix (t , err , codes .Unauthenticated , "authentication failed auth/kubernetes/login: Error making API request." )
421
+ }
422
+
423
+ func TestNewAuthenticatedClientK8sAuthInvalidPath (t * testing.T ) {
424
+ retry := 0 // Disable retry
425
+ cp := & ClientParams {
426
+ MaxRetries : & retry ,
427
+ VaultAddr : "https://example.org:8200" ,
428
+ CACertPath : testRootCert ,
429
+ K8sAuthTokenPath : "invalid/k8s/token" ,
430
+ }
431
+ cc , err := NewClientConfig (cp , hclog .Default ())
432
+ require .NoError (t , err )
433
+
434
+ renewCh := make (chan struct {})
435
+ _ , err = cc .NewAuthenticatedClient (K8S , renewCh )
436
+ spiretest .RequireGRPCStatusHasPrefix (t , err , codes .Internal , "failed to read k8s service account token:" )
437
+ }
438
+
333
439
func TestRenewTokenFailed (t * testing.T ) {
334
440
fakeVaultServer := newFakeVaultServer ()
335
441
fakeVaultServer .LookupSelfResponse = []byte (testLookupSelfResponseShortTTL )
0 commit comments