Skip to content

Commit 15c7e72

Browse files
authored
chore: update signed URL conformance tests
1 parent c7eb4c7 commit 15c7e72

File tree

2 files changed

+161
-56
lines changed

2 files changed

+161
-56
lines changed

google/cloud/storage/tests/signed_url_conformance_test.cc

Lines changed: 49 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,10 @@ TEST_P(V4SignedUrlConformanceTest, V4SignJson) {
151151
}
152152

153153
BucketBoundHostname domain_named_bucket;
154-
if (url_style == "BUCKET_BOUND_DOMAIN") {
155-
domain_named_bucket = BucketBoundHostname(j_obj["bucketBoundDomain"]);
154+
if (url_style == "BUCKET_BOUND_HOSTNAME") {
155+
domain_named_bucket = BucketBoundHostname(j_obj["bucketBoundHostname"]);
156156
request.set_multiple_options(
157-
BucketBoundHostname(j_obj["bucketBoundDomain"]));
157+
BucketBoundHostname(j_obj["bucketBoundHostname"]));
158158
}
159159

160160
auto actual = client.CreateV4SignedUrl(
@@ -239,44 +239,54 @@ int main(int argc, char* argv[]) {
239239
std::cerr << "The provided file should contain one JSON object.\n";
240240
return 1;
241241
}
242-
for (auto& json_array : json.items()) {
243-
if (!json_array.value().is_array()) {
244-
std::cerr << "Expected an obects' value to be arrays, found: "
245-
<< json_array.value() << ".\n";
242+
if (json.count("signingV4Tests") < 1) {
243+
std::cerr << "The provided file should contain a 'signingV4Tests' entry.\n"
244+
<< json;
245+
return 1;
246+
}
247+
248+
auto signing_tests_json = json["signingV4Tests"];
249+
if (!signing_tests_json.is_array()) {
250+
std::cerr << "Expected an obects' value to be arrays, found: "
251+
<< signing_tests_json << ".\n";
252+
return 1;
253+
}
254+
255+
if (!signing_tests_json.is_array()) {
256+
std::cerr << "Expected an obects' value to be arrays, found: "
257+
<< signing_tests_json << ".\n";
258+
return 1;
259+
}
260+
261+
for (auto const& j_obj : signing_tests_json) {
262+
if (!j_obj.is_object()) {
263+
std::cerr << "Expected an array of objects, got this element in array: "
264+
<< j_obj << "\n";
246265
return 1;
247266
}
248-
249-
for (auto const& j_obj : json_array.value()) {
250-
if (!j_obj.is_object()) {
251-
std::cerr << "Expected an array of objects, got this element in array: "
252-
<< j_obj << "\n";
253-
return 1;
254-
}
255-
if (j_obj.count("description") != 1) {
256-
std::cerr << "Expected all tests to have a description\n";
257-
return 1;
258-
}
259-
auto j_descr = j_obj["description"];
260-
if (!j_descr.is_string()) {
261-
std::cerr << "Expected description to be a string, got: " << j_descr
262-
<< "\n";
263-
return 1;
264-
}
265-
std::string name_with_spaces = j_descr;
266-
std::string name;
267-
// gtest doesn't allow for anything other than [a-zA-Z]
268-
std::copy_if(name_with_spaces.begin(), name_with_spaces.end(),
269-
back_inserter(name), [](char c) {
270-
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
271-
});
272-
if (nonconformant_tests.find(name) != nonconformant_tests.end()) {
273-
continue;
274-
}
275-
bool inserted =
276-
google::cloud::storage::tests->emplace(name, j_obj).second;
277-
if (!inserted) {
278-
std::cerr << "Duplicate test description: " << name << "\n";
279-
}
267+
if (j_obj.count("description") != 1) {
268+
std::cerr << "Expected all tests to have a description\n";
269+
return 1;
270+
}
271+
auto j_descr = j_obj["description"];
272+
if (!j_descr.is_string()) {
273+
std::cerr << "Expected description to be a string, got: " << j_descr
274+
<< "\n";
275+
return 1;
276+
}
277+
std::string name_with_spaces = j_descr;
278+
std::string name;
279+
// gtest doesn't allow for anything other than [a-zA-Z]
280+
std::copy_if(name_with_spaces.begin(), name_with_spaces.end(),
281+
back_inserter(name), [](char c) {
282+
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
283+
});
284+
if (nonconformant_tests.find(name) != nonconformant_tests.end()) {
285+
continue;
286+
}
287+
bool inserted = google::cloud::storage::tests->emplace(name, j_obj).second;
288+
if (!inserted) {
289+
std::cerr << "Duplicate test description: " << name << "\n";
280290
}
281291
}
282292
google::cloud::testing_util::InitGoogleMock(argc, argv);

google/cloud/storage/tests/v4_signatures.json

Lines changed: 112 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -243,30 +243,30 @@
243243
"expectedStringToSign": "GOOG4-RSA-SHA256\n20190201T090000Z\n20190201/auto/storage/goog4_request\n89eeae48258eccdcb1f592fb908008e3f5d36a949c002c1e614c94356dc18fc6"
244244
},
245245
{
246-
"description": "HTTP Bucket Bound Domain Support",
246+
"description": "HTTP Bucket Bound Hostname Support",
247247
"bucket": "test-bucket",
248248
"object": "test-object",
249249
"method": "GET",
250250
"expiration": "10",
251251
"timestamp": "2019-02-01T09:00:00Z",
252252
"expectedUrl": "http://mydomain.tld/test-object?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=test-iam-credentials%40dummy-project-id.iam.gserviceaccount.com%2F20190201%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20190201T090000Z&X-Goog-Expires=10&X-Goog-SignedHeaders=host&X-Goog-Signature=7115a77f8c7ed1a8b74bca8b520904fca7f3bab90d69ea052687a94efd9b3a4e2a7fb7135d40e295e0a21958194c55da7e106227957c22ed6edc9d8b3d2a8133bc8af84fc9695dda8081d53f0db5ea9f28e5bfc225d78f873e9f571fd287bb7a95330e726aebd8eb4623cdb0b1a7ceb210b2ce1351b6be0191c2ad7b38f7ceb6c5ce2f98dbfb5a5a649050585e46e97f72f1f5407de657a56e34a3fdc80cdaa0598bd47f3e8af5ff22d0916b19b106890bff8c3f6587f1d3b076b16cd0ba0508607a672be33b9c75d537e15258450b43d22a21c4d528090acbb8e5bae7b31fc394e61394106ef1d6a8ed43074ab05bcec65674cd8113fb3de388da4d97e62f56",
253253
"scheme": "http",
254-
"urlStyle": "BUCKET_BOUND_DOMAIN",
255-
"bucketBoundDomain": "mydomain.tld",
254+
"urlStyle": "BUCKET_BOUND_HOSTNAME",
255+
"bucketBoundHostname": "mydomain.tld",
256256
"expectedCanonicalRequest": "GET\n/test-object\nX-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=test-iam-credentials%40dummy-project-id.iam.gserviceaccount.com%2F20190201%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20190201T090000Z&X-Goog-Expires=10&X-Goog-SignedHeaders=host\nhost:mydomain.tld\n\nhost\nUNSIGNED-PAYLOAD",
257257
"expectedStringToSign": "GOOG4-RSA-SHA256\n20190201T090000Z\n20190201/auto/storage/goog4_request\nd6c309924b51a5abbe4d6356f7bf29c2120c6b14649b1e97b3bc9309adca7d4b"
258258
},
259259
{
260-
"description": "HTTPS Bucket Bound Domain Support",
260+
"description": "HTTPS Bucket Bound Hostname Support",
261261
"bucket": "test-bucket",
262262
"object": "test-object",
263263
"method": "GET",
264264
"expiration": "10",
265265
"timestamp": "2019-02-01T09:00:00Z",
266266
"expectedUrl": "https://mydomain.tld/test-object?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=test-iam-credentials%40dummy-project-id.iam.gserviceaccount.com%2F20190201%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20190201T090000Z&X-Goog-Expires=10&X-Goog-SignedHeaders=host&X-Goog-Signature=7115a77f8c7ed1a8b74bca8b520904fca7f3bab90d69ea052687a94efd9b3a4e2a7fb7135d40e295e0a21958194c55da7e106227957c22ed6edc9d8b3d2a8133bc8af84fc9695dda8081d53f0db5ea9f28e5bfc225d78f873e9f571fd287bb7a95330e726aebd8eb4623cdb0b1a7ceb210b2ce1351b6be0191c2ad7b38f7ceb6c5ce2f98dbfb5a5a649050585e46e97f72f1f5407de657a56e34a3fdc80cdaa0598bd47f3e8af5ff22d0916b19b106890bff8c3f6587f1d3b076b16cd0ba0508607a672be33b9c75d537e15258450b43d22a21c4d528090acbb8e5bae7b31fc394e61394106ef1d6a8ed43074ab05bcec65674cd8113fb3de388da4d97e62f56",
267267
"scheme": "https",
268-
"urlStyle": "BUCKET_BOUND_DOMAIN",
269-
"bucketBoundDomain": "mydomain.tld",
268+
"urlStyle": "BUCKET_BOUND_HOSTNAME",
269+
"bucketBoundHostname": "mydomain.tld",
270270
"expectedCanonicalRequest": "GET\n/test-object\nX-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=test-iam-credentials%40dummy-project-id.iam.gserviceaccount.com%2F20190201%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20190201T090000Z&X-Goog-Expires=10&X-Goog-SignedHeaders=host\nhost:mydomain.tld\n\nhost\nUNSIGNED-PAYLOAD",
271271
"expectedStringToSign": "GOOG4-RSA-SHA256\n20190201T090000Z\n20190201/auto/storage/goog4_request\nd6c309924b51a5abbe4d6356f7bf29c2120c6b14649b1e97b3bc9309adca7d4b"
272272
}
@@ -294,6 +294,77 @@
294294
"expectedDecodedPolicy": "{\"conditions\":[{\"key\":\"test-object\"},{\"x-goog-date\":\"20200123T043530Z\"},{\"x-goog-credential\":\"[email protected]/20200123/auto/storage/goog4_request\"},{\"x-goog-algorithm\":\"GOOG4-RSA-SHA256\"}],\"expiration\":\"2020-01-23T04:35:40Z\"}"
295295
}
296296
},
297+
{
298+
"description": "POST Policy Simple Virtual Hosted Style",
299+
"policyInput": {
300+
"scheme": "https",
301+
"urlStyle": "VIRTUAL_HOSTED_STYLE",
302+
"bucket": "rsaposttest-1579902670-h3q7wvodjor6bc7y",
303+
"object": "test-object",
304+
"expiration": 10,
305+
"timestamp": "2020-01-23T04:35:30Z"
306+
},
307+
"policyOutput": {
308+
"url": "https://rsaposttest-1579902670-h3q7wvodjor6bc7y.storage.googleapis.com/",
309+
"fields" : {
310+
"key": "test-object",
311+
"x-goog-algorithm": "GOOG4-RSA-SHA256",
312+
"x-goog-credential": "[email protected]/20200123/auto/storage/goog4_request",
313+
"x-goog-date": "20200123T043530Z",
314+
"x-goog-signature": "2821a23ca8886ae9e9d67e8c094c06626a733f373cdca76d9d8c325e60ed8237b500b2f39937a15a1ebbdef7ed156fe3f41bc3456d453bb68d6755872eb429c329ae4e0dfb5e0abef4ca976394430ad7b3d1f14e50f6040c2cf81a2880980c26f9aeb800a674fc834b0e21e414adc3d1a0835da64107cce6a14bd2b39b4d6627029f821009e15ff3a7538ddc27dcf8c189ed197d25d50f0bddf58f99e0265adf562fff7f6689faba60920d73e6a6704c3d2be34a424766398396c55d3680f8dfd19513e2861fa4efa7ae99001877f043567132d413dc3c69e04a7ef5d30a325c2f9bc64e19dd6f0576781e546383378e7a4f2904411ee32d5c5a763683333dd7",
315+
"policy": "eyJjb25kaXRpb25zIjpbeyJrZXkiOiJ0ZXN0LW9iamVjdCJ9LHsieC1nb29nLWRhdGUiOiIyMDIwMDEyM1QwNDM1MzBaIn0seyJ4LWdvb2ctY3JlZGVudGlhbCI6InRlc3QtaWFtLWNyZWRlbnRpYWxzQGR1bW15LXByb2plY3QtaWQuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20vMjAyMDAxMjMvYXV0by9zdG9yYWdlL2dvb2c0X3JlcXVlc3QifSx7IngtZ29vZy1hbGdvcml0aG0iOiJHT09HNC1SU0EtU0hBMjU2In1dLCJleHBpcmF0aW9uIjoiMjAyMC0wMS0yM1QwNDozNTo0MFoifQ=="
316+
},
317+
"expectedDecodedPolicy": "{\"conditions\":[{\"key\":\"test-object\"},{\"x-goog-date\":\"20200123T043530Z\"},{\"x-goog-credential\":\"[email protected]/20200123/auto/storage/goog4_request\"},{\"x-goog-algorithm\":\"GOOG4-RSA-SHA256\"}],\"expiration\":\"2020-01-23T04:35:40Z\"}"
318+
}
319+
},
320+
{
321+
"description": "POST Policy Simple Bucket Bound Hostname",
322+
"policyInput": {
323+
"scheme": "https",
324+
"urlStyle": "BUCKET_BOUND_HOSTNAME",
325+
"bucketBoundHostname": "mydomain.tld",
326+
"bucket": "rsaposttest-1579902670-h3q7wvodjor6bc7y",
327+
"object": "test-object",
328+
"expiration": 10,
329+
"timestamp": "2020-01-23T04:35:30Z"
330+
},
331+
"policyOutput": {
332+
"url": "https://mydomain.tld/",
333+
"fields" : {
334+
"key": "test-object",
335+
"x-goog-algorithm": "GOOG4-RSA-SHA256",
336+
"x-goog-credential": "[email protected]/20200123/auto/storage/goog4_request",
337+
"x-goog-date": "20200123T043530Z",
338+
"x-goog-signature": "2821a23ca8886ae9e9d67e8c094c06626a733f373cdca76d9d8c325e60ed8237b500b2f39937a15a1ebbdef7ed156fe3f41bc3456d453bb68d6755872eb429c329ae4e0dfb5e0abef4ca976394430ad7b3d1f14e50f6040c2cf81a2880980c26f9aeb800a674fc834b0e21e414adc3d1a0835da64107cce6a14bd2b39b4d6627029f821009e15ff3a7538ddc27dcf8c189ed197d25d50f0bddf58f99e0265adf562fff7f6689faba60920d73e6a6704c3d2be34a424766398396c55d3680f8dfd19513e2861fa4efa7ae99001877f043567132d413dc3c69e04a7ef5d30a325c2f9bc64e19dd6f0576781e546383378e7a4f2904411ee32d5c5a763683333dd7",
339+
"policy": "eyJjb25kaXRpb25zIjpbeyJrZXkiOiJ0ZXN0LW9iamVjdCJ9LHsieC1nb29nLWRhdGUiOiIyMDIwMDEyM1QwNDM1MzBaIn0seyJ4LWdvb2ctY3JlZGVudGlhbCI6InRlc3QtaWFtLWNyZWRlbnRpYWxzQGR1bW15LXByb2plY3QtaWQuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20vMjAyMDAxMjMvYXV0by9zdG9yYWdlL2dvb2c0X3JlcXVlc3QifSx7IngtZ29vZy1hbGdvcml0aG0iOiJHT09HNC1SU0EtU0hBMjU2In1dLCJleHBpcmF0aW9uIjoiMjAyMC0wMS0yM1QwNDozNTo0MFoifQ=="
340+
},
341+
"expectedDecodedPolicy": "{\"conditions\":[{\"key\":\"test-object\"},{\"x-goog-date\":\"20200123T043530Z\"},{\"x-goog-credential\":\"[email protected]/20200123/auto/storage/goog4_request\"},{\"x-goog-algorithm\":\"GOOG4-RSA-SHA256\"}],\"expiration\":\"2020-01-23T04:35:40Z\"}"
342+
}
343+
},
344+
{
345+
"description": "POST Policy Simple Bucket Bound Hostname HTTP",
346+
"policyInput": {
347+
"scheme": "http",
348+
"urlStyle": "BUCKET_BOUND_HOSTNAME",
349+
"bucketBoundHostname": "mydomain.tld",
350+
"bucket": "rsaposttest-1579902670-h3q7wvodjor6bc7y",
351+
"object": "test-object",
352+
"expiration": 10,
353+
"timestamp": "2020-01-23T04:35:30Z"
354+
},
355+
"policyOutput": {
356+
"url": "http://mydomain.tld/",
357+
"fields" : {
358+
"key": "test-object",
359+
"x-goog-algorithm": "GOOG4-RSA-SHA256",
360+
"x-goog-credential": "[email protected]/20200123/auto/storage/goog4_request",
361+
"x-goog-date": "20200123T043530Z",
362+
"x-goog-signature": "2821a23ca8886ae9e9d67e8c094c06626a733f373cdca76d9d8c325e60ed8237b500b2f39937a15a1ebbdef7ed156fe3f41bc3456d453bb68d6755872eb429c329ae4e0dfb5e0abef4ca976394430ad7b3d1f14e50f6040c2cf81a2880980c26f9aeb800a674fc834b0e21e414adc3d1a0835da64107cce6a14bd2b39b4d6627029f821009e15ff3a7538ddc27dcf8c189ed197d25d50f0bddf58f99e0265adf562fff7f6689faba60920d73e6a6704c3d2be34a424766398396c55d3680f8dfd19513e2861fa4efa7ae99001877f043567132d413dc3c69e04a7ef5d30a325c2f9bc64e19dd6f0576781e546383378e7a4f2904411ee32d5c5a763683333dd7",
363+
"policy": "eyJjb25kaXRpb25zIjpbeyJrZXkiOiJ0ZXN0LW9iamVjdCJ9LHsieC1nb29nLWRhdGUiOiIyMDIwMDEyM1QwNDM1MzBaIn0seyJ4LWdvb2ctY3JlZGVudGlhbCI6InRlc3QtaWFtLWNyZWRlbnRpYWxzQGR1bW15LXByb2plY3QtaWQuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20vMjAyMDAxMjMvYXV0by9zdG9yYWdlL2dvb2c0X3JlcXVlc3QifSx7IngtZ29vZy1hbGdvcml0aG0iOiJHT09HNC1SU0EtU0hBMjU2In1dLCJleHBpcmF0aW9uIjoiMjAyMC0wMS0yM1QwNDozNTo0MFoifQ=="
364+
},
365+
"expectedDecodedPolicy": "{\"conditions\":[{\"key\":\"test-object\"},{\"x-goog-date\":\"20200123T043530Z\"},{\"x-goog-credential\":\"[email protected]/20200123/auto/storage/goog4_request\"},{\"x-goog-algorithm\":\"GOOG4-RSA-SHA256\"}],\"expiration\":\"2020-01-23T04:35:40Z\"}"
366+
}
367+
},
297368
{
298369
"description": "POST Policy ACL matching",
299370
"policyInput": {
@@ -303,9 +374,7 @@
303374
"expiration": 10,
304375
"timestamp": "2020-01-23T04:35:30Z",
305376
"conditions": {
306-
"matches": [{
307-
"expression": ["startsWith", "$acl", "public"]
308-
}]
377+
"startsWith": ["$acl", "public"]
309378
}
310379
},
311380
"policyOutput": {
@@ -330,9 +399,7 @@
330399
"expiration": 10,
331400
"timestamp": "2020-01-23T04:35:30Z",
332401
"conditions": {
333-
"matches": [{
334-
"expression": ["content-length-range", "246", "266"]
335-
}]
402+
"contentLengthRange": [246, 266]
336403
}
337404
},
338405
"policyOutput": {
@@ -356,7 +423,7 @@
356423
"object": "test-object",
357424
"expiration": 10,
358425
"timestamp": "2020-01-23T04:35:30Z",
359-
"headers": {
426+
"fields": {
360427
"acl": "public-read",
361428
"cache-control": "public,max-age=86400"
362429
}
@@ -384,8 +451,8 @@
384451
"object": "test-object",
385452
"expiration": 10,
386453
"timestamp": "2020-01-23T04:35:30Z",
387-
"conditions": {
388-
"successActionStatus": "200"
454+
"fields": {
455+
"success_action_status": "200"
389456
}
390457
},
391458
"policyOutput": {
@@ -410,8 +477,8 @@
410477
"object": "test-object",
411478
"expiration": 10,
412479
"timestamp": "2020-01-23T04:35:30Z",
413-
"conditions": {
414-
"successActionRedirect": "http://www.google.com/"
480+
"fields": {
481+
"success_action_redirect": "http://www.google.com/"
415482
}
416483
},
417484
"policyOutput": {
@@ -427,6 +494,34 @@
427494
},
428495
"expectedDecodedPolicy": "{\"conditions\":[{\"success_action_redirect\":\"http://www.google.com/\"},{\"key\":\"test-object\"},{\"x-goog-date\":\"20200123T043530Z\"},{\"x-goog-credential\":\"[email protected]/20200123/auto/storage/goog4_request\"},{\"x-goog-algorithm\":\"GOOG4-RSA-SHA256\"}],\"expiration\":\"2020-01-23T04:35:40Z\"}"
429496
}
497+
},
498+
{
499+
"description": "POST Policy Character Escaping",
500+
"policyInput": {
501+
"scheme": "https",
502+
"bucket": "rsaposttest-1579902671-6ldm6caw4se52vrx",
503+
"object": "$test-object-é",
504+
"expiration": 10,
505+
"timestamp": "2020-01-23T04:35:30Z",
506+
"fields": {
507+
"success_action_redirect": "http://www.google.com/",
508+
"x-goog-meta": "$test-object-é-metadata"
509+
}
510+
},
511+
"policyOutput": {
512+
"url": "https://storage.googleapis.com/rsaposttest-1579902671-6ldm6caw4se52vrx/",
513+
"fields" : {
514+
"key": "$test-object-é",
515+
"success_action_redirect": "http://www.google.com/",
516+
"x-goog-meta": "$test-object-é-metadata",
517+
"x-goog-algorithm": "GOOG4-RSA-SHA256",
518+
"x-goog-credential": "[email protected]/20200123/auto/storage/goog4_request",
519+
"x-goog-date": "20200123T043530Z",
520+
"x-goog-signature": "05eb19ea4ece513cbb2bc6a92c9bc82de6be46943fb4703df3f7b26e6033f90a194e2444e6c3166e9585ca468b5727702aa2696e5cca54677c047f7734119ea0d635404d6a5e577b737ffd5414059cd1b508aa99cfad592d9228f1bf47d7df3ffd73bcae6af6d8d83f7f50b4ccbf6e6c0798d2d9923a7e18c8888e2519fcf09d174b7015581a7de021964eeb9d27293213686d80d825332819c4e98d4ab2c5237f352840993e22a02a41d827ce6a4a294e84a33bf051519fdcbf982f2ad932f58714608c4b5a1f89d5e322d194f5e29fa4160fce771008320ac4e659adeead36aa07fe26a96e52e809436b7bd169256d6613c135148fdee6926caaef65817dc2",
521+
"policy": "eyJjb25kaXRpb25zIjpbeyJzdWNjZXNzX2FjdGlvbl9yZWRpcmVjdCI6Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8ifSx7IngtZ29vZy1tZXRhIjoiJHRlc3Qtb2JqZWN0LVx1MDBlOS1tZXRhZGF0YSJ9LHsia2V5IjoiJHRlc3Qtb2JqZWN0LVx1MDBlOSJ9LHsieC1nb29nLWRhdGUiOiIyMDIwMDEyM1QwNDM1MzBaIn0seyJ4LWdvb2ctY3JlZGVudGlhbCI6InRlc3QtaWFtLWNyZWRlbnRpYWxzQGR1bW15LXByb2plY3QtaWQuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20vMjAyMDAxMjMvYXV0by9zdG9yYWdlL2dvb2c0X3JlcXVlc3QifSx7IngtZ29vZy1hbGdvcml0aG0iOiJHT09HNC1SU0EtU0hBMjU2In1dLCJleHBpcmF0aW9uIjoiMjAyMC0wMS0yM1QwNDozNTo0MFoifQ=="
522+
},
523+
"expectedDecodedPolicy": "{\"conditions\":[{\"success_action_redirect\":\"http://www.google.com/\"},{\"x-goog-meta\":\"$test-object-\u00e9-metadata\"},{\"key\":\"$test-object-\u00e9\"},{\"x-goog-date\":\"20200123T043530Z\"},{\"x-goog-credential\":\"[email protected]/20200123/auto/storage/goog4_request\"},{\"x-goog-algorithm\":\"GOOG4-RSA-SHA256\"}],\"expiration\":\"2020-01-23T04:35:40Z\"}"
524+
}
430525
}
431526
]
432527
}

0 commit comments

Comments
 (0)