|
| 1 | +from aws_lambda_powertools.utilities.parser import event_parser |
| 2 | +from aws_lambda_powertools.utilities.parser.models import S3Model, S3RecordModel |
| 3 | +from aws_lambda_powertools.utilities.typing import LambdaContext |
| 4 | +from tests.functional.parser.utils import load_event |
| 5 | + |
| 6 | + |
| 7 | +@event_parser(model=S3Model) |
| 8 | +def handle_s3(event: S3Model, _: LambdaContext): |
| 9 | + records = list(event.Records) |
| 10 | + assert len(records) == 1 |
| 11 | + record: S3RecordModel = records[0] |
| 12 | + assert record.eventVersion == "2.1" |
| 13 | + assert record.eventSource == "aws:s3" |
| 14 | + assert record.awsRegion == "us-east-2" |
| 15 | + convert_time = int(round(record.eventTime.timestamp() * 1000)) |
| 16 | + assert convert_time == 1567539447192 |
| 17 | + assert record.eventName == "ObjectCreated:Put" |
| 18 | + user_identity = record.userIdentity |
| 19 | + assert user_identity.principalId == "AWS:AIDAINPONIXQXHT3IKHL2" |
| 20 | + request_parameters = record.requestParameters |
| 21 | + assert str(request_parameters.sourceIPAddress) == "205.255.255.255/32" |
| 22 | + assert record.responseElements.x_amz_request_id == "D82B88E5F771F645" |
| 23 | + assert ( |
| 24 | + record.responseElements.x_amz_id_2 |
| 25 | + == "vlR7PnpV2Ce81l0PRw6jlUpck7Jo5ZsQjryTjKlc5aLWGVHPZLj5NeC6qMa0emYBDXOo6QBU0Wo=" |
| 26 | + ) |
| 27 | + s3 = record.s3 |
| 28 | + assert s3.s3SchemaVersion == "1.0" |
| 29 | + assert s3.configurationId == "828aa6fc-f7b5-4305-8584-487c791949c1" |
| 30 | + bucket = s3.bucket |
| 31 | + assert bucket.name == "lambda-artifacts-deafc19498e3f2df" |
| 32 | + assert bucket.ownerIdentity.principalId == "A3I5XTEXAMAI3E" |
| 33 | + assert bucket.arn == "arn:aws:s3:::lambda-artifacts-deafc19498e3f2df" |
| 34 | + assert s3.object.key == "b21b84d653bb07b05b1e6b33684dc11b" |
| 35 | + assert s3.object.size == 1305107 |
| 36 | + assert s3.object.eTag == "b21b84d653bb07b05b1e6b33684dc11b" |
| 37 | + assert s3.object.versionId is None |
| 38 | + assert s3.object.sequencer == "0C0F6F405D6ED209E1" |
| 39 | + assert record.glacierEventData is None |
| 40 | + |
| 41 | + |
| 42 | +@event_parser(model=S3Model) |
| 43 | +def handle_s3_glacier(event: S3Model, _: LambdaContext): |
| 44 | + records = list(event.Records) |
| 45 | + assert len(records) == 1 |
| 46 | + record: S3RecordModel = records[0] |
| 47 | + assert record.eventVersion == "2.1" |
| 48 | + assert record.eventSource == "aws:s3" |
| 49 | + assert record.awsRegion == "us-east-2" |
| 50 | + convert_time = int(round(record.eventTime.timestamp() * 1000)) |
| 51 | + assert convert_time == 1567539447192 |
| 52 | + assert record.eventName == "ObjectCreated:Put" |
| 53 | + user_identity = record.userIdentity |
| 54 | + assert user_identity.principalId == "AWS:AIDAINPONIXQXHT3IKHL2" |
| 55 | + request_parameters = record.requestParameters |
| 56 | + assert str(request_parameters.sourceIPAddress) == "205.255.255.255/32" |
| 57 | + assert record.responseElements.x_amz_request_id == "D82B88E5F771F645" |
| 58 | + assert ( |
| 59 | + record.responseElements.x_amz_id_2 |
| 60 | + == "vlR7PnpV2Ce81l0PRw6jlUpck7Jo5ZsQjryTjKlc5aLWGVHPZLj5NeC6qMa0emYBDXOo6QBU0Wo=" |
| 61 | + ) |
| 62 | + s3 = record.s3 |
| 63 | + assert s3.s3SchemaVersion == "1.0" |
| 64 | + assert s3.configurationId == "828aa6fc-f7b5-4305-8584-487c791949c1" |
| 65 | + bucket = s3.bucket |
| 66 | + assert bucket.name == "lambda-artifacts-deafc19498e3f2df" |
| 67 | + assert bucket.ownerIdentity.principalId == "A3I5XTEXAMAI3E" |
| 68 | + assert bucket.arn == "arn:aws:s3:::lambda-artifacts-deafc19498e3f2df" |
| 69 | + assert s3.object.key == "b21b84d653bb07b05b1e6b33684dc11b" |
| 70 | + assert s3.object.size == 1305107 |
| 71 | + assert s3.object.eTag == "b21b84d653bb07b05b1e6b33684dc11b" |
| 72 | + assert s3.object.versionId is None |
| 73 | + assert s3.object.sequencer == "0C0F6F405D6ED209E1" |
| 74 | + assert record.glacierEventData is not None |
| 75 | + convert_time = int( |
| 76 | + round(record.glacierEventData.restoreEventData.lifecycleRestorationExpiryTime.timestamp() * 1000) |
| 77 | + ) |
| 78 | + assert convert_time == 60000 |
| 79 | + assert record.glacierEventData.restoreEventData.lifecycleRestoreStorageClass == "standard" |
| 80 | + |
| 81 | + |
| 82 | +def test_s3_trigger_event(): |
| 83 | + event_dict = load_event("s3Event.json") |
| 84 | + handle_s3(event_dict, LambdaContext()) |
| 85 | + |
| 86 | + |
| 87 | +def test_s3_glacier_trigger_event(): |
| 88 | + event_dict = load_event("s3EventGlacier.json") |
| 89 | + handle_s3_glacier(event_dict, LambdaContext()) |
0 commit comments