Compare commits
2 Commits
a8dddfbd30
...
591f4c43e0
Author | SHA1 | Date | |
---|---|---|---|
591f4c43e0 | |||
71978e2386 |
10
README.md
10
README.md
|
@ -69,15 +69,9 @@ WebIdentityToken is not yet implemented.
|
|||
|
||||
TODO List:
|
||||
|
||||
* Implement all demos as tests in src/aws.zig. This has been done for
|
||||
all AWS protocols except rest XML. Due to the similarity of EC2 Query
|
||||
protocol and rest XML it is likely that things are fully functional (with
|
||||
a proxy).
|
||||
* Json parsing is based on a fork of the 0.9.0 (maybe earlier?) json parser.
|
||||
Upgrading to 0.11 caused some commenting of things that probably broke some
|
||||
stuff. JSON parsing in general needs a re-visit. Note also that a json.zig
|
||||
file is embedded/copied from the codegen project, so that also needs a second
|
||||
look.
|
||||
This needs a re-visit. Note also that a json.zig file is embedded/copied
|
||||
from the codegen project, so that also needs a second look.
|
||||
* Take a look to see about compilation speed. With codegen caching this is
|
||||
reasonable, but still takes longer than needed.
|
||||
* Upgrade the model files. This is a simple tasks, but I'd like the first
|
||||
|
|
95
src/aws.zig
95
src/aws.zig
|
@ -1845,3 +1845,98 @@ test "ec2_query_with_input: EC2 describe instances" {
|
|||
try std.testing.expectEqualStrings("i-0212d7d1f62b96676", call.response.reservations.?[1].instances.?[0].instance_id.?);
|
||||
try std.testing.expectEqualStrings("123456789012:found-me", call.response.reservations.?[1].instances.?[0].tags.?[0].value.?);
|
||||
}
|
||||
test "rest_xml_no_input: S3 list buckets" {
|
||||
const allocator = std.testing.allocator;
|
||||
var test_harness = TestSetup.init(allocator, .{
|
||||
.allocator = allocator,
|
||||
.server_response =
|
||||
\\<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>3367189aa775bd98da38e55093705f2051443c1e775fc0971d6d77387a47c8d0</ID><DisplayName>emilerch+sub1</DisplayName></Owner><Buckets><Bucket><Name>550620852718-backup</Name><CreationDate>2020-06-17T16:26:51.000Z</CreationDate></Bucket><Bucket><Name>amplify-letmework-staging-185741-deployment</Name><CreationDate>2023-03-10T18:57:49.000Z</CreationDate></Bucket><Bucket><Name>aws-cloudtrail-logs-550620852718-224022a7</Name><CreationDate>2021-06-21T18:32:44.000Z</CreationDate></Bucket><Bucket><Name>aws-sam-cli-managed-default-samclisourcebucket-1gy0z00mj47xe</Name><CreationDate>2021-10-05T16:38:07.000Z</CreationDate></Bucket><Bucket><Name>awsomeprojectstack-pipelineartifactsbucketaea9a05-1uzwo6c86ecr</Name><CreationDate>2021-10-05T22:55:09.000Z</CreationDate></Bucket><Bucket><Name>cdk-hnb659fds-assets-550620852718-us-west-2</Name><CreationDate>2023-02-28T21:49:36.000Z</CreationDate></Bucket><Bucket><Name>cf-templates-12iy6putgdxtk-us-west-2</Name><CreationDate>2020-06-26T02:31:59.000Z</CreationDate></Bucket><Bucket><Name>codepipeline-us-west-2-46714083637</Name><CreationDate>2021-09-14T18:43:07.000Z</CreationDate></Bucket><Bucket><Name>elasticbeanstalk-us-west-2-550620852718</Name><CreationDate>2022-04-15T16:22:42.000Z</CreationDate></Bucket><Bucket><Name>lobo-west</Name><CreationDate>2021-06-21T17:17:22.000Z</CreationDate></Bucket><Bucket><Name>lobo-west-2</Name><CreationDate>2021-11-19T20:12:31.000Z</CreationDate></Bucket><Bucket><Name>logging-backup-550620852718-us-east-2</Name><CreationDate>2022-05-29T21:55:16.000Z</CreationDate></Bucket><Bucket><Name>mysfitszj3t6webstack-hostingbucketa91a61fe-1ep3ezkgwpxr0</Name><CreationDate>2023-03-01T04:53:55.000Z</CreationDate></Bucket></Buckets></ListAllMyBucketsResult>
|
||||
,
|
||||
.server_response_headers = @constCast(&[_][2][]const u8{
|
||||
.{ "Content-Type", "application/xml" },
|
||||
.{ "x-amzn-RequestId", "9PEYBAZ9J7TPRX43" },
|
||||
}),
|
||||
});
|
||||
defer test_harness.deinit();
|
||||
const options = try test_harness.start();
|
||||
const s3 = (Services(.{.s3}){}).s3;
|
||||
const call = try test_harness.client.call(s3.list_buckets.Request{}, options);
|
||||
defer call.deinit();
|
||||
test_harness.stop();
|
||||
// Request expectations
|
||||
try std.testing.expectEqual(std.http.Method.GET, test_harness.request_options.request_method);
|
||||
try std.testing.expectEqualStrings("/", test_harness.request_options.request_target);
|
||||
try std.testing.expectEqualStrings("", test_harness.request_options.request_body);
|
||||
// Response expectations
|
||||
try std.testing.expectEqualStrings("9PEYBAZ9J7TPRX43", call.response_metadata.request_id);
|
||||
try std.testing.expectEqual(@as(usize, 13), call.response.buckets.?.len);
|
||||
}
|
||||
test "rest_xml_anything_but_s3: CloudFront list key groups" {
|
||||
const allocator = std.testing.allocator;
|
||||
var test_harness = TestSetup.init(allocator, .{
|
||||
.allocator = allocator,
|
||||
.server_response =
|
||||
\\{"Items":null,"MaxItems":100,"NextMarker":null,"Quantity":0}
|
||||
,
|
||||
.server_response_headers = @constCast(&[_][2][]const u8{
|
||||
.{ "Content-Type", "application/json" },
|
||||
.{ "x-amzn-RequestId", "d3382082-5291-47a9-876b-8df3accbb7ea" },
|
||||
}),
|
||||
});
|
||||
defer test_harness.deinit();
|
||||
const options = try test_harness.start();
|
||||
const cloudfront = (Services(.{.cloudfront}){}).cloudfront;
|
||||
const call = try test_harness.client.call(cloudfront.list_key_groups.Request{}, options);
|
||||
defer call.deinit();
|
||||
test_harness.stop();
|
||||
// Request expectations
|
||||
try std.testing.expectEqual(std.http.Method.GET, test_harness.request_options.request_method);
|
||||
try std.testing.expectEqualStrings("/2020-05-31/key-group", test_harness.request_options.request_target);
|
||||
try std.testing.expectEqualStrings("", test_harness.request_options.request_body);
|
||||
// Response expectations
|
||||
try std.testing.expectEqualStrings("d3382082-5291-47a9-876b-8df3accbb7ea", call.response_metadata.request_id);
|
||||
try std.testing.expectEqual(@as(i64, 100), call.response.key_group_list.?.max_items);
|
||||
}
|
||||
test "rest_xml_with_input: S3 put object" {
|
||||
const allocator = std.testing.allocator;
|
||||
var test_harness = TestSetup.init(allocator, .{
|
||||
.allocator = allocator,
|
||||
.server_response = "",
|
||||
.server_response_headers = @constCast(&[_][2][]const u8{
|
||||
// .{ "Content-Type", "application/xml" },
|
||||
.{ "x-amzn-RequestId", "9PEYBAZ9J7TPRX43" },
|
||||
.{ "x-amz-id-2", "jdRDo30t7Ge9lf6F+4WYpg+YKui8z0mz2+rwinL38xDZzvloJqrmpCAiKG375OSvHA9OBykJS44=" },
|
||||
.{ "x-amz-server-side-encryption", "AES256" },
|
||||
.{ "ETag", "37b51d194a7513e45b56f6524f2d51f2" },
|
||||
}),
|
||||
});
|
||||
defer test_harness.deinit();
|
||||
const options = try test_harness.start();
|
||||
const s3opts = Options{
|
||||
.region = "us-west-2",
|
||||
.client = options.client,
|
||||
};
|
||||
const result = try Request(services.s3.put_object).call(.{
|
||||
.bucket = "mysfitszj3t6webstack-hostingbucketa91a61fe-1ep3ezkgwpxr0",
|
||||
.key = "i/am/a/teapot/foo",
|
||||
.content_type = "text/plain",
|
||||
.body = "bar",
|
||||
.storage_class = "STANDARD",
|
||||
}, s3opts);
|
||||
std.log.info("PutObject Request id: {any}", .{result.response_metadata.request_id});
|
||||
std.log.info("PutObject etag: {any}", .{result.response.e_tag.?});
|
||||
//mysfitszj3t6webstack-hostingbucketa91a61fe-1ep3ezkgwpxr0.s3.us-west-2.amazonaws.com
|
||||
defer result.deinit();
|
||||
test_harness.stop();
|
||||
// Request expectations
|
||||
try std.testing.expectEqual(std.http.Method.PUT, test_harness.request_options.request_method);
|
||||
// I don't think this will work since we're overriding the url
|
||||
// try test_harness.request_options.expectHeader("Host", "mysfitszj3t6webstack-hostingbucketa91a61fe-1ep3ezkgwpxr0.s3.us-west-2.amazonaws.com");
|
||||
try test_harness.request_options.expectHeader("x-amz-storage-class", "STANDARD");
|
||||
try std.testing.expectEqualStrings("/mysfitszj3t6webstack-hostingbucketa91a61fe-1ep3ezkgwpxr0/i/am/a/teapot/foo?x-id=PutObject", test_harness.request_options.request_target);
|
||||
try std.testing.expectEqualStrings("bar", test_harness.request_options.request_body);
|
||||
// Response expectations
|
||||
try std.testing.expectEqualStrings("9PEYBAZ9J7TPRX43, host_id: jdRDo30t7Ge9lf6F+4WYpg+YKui8z0mz2+rwinL38xDZzvloJqrmpCAiKG375OSvHA9OBykJS44=", result.response_metadata.request_id);
|
||||
try std.testing.expectEqualStrings("AES256", result.response.server_side_encryption.?);
|
||||
try std.testing.expectEqualStrings("37b51d194a7513e45b56f6524f2d51f2", result.response.e_tag.?);
|
||||
}
|
||||
|
|
|
@ -88,6 +88,8 @@ pub fn main() anyerror!void {
|
|||
};
|
||||
defer client.deinit();
|
||||
|
||||
// As of 2023-08-28, only ECS from this list supports TLS v1.3
|
||||
// AWS commitment is to enable all services by 2023-12-31
|
||||
const services = aws.Services(.{ .sts, .ec2, .dynamo_db, .ecs, .lambda, .sqs, .s3, .cloudfront }){};
|
||||
|
||||
for (tests.items) |t| {
|
||||
|
|
Loading…
Reference in New Issue
Block a user