19 #include <gmock/gmock.h>
30 const char* kAmzTestAccessKeyId =
"ASIARD4OQDT6A77FR3CL";
31 const char* kAmzTestSecretAccessKey =
32 "Y8AfSaucF37G4PpvfguKZ3/l7Id4uocLXxX0+VTx";
33 const char* kAmzTestToken =
34 "IQoJb3JpZ2luX2VjEIz//////////wEaCXVzLWVhc3QtMiJGMEQCIH7MHX/Oy/"
35 "OB8OlLQa9GrqU1B914+iMikqWQW7vPCKlgAiA/"
36 "Lsv8Jcafn14owfxXn95FURZNKaaphj0ykpmS+Ki+"
37 "CSq0AwhlEAAaDDA3NzA3MTM5MTk5NiIMx9sAeP1ovlMTMKLjKpEDwuJQg41/"
38 "QUKx0laTZYjPlQvjwSqS3OB9P1KAXPWSLkliVMMqaHqelvMF/WO/"
39 "glv3KwuTfQsavRNs3v5pcSEm4SPO3l7mCs7KrQUHwGP0neZhIKxEXy+Ls//1C/"
40 "Bqt53NL+LSbaGv6RPHaX82laz2qElphg95aVLdYgIFY6JWV5fzyjgnhz0DQmy62/"
42 "VnxeCQ8CC8dRDSt52ry2v+nc77vstuI9xV5k8mPtnaPoJDRANh0bjwY5Sdwkbp+"
43 "mGRUJBAQRlNgHUJusefXQgVKBCiyJY4w3Csd8Bgj9IyDV+"
44 "Azuy1jQqfFZWgP68LSz5bURyIjlWDQunO82stZ0BgplKKAa/"
45 "KJHBPCp8Qi6i99uy7qh76FQAqgVTsnDuU6fGpHDcsDSGoCls2HgZjZFPeOj8mmRhFk1Xqvkb"
46 "juz8V1cJk54d3gIJvQt8gD2D6yJQZecnuGWd5K2e2HohvCc8Fc9kBl1300nUJPV+k4tr/"
48 "k5lf1g9CREnrM8LVkGxCgdYMxLQow1uTL+QU67AHRRSp5PhhGX4Rek+"
49 "01vdYSnJCMaPhSEgcLqDlQkhk6MPsyT91QMXcWmyO+cAZwUPwnRamFepuP4K8k2KVXs/"
50 "LIJHLELwAZ0ekyaS7CptgOqS7uaSTFG3U+vzFZLEnGvWQ7y9IPNQZ+"
51 "Dffgh4p3vF4J68y9049sI6Sr5d5wbKkcbm8hdCDHZcv4lnqohquPirLiFQ3q7B17V9krMPu3"
53 "E09NTsxAqD8NcZ7C7ECom9r+"
54 "X3zkDOxaajW6hu3Az8hGlyylDaMiFfRbBJpTIlxp7jfa7CxikNgNtEKLH9iCzvuSg2vhA==";
55 const char* kAmzTestDate =
"20200811T065522Z";
59 const char* kBotoTestAccessKeyId =
"AKIDEXAMPLE";
60 const char* kBotoTestSecretAccessKey =
61 "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY";
62 const char* kBotoTestToken =
"";
63 const char* kBotoTestDate =
"Mon, 09 Sep 2011 23:36:00 GMT";
68 TEST(GrpcAwsRequestSignerTest, AWSOfficialExample) {
71 "AKIDEXAMPLE",
"wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY",
"",
"GET",
72 "https://iam.amazonaws.com/?Action=ListUsers&Version=2010-05-08",
74 {{
"content-type",
"application/x-www-form-urlencoded; charset=utf-8"},
75 {
"x-amz-date",
"20150830T123600Z"}},
78 EXPECT_EQ(signer.GetSignedRequestHeaders()[
"Authorization"],
80 "Credential=AKIDEXAMPLE/20150830/us-east-1/iam/aws4_request, "
81 "SignedHeaders=content-type;host;x-amz-date, "
83 "5d672d79c15b13162d9279b0855cfba6789a8edb4c82c400e06b5924a6f2b5d7");
86 TEST(GrpcAwsRequestSignerTest, GetDescribeRegions) {
89 kAmzTestAccessKeyId, kAmzTestSecretAccessKey, kAmzTestToken,
"GET",
91 "ec2.us-east-2.amazonaws.com?Action=DescribeRegions&Version=2013-10-15",
92 "us-east-2",
"", {{
"x-amz-date", kAmzTestDate}}, &
error);
95 signer.GetSignedRequestHeaders()[
"Authorization"],
97 "Credential=ASIARD4OQDT6A77FR3CL/20200811/us-east-2/ec2/aws4_request, "
98 "SignedHeaders=host;x-amz-date;x-amz-security-token, "
100 "631ea80cddfaa545fdadb120dc92c9f18166e38a5c47b50fab9fce476e022855");
103 TEST(GrpcAwsRequestSignerTest, PostGetCallerIdentity) {
106 kAmzTestAccessKeyId, kAmzTestSecretAccessKey, kAmzTestToken,
"POST",
108 "sts.us-east-2.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15",
109 "us-east-2",
"", {{
"x-amz-date", kAmzTestDate}}, &
error);
112 signer.GetSignedRequestHeaders()[
"Authorization"],
114 "Credential=ASIARD4OQDT6A77FR3CL/20200811/us-east-2/sts/aws4_request, "
115 "SignedHeaders=host;x-amz-date;x-amz-security-token, "
117 "73452984e4a880ffdc5c392355733ec3f5ba310d5e0609a89244440cadfe7a7a");
120 TEST(GrpcAwsRequestSignerTest, PostGetCallerIdentityNoToken) {
123 kAmzTestAccessKeyId, kAmzTestSecretAccessKey,
"",
"POST",
125 "sts.us-east-2.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15",
126 "us-east-2",
"", {{
"x-amz-date", kAmzTestDate}}, &
error);
129 signer.GetSignedRequestHeaders()[
"Authorization"],
131 "Credential=ASIARD4OQDT6A77FR3CL/20200811/us-east-2/sts/aws4_request, "
132 "SignedHeaders=host;x-amz-date, "
134 "d095ba304919cd0d5570ba8a3787884ee78b860f268ed040ba23831d55536d56");
137 TEST(GrpcAwsRequestSignerTest, GetHost) {
140 kBotoTestSecretAccessKey, kBotoTestToken,
141 "GET",
"https://host.foo.com",
"us-east-1",
142 "", {{
"date", kBotoTestDate}}, &
error);
144 EXPECT_EQ(signer.GetSignedRequestHeaders()[
"Authorization"],
146 "Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, "
147 "SignedHeaders=date;host, "
149 "b27ccfbfa7df52a200ff74193ca6e32d4b48b8856fab7ebf1c595d0670a7e470");
152 TEST(GrpcAwsRequestSignerTest, GetHostDuplicateQueryParam) {
155 kBotoTestAccessKeyId, kBotoTestSecretAccessKey, kBotoTestToken,
"GET",
156 "https://host.foo.com/?foo=Zoo&foo=aha",
"us-east-1",
"",
157 {{
"date", kBotoTestDate}}, &
error);
159 EXPECT_EQ(signer.GetSignedRequestHeaders()[
"Authorization"],
161 "Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, "
162 "SignedHeaders=date;host, "
164 "be7148d34ebccdc6423b19085378aa0bee970bdc61d144bd1a8c48c33079ab09");
167 TEST(GrpcAwsRequestSignerTest, PostWithUpperCaseHeaderKey) {
170 kBotoTestAccessKeyId, kBotoTestSecretAccessKey, kBotoTestToken,
"POST",
171 "https://host.foo.com/",
"us-east-1",
"",
172 {{
"date", kBotoTestDate}, {
"ZOO",
"zoobar"}}, &
error);
174 EXPECT_EQ(signer.GetSignedRequestHeaders()[
"Authorization"],
176 "Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, "
177 "SignedHeaders=date;host;zoo, "
179 "b7a95a52518abbca0964a999a880429ab734f35ebbf1235bd79a5de87756dc4a");
182 TEST(GrpcAwsRequestSignerTest, PostWithUpperCaseHeaderValue) {
185 kBotoTestAccessKeyId, kBotoTestSecretAccessKey, kBotoTestToken,
"POST",
186 "https://host.foo.com/",
"us-east-1",
"",
187 {{
"date", kBotoTestDate}, {
"zoo",
"ZOOBAR"}}, &
error);
189 EXPECT_EQ(signer.GetSignedRequestHeaders()[
"Authorization"],
191 "Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, "
192 "SignedHeaders=date;host;zoo, "
194 "273313af9d0c265c531e11db70bbd653f3ba074c1009239e8559d3987039cad7");
197 TEST(GrpcAwsRequestSignerTest, SignPostWithHeader) {
200 kBotoTestAccessKeyId, kBotoTestSecretAccessKey, kBotoTestToken,
"POST",
201 "https://host.foo.com/",
"us-east-1",
"",
202 {{
"date", kBotoTestDate}, {
"p",
"phfft"}}, &
error);
204 EXPECT_EQ(signer.GetSignedRequestHeaders()[
"Authorization"],
206 "Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, "
207 "SignedHeaders=date;host;p, "
209 "debf546796015d6f6ded8626f5ce98597c33b47b9164cf6b17b4642036fcb592");
212 TEST(GrpcAwsRequestSignerTest, PostWithBodyNoCustomHeaders) {
215 kBotoTestAccessKeyId, kBotoTestSecretAccessKey, kBotoTestToken,
"POST",
216 "https://host.foo.com/",
"us-east-1",
"foo=bar",
217 {{
"date", kBotoTestDate},
218 {
"Content-Type",
"application/x-www-form-urlencoded"}},
221 EXPECT_EQ(signer.GetSignedRequestHeaders()[
"Authorization"],
223 "Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, "
224 "SignedHeaders=content-type;date;host, "
226 "5a15b22cf462f047318703b92e6f4f38884e4a7ab7b1d6426ca46a8bd1c26cbc");
229 TEST(GrpcAwsRequestSignerTest, SignPostWithQueryString) {
232 kBotoTestAccessKeyId, kBotoTestSecretAccessKey, kBotoTestToken,
"POST",
233 "https://host.foo.com/?foo=bar",
"us-east-1",
"",
234 {{
"date", kBotoTestDate}}, &
error);
236 EXPECT_EQ(signer.GetSignedRequestHeaders()[
"Authorization"],
238 "Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, "
239 "SignedHeaders=date;host, "
241 "b6e3b79003ce0743a491606ba1035a804593b0efb1e20a11cba83f8c25a57a92");
244 TEST(GrpcAwsRequestSignerTest, InvalidUrl) {
247 "token",
"POST",
"invalid_url",
248 "us-east-1",
"", {}, &
error);
251 &actual_error_description));
252 EXPECT_EQ(actual_error_description,
"Invalid Aws request url.");
256 TEST(GrpcAwsRequestSignerTest, DuplicateRequestDate) {
259 "access_key_id",
"secret_access_key",
"token",
"POST",
"invalid_url",
260 "us-east-1",
"", {{
"date", kBotoTestDate}, {
"x-amz-date", kAmzTestDate}},
264 &actual_error_description));
266 "Only one of {date, x-amz-date} can be specified, not both.");
272 int main(
int argc,
char** argv) {