Skip to content

Commit 2736d04

Browse files
committed
30 tests done
1 parent a3e4316 commit 2736d04

File tree

3 files changed

+103
-11
lines changed

3 files changed

+103
-11
lines changed

python/example_code/s3/s3_basics/test/test_s3_express_getting_started.py

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,33 @@
2020
sys.path.append(os.path.join(script_dir, ".."))
2121
import s3_express_getting_started
2222

23+
number_of_uploads = 10
2324

24-
@pytest.mark.parametrize(
25-
"error_code, stop_on_index",
26-
[
25+
stop_on_index = [
2726
("TESTERROR-stub_create_vpc", 0),
2827
("TESTERROR-stub_describe_route_tables", 1),
2928
("TESTERROR-stub_create_vpc_endpoint", 2),
3029
("TESTERROR-stub_create_stack", 3),
3130
("TESTERROR-stub_describe_stacks", 4),
32-
],
31+
("TESTERROR-stub_create_access_key_regular", 5),
32+
("TESTERROR-stub_create_access_key_directory", 6),
33+
("TESTERROR-stub_describe_availability_zones", 7),
34+
("TESTERROR-stub_create_bucket_directory", 8),
35+
("TESTERROR-stub_create_bucket_regular", 9),
36+
("TESTERROR-stub_put_object", 10),
37+
("TESTERROR-stub_create_session", 11),
38+
("TESTERROR-stub_copy_object", 12),
39+
]
40+
41+
for i in range(len(stop_on_index), len(stop_on_index) + number_of_uploads):
42+
stop_on_index.append((f"TESTERROR-stub_get_object_directory", i))
43+
44+
for i in range(len(stop_on_index), len(stop_on_index) + number_of_uploads):
45+
stop_on_index.append((f"TESTERROR-stub_get_object_regular", i))
46+
47+
@pytest.mark.parametrize(
48+
"error_code, stop_on_index",
49+
stop_on_index,
3350
)
3451
def test_s3_express_scenario(
3552
make_stubber, stub_runner, error_code , stop_on_index, monkeypatch
@@ -67,8 +84,26 @@ def test_s3_express_scenario(
6784
{"OutputKey": "ExpressUser", "OutputValue": express_user_name},
6885
]
6986

87+
availability_zone_filter = [{"Name": "region-name", "Values": [region]}]
88+
availability_zone_ids = ["use1-az2"]
89+
90+
bucket_name_prefix = "amzn-s3-demo-bucket"
91+
directory_bucket_name = f"{bucket_name_prefix}-{my_uuid}--{availability_zone_ids[0]}--x-s3"
92+
regular_bucket_name = f"{bucket_name_prefix}-regular-{my_uuid}"
93+
94+
directory_bucket_configuration = { 'Bucket': { 'Type' : 'Directory',
95+
'DataRedundancy' : 'SingleAvailabilityZone'},
96+
'Location' : { 'Name' : availability_zone_ids[0],
97+
'Type' : 'AvailabilityZone'}
98+
}
99+
100+
object_name = "basic-text-object"
70101
inputs = [
71102
"y",
103+
bucket_name_prefix,
104+
"1",
105+
"y",
106+
number_of_uploads
72107
]
73108
monkeypatch.setattr("builtins.input", lambda x: inputs.pop(0))
74109

@@ -81,6 +116,20 @@ def test_s3_express_scenario(
81116
runner.add(ec2_stubber.stub_create_vpc_endpoint, vpc_id, route_table_id, service_name)
82117
runner.add(cloud_formation_stubber.stub_create_stack, stack_name, template, ["CAPABILITY_NAMED_IAM"], stack_id)
83118
runner.add(cloud_formation_stubber.stub_describe_stacks, stack_name, "CREATE_COMPLETE", outputs)
119+
runner.add(iam_stubber.stub_create_access_key, regular_user_name)
120+
runner.add(iam_stubber.stub_create_access_key, express_user_name)
121+
runner.add(ec2_stubber.stub_describe_availability_zones, availability_zone_ids, availability_zone_filter, availability_zone_ids)
122+
runner.add(s3_stubber.stub_create_bucket, directory_bucket_name, bucket_configuration = directory_bucket_configuration)
123+
runner.add(s3_stubber.stub_create_bucket, regular_bucket_name)
124+
runner.add (s3_stubber.stub_put_object, regular_bucket_name, object_name, "Look Ma, I'm a bucket!")
125+
runner.add(s3_stubber.stub_create_session, directory_bucket_name)
126+
runner.add (s3_stubber.stub_copy_object, regular_bucket_name, object_name, directory_bucket_name, object_name)
127+
128+
for _ in range(number_of_uploads):
129+
runner.add (s3_stubber.stub_get_object, directory_bucket_name, object_name)
130+
131+
for _ in range(number_of_uploads):
132+
runner.add(s3_stubber.stub_get_object, regular_bucket_name, object_name)
84133

85134
def mock_wait(self, **kwargs):
86135
return

python/test_tools/ec2_stubber.py

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -388,9 +388,22 @@ def stub_delete_launch_template(self, template_name, error_code=None):
388388
"delete_launch_template", expected_params, response, error_code=error_code
389389
)
390390

391-
def stub_describe_availability_zones(self, zones, error_code=None):
391+
def stub_describe_availability_zones(
392+
self, zones, filters=None, zone_ids=None, error_code=None
393+
):
392394
expected_params = {}
393-
response = {"AvailabilityZones": [{"ZoneName": zone} for zone in zones]}
395+
if filters is not None:
396+
expected_params["Filters"] = filters
397+
398+
availability_zones = []
399+
for i, zone in enumerate(zones):
400+
zone_info = {"ZoneName": zone}
401+
if zone_ids and i < len(zone_ids):
402+
zone_info["ZoneId"] = zone_ids[i]
403+
availability_zones.append(zone_info)
404+
405+
response = {"AvailabilityZones": availability_zones}
406+
394407
self._stub_bifurcator(
395408
"describe_availability_zones",
396409
expected_params,
@@ -469,7 +482,9 @@ def stub_create_vpc(self, cidr, vpc_id, error_code=None):
469482
"create_vpc", expected_params, response, error_code=error_code
470483
)
471484

472-
def stub_describe_route_tables(self, filters, vpc_id, route_table_id, error_code=None):
485+
def stub_describe_route_tables(
486+
self, filters, vpc_id, route_table_id, error_code=None
487+
):
473488
expected_params = {"Filters": filters}
474489
response = {
475490
"RouteTables": [
@@ -522,8 +537,10 @@ def stub_describe_route_tables(self, filters, vpc_id, route_table_id, error_code
522537
self._stub_bifurcator(
523538
"describe_route_tables", expected_params, response, error_code=error_code
524539
)
525-
526-
def stub_create_vpc_endpoint(self, vpc_id, route_table_id, service_name, error_code=None):
540+
541+
def stub_create_vpc_endpoint(
542+
self, vpc_id, route_table_id, service_name, error_code=None
543+
):
527544
expected_params = {
528545
"VpcId": vpc_id,
529546
"RouteTableIds": [route_table_id],

python/test_tools/s3_stubber.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"""
1010

1111
import io
12+
import datetime
1213
import json
1314
from botocore.stub import ANY
1415

@@ -45,9 +46,13 @@ def make_version(key, version_id, is_latest=None, last_modified=None):
4546
version["LastModified"] = last_modified
4647
return version
4748

48-
def stub_create_bucket(self, bucket_name, region_name=None, error_code=None):
49+
def stub_create_bucket(
50+
self, bucket_name, region_name=None, bucket_configuration=None, error_code=None
51+
):
4952
expected_params = {"Bucket": bucket_name}
50-
if region_name is not None:
53+
if bucket_configuration is not None:
54+
expected_params["CreateBucketConfiguration"] = bucket_configuration
55+
elif region_name is not None:
5156
expected_params["CreateBucketConfiguration"] = {
5257
"LocationConstraint": region_name
5358
}
@@ -448,3 +453,24 @@ def stub_generate_presigned_url(
448453
self._stub_bifurcator(
449454
"generate_presigned_url", expected_params, response, error_code=error_code
450455
)
456+
457+
def stub_create_session(self, bucket_name, error_code=None):
458+
expected_params = {
459+
"Bucket": bucket_name,
460+
}
461+
462+
response = {
463+
"Credentials": {
464+
"AccessKeyId": "string",
465+
"SecretAccessKey": "string",
466+
"SessionToken": "string",
467+
"Expiration": datetime.datetime(2015, 1, 1),
468+
},
469+
}
470+
471+
self._stub_bifurcator(
472+
"create_session",
473+
expected_params=expected_params,
474+
response=response,
475+
error_code=error_code,
476+
)

0 commit comments

Comments
 (0)