-
Notifications
You must be signed in to change notification settings - Fork 400
(NOT FOR SUBMISSION) Proof of concept of Storage conformance tests #2954
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
e0fdb5b
22b531c
5cfde4a
387df71
d9ee6a1
536c0ed
7717191
b49ea48
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,23 +1,14 @@ | ||
| env: | ||
| - API_REGEX='Google\.Cloud\.[A-L].*' | ||
| - API_REGEX='Google\.Cloud\.[M-Z].*' | ||
| # List non-Cloud APIs here | ||
| - API_REGEX='Google\.LongRunning' | ||
| language: csharp | ||
| mono: none | ||
| dotnet: 2.2.104 | ||
| dist: xenial | ||
|
|
||
| # Install the .NET Core 1.0 runtime as that's what we test against | ||
| addons: | ||
| apt: | ||
| sources: | ||
| - sourceline: 'deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main' | ||
| key_url: 'https://packages.microsoft.com/keys/microsoft.asc' | ||
| packages: | ||
| - dotnet-sharedframework-microsoft.netcore.app-1.0.5 | ||
|
|
||
| script: | ||
| - touch build_timing_log.txt | ||
| - ./build.sh --diff --regex $API_REGEX | ||
| - ./processbuildtiminglog.sh | ||
| - curl -L https://www.nuget.org/api/v2/package/Google.Protobuf.Tools/3.7.0 --output Google.Protobuf.Tools.3.7.0.nupkg | ||
| - unzip -d protobuf Google.Protobuf.Tools.3.7.0.nupkg | ||
| - chmod +x protobuf/tools/linux_x64/protoc | ||
| - protobuf/tools/linux_x64/protoc -I protobuf/tools -I storage/v1 --csharp_out=storage/v1/validation/ storage/v1/test.proto | ||
| - dotnet build storage/v1/validation | ||
| - dotnet run -p storage/v1/validation -- storage/v1/*.json | ||
|
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,113 @@ | ||
| { | ||
| "signingV4Tests": [ | ||
| { | ||
| "description": "Simple GET", | ||
| "bucket": "test-bucket", | ||
| "object": "test-object", | ||
| "method": "GET", | ||
| "expiration": "10", | ||
| "timestamp": "2019-02-01T09:00:00Z", | ||
| "expectedUrl": "https://storage.googleapis.com/test-bucket/test-object?X-Goog-Algorithm=GOOG4-RSA-SHA256\u0026X-Goog-Credential=test-iam-credentials%40dummy-project-id.iam.gserviceaccount.com%2F20190201%2Fauto%2Fstorage%2Fgoog4_request\u0026X-Goog-Date=20190201T090000Z\u0026X-Goog-Expires=10\u0026X-Goog-SignedHeaders=host\u0026X-Goog-Signature=95e6a13d43a1d1962e667f17397f2b80ac9bdd1669210d5e08e0135df9dff4e56113485dbe429ca2266487b9d1796ebdee2d7cf682a6ef3bb9fbb4c351686fba90d7b621cf1c4eb1fdf126460dd25fa0837dfdde0a9fd98662ce60844c458448fb2b352c203d9969cb74efa4bdb742287744a4f2308afa4af0e0773f55e32e92973619249214b97283b2daa14195244444e33f938138d1e5f561088ce8011f4986dda33a556412594db7c12fc40e1ff3f1bedeb7a42f5bcda0b9567f17f65855f65071fabb88ea12371877f3f77f10e1466fff6ff6973b74a933322ff0949ce357e20abe96c3dd5cfab42c9c83e740a4d32b9e11e146f0eb3404d2e975896f74" | ||
| }, | ||
| { | ||
| "description": "Simple PUT", | ||
| "bucket": "test-bucket", | ||
| "object": "test-object", | ||
| "method": "PUT", | ||
| "expiration": "10", | ||
| "timestamp": "2019-02-01T09:00:00Z", | ||
| "expectedUrl": "https://storage.googleapis.com/test-bucket/test-object?X-Goog-Algorithm=GOOG4-RSA-SHA256\u0026X-Goog-Credential=test-iam-credentials%40dummy-project-id.iam.gserviceaccount.com%2F20190201%2Fauto%2Fstorage%2Fgoog4_request\u0026X-Goog-Date=20190201T090000Z\u0026X-Goog-Expires=10\u0026X-Goog-SignedHeaders=host\u0026X-Goog-Signature=8adff1d4285739e31aa68e73767a46bc5511fde377497dbe08481bf5ceb34e29cc9a59921748d8ec3dd4085b7e9b7772a952afedfcdaecb3ae8352275b8b7c867f204e3db85076220a3127a8a9589302fc1181eae13b9b7fe41109ec8cdc93c1e8bac2d7a0cc32a109ca02d06957211326563ab3d3e678a0ba296e298b5fc5e14593c99d444c94724cc4be97015dbff1dca377b508fa0cb7169195de98d0e4ac96c42b918d28c8d92d33e1bd125ce0fb3cd7ad2c45dae65c22628378f6584971b8bf3945b26f2611eb651e9b6a8648970c1ecf386bb71327b082e7296c4e1ee2fc0bdd8983da80af375c817fb1ad491d0bc22c0f51dba0d66e2cffbc90803e47" | ||
| }, | ||
| { | ||
| "description": "POST for resumable uploads", | ||
| "bucket": "test-bucket", | ||
| "object": "test-object", | ||
| "method": "POST", | ||
| "expiration": "10", | ||
| "timestamp": "2019-02-01T09:00:00Z", | ||
| "expectedUrl": "https://storage.googleapis.com/test-bucket/test-object?X-Goog-Algorithm=GOOG4-RSA-SHA256\u0026X-Goog-Credential=test-iam-credentials%40dummy-project-id.iam.gserviceaccount.com%2F20190201%2Fauto%2Fstorage%2Fgoog4_request\u0026X-Goog-Date=20190201T090000Z\u0026X-Goog-Expires=10\u0026X-Goog-SignedHeaders=host%3Bx-goog-resumable\u0026X-Goog-Signature=4a6d39b23343cedf4c30782aed4b384001828c79ffa3a080a481ea01a640dea0a0ceb58d67a12cef3b243c3f036bb3799c6ee88e8db3eaf7d0bdd4b70a228d0736e07eaa1ee076aff5c6ce09dff1f1f03a0d8ead0d2893408dd3604fdabff553aa6d7af2da67cdba6790006a70240f96717b98f1a6ccb24f00940749599be7ef72aaa5358db63ddd54b2de9e2d6d6a586eac4fe25f36d86fc6ab150418e9c6fa01b732cded226c6d62fc95b72473a4cc55a8257482583fe66d9ab6ede909eb41516a8690946c3e87b0f2052eb0e97e012a14b2f721c42e6e19b8a1cd5658ea36264f10b9b1ada66b8ed5bf7ed7d1708377ac6e5fe608ae361fb594d2e5b24c54", | ||
| "headers": { | ||
| "X-goog-resumable": "start" | ||
| } | ||
| }, | ||
| { | ||
| "description": "Vary expiration and timestamp", | ||
| "bucket": "test-bucket", | ||
| "object": "test-object", | ||
| "method": "GET", | ||
| "expiration": "20", | ||
| "timestamp": "2019-03-01T09:00:00Z", | ||
| "expectedUrl": "https://storage.googleapis.com/test-bucket/test-object?X-Goog-Algorithm=GOOG4-RSA-SHA256\u0026X-Goog-Credential=test-iam-credentials%40dummy-project-id.iam.gserviceaccount.com%2F20190301%2Fauto%2Fstorage%2Fgoog4_request\u0026X-Goog-Date=20190301T090000Z\u0026X-Goog-Expires=20\u0026X-Goog-SignedHeaders=host\u0026X-Goog-Signature=9669ed5b10664dc594c758296580662912cf4bcc5a4ba0b6bf055bcbf6f34eed7bdad664f534962174a924741a0c273a4f67bc1847cef20192a6beab44223bd9d4fbbd749c407b79997598c30f82ddc269ff47ec09fa3afe74e00616d438df0d96a7d8ad0adacfad1dc3286f864d924fe919fb0dce45d3d975c5afe8e13af2db9cc37ba77835f92f7669b61e94c6d562196c1274529e76cfff1564cc2cad7d5387dc8e12f7a5dfd925685fe92c30b43709eee29fa2f66067472cee5423d1a3a4182fe8cea75c9329d181dc6acad7c393cd04f8bf5bc0515127d8ebd65d80c08e19ad03316053ea60033fd1b1fd85a69c576415da3bf0a3718d9ea6d03e0d66f0" | ||
| }, | ||
| { | ||
| "description": "Vary bucket and object", | ||
| "bucket": "test-bucket2", | ||
| "object": "test-object2", | ||
| "method": "GET", | ||
| "expiration": "10", | ||
| "timestamp": "2019-02-01T09:00:00Z", | ||
| "expectedUrl": "https://storage.googleapis.com/test-bucket2/test-object2?X-Goog-Algorithm=GOOG4-RSA-SHA256\u0026X-Goog-Credential=test-iam-credentials%40dummy-project-id.iam.gserviceaccount.com%2F20190201%2Fauto%2Fstorage%2Fgoog4_request\u0026X-Goog-Date=20190201T090000Z\u0026X-Goog-Expires=10\u0026X-Goog-SignedHeaders=host\u0026X-Goog-Signature=36e3d58dfd3ec1d2dd2f24b5ee372a71e811ffaa2162a2b871d26728d0354270bc116face87127532969c4a3967ed05b7309af741e19c7202f3167aa8c2ac420b61417d6451442bb91d7c822cd17be8783f01e05372769c88913561d27e6660dd8259f0081a71f831be6c50283626cbf04494ac10c394b29bb3bce74ab91548f58a37118a452693cf0483d77561fc9cac8f1765d2c724994cca46a83517a10157ee0347a233a2aaeae6e6ab5e204ff8fc5f54f90a3efdb8301d9fff5475d58cd05b181affd657f48203f4fb133c3a3d355b8eefbd10d5a0a5fd70d06e9515460ad74e22334b2cba4b29cae4f6f285cdb92d8f3126d7a1479ca3bdb69c207d860" | ||
| }, | ||
| { | ||
| "description": "Simple headers", | ||
| "bucket": "test-bucket", | ||
| "object": "test-object", | ||
| "method": "GET", | ||
| "expiration": "10", | ||
| "timestamp": "2019-02-01T09:00:00Z", | ||
| "expectedUrl": "https://storage.googleapis.com/test-bucket/test-object?X-Goog-Algorithm=GOOG4-RSA-SHA256\u0026X-Goog-Credential=test-iam-credentials%40dummy-project-id.iam.gserviceaccount.com%2F20190201%2Fauto%2Fstorage%2Fgoog4_request\u0026X-Goog-Date=20190201T090000Z\u0026X-Goog-Expires=10\u0026X-Goog-SignedHeaders=bar%3Bfoo%3Bhost\u0026X-Goog-Signature=68ecd3b008328ed30d91e2fe37444ed7b9b03f28ed4424555b5161980531ef87db1c3a5bc0265aad5640af30f96014c94fb2dba7479c41bfe1c020eb90c0c6d387d4dd09d4a5df8b60ea50eb6b01cdd786a1e37020f5f95eb8f9b6cd3f65a1f8a8a65c9fcb61ea662959efd9cd73b683f8d8804ef4d6d9b2852419b013368842731359d7f9e6d1139032ceca75d5e67cee5fd0192ea2125e5f2955d38d3d50cf116f3a52e6a62de77f6207f5b95aaa1d7d0f8a46de89ea72e7ea30f21286318d7eba0142232b0deb3a1dc9e1e812a981c66b5ffda3c6b01a8a9d113155792309fd53a3acfd054ca7776e8eec28c26480cd1e3c812f67f91d14217f39a606669d", | ||
| "headers": { | ||
| "BAR": "BAR-value", | ||
| "foo": "foo-value" | ||
| } | ||
| }, | ||
| { | ||
| "description": "Headers should be trimmed", | ||
| "bucket": "test-bucket", | ||
| "object": "test-object", | ||
| "method": "GET", | ||
| "expiration": "10", | ||
| "timestamp": "2019-02-01T09:00:00Z", | ||
| "expectedUrl": "https://storage.googleapis.com/test-bucket/test-object?X-Goog-Algorithm=GOOG4-RSA-SHA256\u0026X-Goog-Credential=test-iam-credentials%40dummy-project-id.iam.gserviceaccount.com%2F20190201%2Fauto%2Fstorage%2Fgoog4_request\u0026X-Goog-Date=20190201T090000Z\u0026X-Goog-Expires=10\u0026X-Goog-SignedHeaders=collapsed%3Bhost%3Bleading%3Btrailing\u0026X-Goog-Signature=1839511d6238d9ac2bbcbba8b23515b3757db35dfa7b8f9bc4b8b4aa270224df747c812526f1a3bcf294d67ed84cd14e074c36bc090e0a542782934a7c925af4a5ea68123e97533704ce8b08ccdf5fe6b412f89c9fc4de243e29abdb098382c5672188ee3f6fef7131413e252c78e7a35658825ad842a50609e9cc463731e17284ff7a14824c989f87cef22fb99dfec20cfeed69d8b3a08f00b43b8284eecd535e50e982b05cd74c5750cd5f986cfc21a2a05f7f3ab7fc31bd684ed1b823b64d29281e923fc6580c49005552ca19c253de087d9d2df881144e44eda40965cfdb4889bf3a35553c9809f4ed20b8355be481b92b9618952b6a04f3017b36053e15", | ||
| "headers": { | ||
| "collapsed": "abc def", | ||
| "leading": " xyz", | ||
| "trailing": "abc " | ||
| } | ||
| }, | ||
| { | ||
| "description": "Header value with multiple inline values", | ||
| "bucket": "test-bucket", | ||
| "object": "test-object", | ||
| "method": "GET", | ||
| "expiration": 10, | ||
| "timestamp": "2019-02-01T09:00:00Z", | ||
| "expectedUrl": "https://storage.googleapis.com/test-bucket/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%3Bmultiple&X-Goog-Signature=5cc113735625341f59c7203f0c2c9febc95ba6af6b9c38814f8e523214712087dc0996e4960d273ae1889f248ac1e58d4d19cb3a69ad7670e9a8ca1b434e878f59339dc7006cf32dfd715337e9f593e0504371839174962a08294586e0c78160a7aa303397888c8350637c6af3b32ac310886cc4590bfda9ca561ee58fb5b8ec56bc606d2ada6e7df31f4276e9dcb96bcaea39dc2cd096f3fad774f9c4b30e317ad43736c05f76831437f44e8726c1e90d3f6c9827dc273f211f32fc85658dfc5d357eb606743a6b00a29e519eef1bebaf9db3e8f4b1f5f9afb648ad06e60bc42fa8b57025056697c874c9ea76f5a73201c9717ea43e54713ff3502ff3fc626b", | ||
| "headers": { | ||
| "multiple": " xyz , abc, def , xyz " | ||
| } | ||
| }, | ||
| { | ||
| "description": "Customer-supplied encryption key", | ||
| "bucket": "test-bucket", | ||
| "object": "test-object", | ||
| "method": "GET", | ||
| "expiration": "10", | ||
| "timestamp": "2019-02-01T09:00:00Z", | ||
| "expectedUrl": "https://storage.googleapis.com/test-bucket/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%3Bx-goog-encryption-algorithm%3Bx-goog-encryption-key%3Bx-goog-encryption-key-sha256&X-Goog-Signature=278a1c5a3bad248637054a047014760353942433955871031ed08f515b54588654ad033e91f046ab202b68673030e117d1b786c325e870238b035ba75b3feed560a17aff9bab6bddebd4a31a52cb68b214e27d3b0bd886502c6b36b164306fe88b5a07c6063592afe746b2a5d205dbe90dd5386b94f0a78f75d9f53ee884e18f476e8fc2eb1dd910ce0b4ae1f5d7b09876ef9bf983f539c028429e14bad3c75dbd4ed1ae37856f6d6f8a1805eaf8b52a0d6fc993902e4c1ee8de477661f7b67c3663000474cb00e178189789b2a3ed6bd21b4ade684fca8108ac4dd106acb17f5954d045775f7aa5a98ebda5d3075e11a8ea49c64c6ad1481e463e8c9f11f704", | ||
| "headers": { | ||
| "X-Goog-Encryption-Algorithm": "AES256", | ||
| "X-Goog-Encryption-Key": "key", | ||
| "X-Goog-Encryption-Key-Sha256": "key-hash" | ||
| } | ||
| }, | ||
| { | ||
| "description": "List Objects", | ||
| "bucket": "test-bucket", | ||
| "method": "GET", | ||
| "expiration": "10", | ||
| "timestamp": "2019-02-01T09:00:00Z", | ||
| "expectedUrl": "https://storage.googleapis.com/test-bucket?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=6dbe94f8e52b2b8a9a476b1c857efa474e09944e2b52b925800316e094a7169d8dbe0df9c0ac08dabb22ac7e827470ceccd65f5a3eadba2a4fb9beebfe37f0d9bb1e552b851fa31a25045bdf019e507f5feb44f061551ef1aeb18dcec0e38ba2e2f77d560a46eaace9c56ed9aa642281301a9d848b0eb30749e34bc7f73a3d596240533466ff9b5f289cd0d4c845c7d96b82a35a5abd0c3aff83e4440ee6873e796087f43545544dc8c01afe1d79c726696b6f555371e491980e7ec145cca0803cf562c38f3fa1d724242f5dea25aac91d74ec9ddd739ff65523627763eaef25cd1f95ad985aaf0079b7c74eb5bcb2870a9b137a7b2c8e41fbe838c95872f75b" | ||
| } | ||
| ] | ||
| } | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add a newline. |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| syntax = "proto3"; | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Google Copyright. |
||
|
|
||
| package storage.v1.tests; | ||
|
|
||
| import "google/protobuf/timestamp.proto"; | ||
|
|
||
| message TestFile { | ||
| repeated SigningV4Test signing_v4_tests = 1; | ||
| } | ||
|
|
||
| message SigningV4Test { | ||
| string fileName = 1; | ||
| string description = 2; | ||
| string bucket = 3; | ||
| string object = 4; | ||
| string method = 5; | ||
| int64 expiration = 6; | ||
| google.protobuf.Timestamp timestamp = 7; | ||
| string expectedUrl = 8; | ||
| map<string, string> headers = 9; | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| using Google.Protobuf; | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Google Copyright. |
||
| using System; | ||
| using System.IO; | ||
|
|
||
| using Storage.V1.Tests; | ||
|
|
||
| public class Program | ||
| { | ||
| static int Main(string[] args) | ||
| { | ||
| int result = 0; | ||
|
|
||
| foreach (var file in args) | ||
| { | ||
| Console.WriteLine($"Validating {file}"); | ||
| try | ||
| { | ||
| string json = File.ReadAllText(file); | ||
| TestFile.Parser.ParseJson(json); | ||
| } | ||
| catch (Exception e) | ||
| { | ||
| Console.WriteLine($"Error: {e.GetType().Name}: {e.Message}"); | ||
| result = 1; | ||
| } | ||
| } | ||
| return result; | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| <Project Sdk="Microsoft.NET.Sdk"> | ||
|
|
||
| <PropertyGroup> | ||
| <IsPackable>false</IsPackable> | ||
| <OutputType>Exe</OutputType> | ||
| <TargetFramework>netcoreapp2.2</TargetFramework> | ||
| </PropertyGroup> | ||
|
|
||
| <ItemGroup> | ||
| <PackageReference Include="Google.Protobuf" Version="3.7.0" /> | ||
| </ItemGroup> | ||
|
|
||
| </Project> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is this red?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Because I failed to put a comma at the end of line 60. Doh!