...
1 package bearer
2
3 import (
4 "context"
5 "net/url"
6 "reflect"
7 "strings"
8 "testing"
9
10 smithyhttp "github.com/aws/smithy-go/transport/http"
11 )
12
13 func TestSignHTTPSMessage(t *testing.T) {
14 cases := map[string]struct {
15 message Message
16 token Token
17 expectMessage Message
18 expectErr string
19 }{
20
21 "not smithyhttp.Request": {
22 message: struct{}{},
23 expectErr: "expect smithy-go HTTP Request",
24 },
25 "not https": {
26 message: func() Message {
27 r := smithyhttp.NewStackRequest().(*smithyhttp.Request)
28 r.URL, _ = url.Parse("http://example.aws")
29 return r
30 }(),
31 expectErr: "requires HTTPS",
32 },
33 "success": {
34 message: func() Message {
35 r := smithyhttp.NewStackRequest().(*smithyhttp.Request)
36 r.URL, _ = url.Parse("https://example.aws")
37 return r
38 }(),
39 token: Token{Value: "abc123"},
40 expectMessage: func() Message {
41 r := smithyhttp.NewStackRequest().(*smithyhttp.Request)
42 r.URL, _ = url.Parse("https://example.aws")
43 r.Header.Set("Authorization", "Bearer abc123")
44 return r
45 }(),
46 },
47 }
48
49 for name, c := range cases {
50 t.Run(name, func(t *testing.T) {
51 ctx := context.Background()
52 signer := SignHTTPSMessage{}
53 message, err := signer.SignWithBearerToken(ctx, c.token, c.message)
54 if c.expectErr != "" {
55 if err == nil {
56 t.Fatalf("expect error, got none")
57 }
58 if e, a := c.expectErr, err.Error(); !strings.Contains(a, e) {
59 t.Fatalf("expect %v in error %v", e, a)
60 }
61 return
62 } else if err != nil {
63 t.Fatalf("expect no error, got %v", err)
64 }
65
66 expect := c.expectMessage.(*smithyhttp.Request)
67
68 actual, ok := message.(*smithyhttp.Request)
69 if !ok {
70 t.Fatalf("*smithyhttp.Request != %T", actual)
71 }
72 if !reflect.DeepEqual(expect.Header, actual.Header) {
73 t.Errorf("%v != %v", expect.Header, actual.Header)
74 }
75 })
76 }
77 }
78
View as plain text