@@ -13,6 +13,7 @@ import (
13
13
"time"
14
14
15
15
"github.com/smallstep/ca-component/api"
16
+ "github.com/smallstep/cli/jose"
16
17
)
17
18
18
19
const (
@@ -386,3 +387,122 @@ func TestClient_Renew(t *testing.T) {
386
387
})
387
388
}
388
389
}
390
+
391
+ func TestClient_Provisioners (t * testing.T ) {
392
+ ok := & api.ProvisionersResponse {
393
+ Provisioners : map [string ]* jose.JSONWebKeySet {},
394
+ }
395
+ internalServerError := api .InternalServerError (fmt .Errorf ("Internal Server Error" ))
396
+
397
+ tests := []struct {
398
+ name string
399
+ response interface {}
400
+ responseCode int
401
+ wantErr bool
402
+ }{
403
+ {"ok" , ok , 200 , false },
404
+ {"fail" , internalServerError , 500 , true },
405
+ }
406
+
407
+ srv := httptest .NewServer (nil )
408
+ defer srv .Close ()
409
+
410
+ for _ , tt := range tests {
411
+ t .Run (tt .name , func (t * testing.T ) {
412
+ c , err := NewClient (srv .URL , WithTransport (http .DefaultTransport ))
413
+ if err != nil {
414
+ t .Errorf ("NewClient() error = %v" , err )
415
+ return
416
+ }
417
+
418
+ srv .Config .Handler = http .HandlerFunc (func (w http.ResponseWriter , req * http.Request ) {
419
+ expected := "/provisioners"
420
+ if req .RequestURI != expected {
421
+ t .Errorf ("RequestURI = %s, want %s" , req .RequestURI , expected )
422
+ }
423
+ w .WriteHeader (tt .responseCode )
424
+ api .JSON (w , tt .response )
425
+ })
426
+
427
+ got , err := c .Provisioners ()
428
+ if (err != nil ) != tt .wantErr {
429
+ t .Errorf ("Client.Provisioners() error = %v, wantErr %v" , err , tt .wantErr )
430
+ return
431
+ }
432
+
433
+ switch {
434
+ case err != nil :
435
+ if got != nil {
436
+ t .Errorf ("Client.Provisioners() = %v, want nil" , got )
437
+ }
438
+ if ! reflect .DeepEqual (err , tt .response ) {
439
+ t .Errorf ("Client.Provisioners() error = %v, want %v" , err , tt .response )
440
+ }
441
+ default :
442
+ if ! reflect .DeepEqual (got , tt .response ) {
443
+ t .Errorf ("Client.Provisioners() = %v, want %v" , got , tt .response )
444
+ }
445
+ }
446
+ })
447
+ }
448
+ }
449
+
450
+ func TestClient_ProvisionerKey (t * testing.T ) {
451
+ ok := & api.ProvisionerKeyResponse {
452
+ Key : "an encrypted key" ,
453
+ }
454
+ notFound := api .NotFound (fmt .Errorf ("Not Found" ))
455
+
456
+ tests := []struct {
457
+ name string
458
+ kid string
459
+ response interface {}
460
+ responseCode int
461
+ wantErr bool
462
+ }{
463
+ {"ok" , "kid" , ok , 200 , false },
464
+ {"fail" , "invalid" , notFound , 500 , true },
465
+ }
466
+
467
+ srv := httptest .NewServer (nil )
468
+ defer srv .Close ()
469
+
470
+ for _ , tt := range tests {
471
+ t .Run (tt .name , func (t * testing.T ) {
472
+ c , err := NewClient (srv .URL , WithTransport (http .DefaultTransport ))
473
+ if err != nil {
474
+ t .Errorf ("NewClient() error = %v" , err )
475
+ return
476
+ }
477
+
478
+ srv .Config .Handler = http .HandlerFunc (func (w http.ResponseWriter , req * http.Request ) {
479
+ expected := "/provisioners/" + tt .kid + "/encrypted-key"
480
+ if req .RequestURI != expected {
481
+ t .Errorf ("RequestURI = %s, want %s" , req .RequestURI , expected )
482
+ }
483
+ w .WriteHeader (tt .responseCode )
484
+ api .JSON (w , tt .response )
485
+ })
486
+
487
+ got , err := c .ProvisionerKey (tt .kid )
488
+ if (err != nil ) != tt .wantErr {
489
+ t .Errorf ("Client.ProvisionerKey() error = %v, wantErr %v" , err , tt .wantErr )
490
+ return
491
+ }
492
+
493
+ switch {
494
+ case err != nil :
495
+ if got != nil {
496
+ t .Errorf ("Client.ProvisionerKey() = %v, want nil" , got )
497
+ }
498
+ if ! reflect .DeepEqual (err , tt .response ) {
499
+ t .Errorf ("Client.ProvisionerKey() error = %v, want %v" , err , tt .response )
500
+ }
501
+ default :
502
+ if ! reflect .DeepEqual (got , tt .response ) {
503
+ t .Errorf ("Client.ProvisionerKey() = %v, want %v" , got , tt .response )
504
+ }
505
+ }
506
+ })
507
+ }
508
+ }
0 commit comments