@@ -8,13 +8,13 @@ import (
8
8
"net/http"
9
9
"net/http/httptest"
10
10
"reflect"
11
+ "sync"
11
12
"testing"
12
13
"time"
13
14
14
15
"github.com/pkg/errors"
15
16
"github.com/smallstep/certificates/api"
16
17
"github.com/smallstep/certificates/authority"
17
-
18
18
"github.com/smallstep/cli/crypto/randutil"
19
19
stepJOSE "github.com/smallstep/cli/jose"
20
20
jose "gopkg.in/square/go-jose.v2"
@@ -530,3 +530,71 @@ func doReload(ca *CA) error {
530
530
newCA .srv .Addr = ca .srv .Addr
531
531
return ca .srv .Reload (newCA .srv )
532
532
}
533
+
534
+ func TestBootstrapListener (t * testing.T ) {
535
+ srv := startCABootstrapServer ()
536
+ defer srv .Close ()
537
+ token := func () string {
538
+ return generateBootstrapToken (srv .URL , "127.0.0.1" , "ef742f95dc0d8aa82d3cca4017af6dac3fce84290344159891952d18c53eefe7" )
539
+ }
540
+ type args struct {
541
+ token string
542
+ }
543
+ tests := []struct {
544
+ name string
545
+ args args
546
+ wantErr bool
547
+ }{
548
+ {"ok" , args {token ()}, false },
549
+ {"fail" , args {"bad-token" }, true },
550
+ }
551
+ for _ , tt := range tests {
552
+ t .Run (tt .name , func (t * testing.T ) {
553
+ inner := newLocalListener ()
554
+ defer inner .Close ()
555
+ lis , err := BootstrapListener (context .Background (), tt .args .token , inner )
556
+ if (err != nil ) != tt .wantErr {
557
+ t .Errorf ("BootstrapListener() error = %v, wantErr %v" , err , tt .wantErr )
558
+ return
559
+ }
560
+ if tt .wantErr {
561
+ if lis != nil {
562
+ t .Errorf ("BootstrapListener() = %v, want nil" , lis )
563
+ }
564
+ return
565
+ }
566
+ wg := new (sync.WaitGroup )
567
+ go func () {
568
+ wg .Add (1 )
569
+ http .Serve (lis , http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
570
+ w .Write ([]byte ("ok" ))
571
+ }))
572
+ wg .Done ()
573
+ }()
574
+ defer wg .Wait ()
575
+ defer lis .Close ()
576
+
577
+ client , err := BootstrapClient (context .Background (), token ())
578
+ if err != nil {
579
+ t .Errorf ("BootstrapClient() error = %v" , err )
580
+ return
581
+ }
582
+ println ("https://" + lis .Addr ().String ())
583
+ resp , err := client .Get ("https://" + lis .Addr ().String ())
584
+ if err != nil {
585
+ t .Errorf ("client.Get() error = %v" , err )
586
+ return
587
+ }
588
+ defer resp .Body .Close ()
589
+ b , err := ioutil .ReadAll (resp .Body )
590
+ if err != nil {
591
+ t .Errorf ("ioutil.ReadAll() error = %v" , err )
592
+ return
593
+ }
594
+ if string (b ) != "ok" {
595
+ t .Errorf ("client.Get() = %s, want ok" , string (b ))
596
+ return
597
+ }
598
+ })
599
+ }
600
+ }
0 commit comments