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