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
|
package bearer
import (
"context"
"net/url"
"reflect"
"strings"
"testing"
smithyhttp "github.com/aws/smithy-go/transport/http"
)
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)
}
expect := c.expectMessage.(*smithyhttp.Request)
actual, ok := message.(*smithyhttp.Request)
if !ok {
t.Fatalf("*smithyhttp.Request != %T", actual)
}
if !reflect.DeepEqual(expect.Header, actual.Header) {
t.Errorf("%v != %v", expect.Header, actual.Header)
}
})
}
}
|