/
api_op_TestPayloadBlob_test.go
148 lines (144 loc) · 4.54 KB
/
api_op_TestPayloadBlob_test.go
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
// Code generated by smithy-go-codegen DO NOT EDIT.
package awsrestjson
import (
"bytes"
"context"
"github.com/aws/aws-sdk-go-v2/aws"
awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http"
"github.com/aws/smithy-go/middleware"
"github.com/aws/smithy-go/ptr"
smithyrand "github.com/aws/smithy-go/rand"
smithytesting "github.com/aws/smithy-go/testing"
"io"
"io/ioutil"
"net/http"
"net/http/httptest"
"net/url"
"strconv"
"testing"
)
func TestClient_TestPayloadBlob_awsRestjson1Serialize(t *testing.T) {
cases := map[string]struct {
Params *TestPayloadBlobInput
ExpectMethod string
ExpectURIPath string
ExpectQuery []smithytesting.QueryItem
RequireQuery []string
ForbidQuery []string
ExpectHeader http.Header
RequireHeader []string
ForbidHeader []string
Host *url.URL
BodyMediaType string
BodyAssert func(io.Reader) error
}{
// Serializes a payload targeting an empty blob
"RestJsonHttpWithEmptyBlobPayload": {
Params: &TestPayloadBlobInput{},
ExpectMethod: "POST",
ExpectURIPath: "/blob_payload",
ExpectQuery: []smithytesting.QueryItem{},
ExpectHeader: http.Header{
"Content-Type": []string{"application/octet-stream"},
},
BodyMediaType: "application/octet-stream",
BodyAssert: func(actual io.Reader) error {
return smithytesting.CompareReaderEmpty(actual)
},
},
// Serializes a payload targeting a blob
"RestJsonTestPayloadBlob": {
Params: &TestPayloadBlobInput{
ContentType: ptr.String("image/jpg"),
Data: []byte("1234"),
},
ExpectMethod: "POST",
ExpectURIPath: "/blob_payload",
ExpectQuery: []smithytesting.QueryItem{},
ExpectHeader: http.Header{
"Content-Type": []string{"image/jpg"},
},
RequireHeader: []string{
"Content-Length",
},
BodyMediaType: "image/jpg",
BodyAssert: func(actual io.Reader) error {
return smithytesting.CompareReaderBytes(actual, []byte(`1234`))
},
},
}
for name, c := range cases {
t.Run(name, func(t *testing.T) {
var actualReq *http.Request
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
actualReq = r.Clone(r.Context())
if len(actualReq.URL.RawPath) == 0 {
actualReq.URL.RawPath = actualReq.URL.Path
}
if v := actualReq.ContentLength; v != 0 {
actualReq.Header.Set("Content-Length", strconv.FormatInt(v, 10))
}
var buf bytes.Buffer
if _, err := io.Copy(&buf, r.Body); err != nil {
t.Errorf("failed to read request body, %v", err)
}
actualReq.Body = ioutil.NopCloser(&buf)
w.WriteHeader(200)
}))
defer server.Close()
serverURL := server.URL
if c.Host != nil {
u, err := url.Parse(serverURL)
if err != nil {
t.Fatalf("expect no error, got %v", err)
}
u.Path = c.Host.Path
u.RawPath = c.Host.RawPath
u.RawQuery = c.Host.RawQuery
serverURL = u.String()
}
client := New(Options{
APIOptions: []func(*middleware.Stack) error{
func(s *middleware.Stack) error {
s.Finalize.Clear()
s.Initialize.Remove(`OperationInputValidation`)
return nil
},
},
EndpointResolver: EndpointResolverFunc(func(region string, options EndpointResolverOptions) (e aws.Endpoint, err error) {
e.URL = serverURL
e.SigningRegion = "us-west-2"
return e, err
}),
HTTPClient: awshttp.NewBuildableClient(),
IdempotencyTokenProvider: smithyrand.NewUUIDIdempotencyToken(&smithytesting.ByteLoop{}),
Region: "us-west-2",
})
result, err := client.TestPayloadBlob(context.Background(), c.Params)
if err != nil {
t.Fatalf("expect nil err, got %v", err)
}
if result == nil {
t.Fatalf("expect not nil result")
}
if e, a := c.ExpectMethod, actualReq.Method; e != a {
t.Errorf("expect %v method, got %v", e, a)
}
if e, a := c.ExpectURIPath, actualReq.URL.RawPath; e != a {
t.Errorf("expect %v path, got %v", e, a)
}
queryItems := smithytesting.ParseRawQuery(actualReq.URL.RawQuery)
smithytesting.AssertHasQuery(t, c.ExpectQuery, queryItems)
smithytesting.AssertHasQueryKeys(t, c.RequireQuery, queryItems)
smithytesting.AssertNotHaveQueryKeys(t, c.ForbidQuery, queryItems)
smithytesting.AssertHasHeader(t, c.ExpectHeader, actualReq.Header)
smithytesting.AssertHasHeaderKeys(t, c.RequireHeader, actualReq.Header)
smithytesting.AssertNotHaveHeaderKeys(t, c.ForbidHeader, actualReq.Header)
if c.BodyAssert != nil {
if err := c.BodyAssert(actualReq.Body); err != nil {
t.Errorf("expect body equal, got %v", err)
}
}
})
}
}