Skip to content

Commit 058e2bb

Browse files
author
Michael Brewer
committed
test(general): Add missing tests for parser
Changes: * Add missing fail case for cloudwatch parsing * Add more test data for decoding s3 object keys * Update data_classes test to include the new event json examples * Fix class naming to be CamelCase
1 parent b9ec28d commit 058e2bb

File tree

4 files changed

+66
-5
lines changed

4 files changed

+66
-5
lines changed

Diff for: tests/events/s3EventDecodedKey.json

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{
2+
"Records": [
3+
{
4+
"eventVersion": "2.0",
5+
"eventSource": "aws:s3",
6+
"awsRegion": "us-east-1",
7+
"eventTime": "1970-01-01T00:00:00.123Z",
8+
"eventName": "ObjectCreated:Put",
9+
"userIdentity": {
10+
"principalId": "EXAMPLE"
11+
},
12+
"requestParameters": {
13+
"sourceIPAddress": "127.0.0.1"
14+
},
15+
"responseElements": {
16+
"x-amz-request-id": "C3D13FE58DE4C810",
17+
"x-amz-id-2": "FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"
18+
},
19+
"s3": {
20+
"s3SchemaVersion": "1.0",
21+
"configurationId": "testConfigRule",
22+
"bucket": {
23+
"name": "sourcebucket",
24+
"ownerIdentity": {
25+
"principalId": "EXAMPLE"
26+
},
27+
"arn": "arn:aws:s3:::mybucket"
28+
},
29+
"object": {
30+
"key": "Happy%20Face.jpg",
31+
"urlDecodedKey": "Happy Face.jpg",
32+
"size": 1024,
33+
"versionId": "version",
34+
"eTag": "d41d8cd98f00b204e9800998ecf8427e",
35+
"sequencer": "Happy Sequencer"
36+
}
37+
}
38+
}
39+
]
40+
}

Diff for: tests/functional/parser/test_cloudwatch.py

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import base64
22
import json
33
import zlib
4-
from typing import List
4+
from typing import Any, List
55

66
import pytest
77

@@ -69,6 +69,14 @@ def test_handle_cloudwatch_trigger_event_no_envelope():
6969
handle_cloudwatch_logs_no_envelope(event_dict, LambdaContext())
7070

7171

72+
def test_handle_invalid_cloudwatch_trigger_event_no_envelope():
73+
event_dict: Any = {"awslogs": {"data": "invalid_data"}}
74+
with pytest.raises(ValidationError) as context:
75+
handle_cloudwatch_logs_no_envelope(event_dict, LambdaContext())
76+
77+
assert context.value.errors()[0]["msg"] == "unable to decompress data"
78+
79+
7280
def test_handle_invalid_event_with_envelope():
7381
with pytest.raises(ValidationError):
7482
handle_cloudwatch_logs(event={}, context=LambdaContext())

Diff for: tests/functional/test_lambda_trigger_events.py

+13
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,11 @@ def test_s3_key_unquote_plus():
413413
assert event.object_key == tricky_name
414414

415415

416+
def test_s3_key_url_decoded_key():
417+
event = S3Event(load_event("s3EventDecodedKey.json"))
418+
assert event.object_key == event.record["s3"]["object"]["urlDecodedKey"]
419+
420+
416421
def test_s3_glacier_event():
417422
example_event = {
418423
"Records": [
@@ -434,6 +439,14 @@ def test_s3_glacier_event():
434439
assert glacier_event_data.restore_event_data.lifecycle_restore_storage_class == "standard"
435440

436441

442+
def test_s3_glacier_event_json():
443+
event = S3Event(load_event("s3EventGlacier.json"))
444+
glacier_event_data = event.record.glacier_event_data
445+
assert glacier_event_data is not None
446+
assert glacier_event_data.restore_event_data.lifecycle_restoration_expiry_time == "1970-01-01T00:01:00.000Z"
447+
assert glacier_event_data.restore_event_data.lifecycle_restore_storage_class == "standard"
448+
449+
437450
def test_ses_trigger_event():
438451
event = SESEvent(load_event("sesEvent.json"))
439452

Diff for: tests/unit/test_tracing.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -57,19 +57,19 @@ def reset_tracing_config(mocker):
5757

5858
@pytest.fixture
5959
def in_subsegment_mock():
60-
class Async_context_manager(mock.MagicMock):
60+
class AsyncContextManager(mock.MagicMock):
6161
async def __aenter__(self, *args, **kwargs):
6262
return self.__enter__()
6363

6464
async def __aexit__(self, *args, **kwargs):
6565
return self.__exit__(*args, **kwargs)
6666

67-
class In_subsegment(NamedTuple):
68-
in_subsegment: mock.MagicMock = Async_context_manager()
67+
class InSubsegment(NamedTuple):
68+
in_subsegment: mock.MagicMock = AsyncContextManager()
6969
put_annotation: mock.MagicMock = mock.MagicMock()
7070
put_metadata: mock.MagicMock = mock.MagicMock()
7171

72-
in_subsegment = In_subsegment()
72+
in_subsegment = InSubsegment()
7373
in_subsegment.in_subsegment.return_value.__enter__.return_value.put_annotation = in_subsegment.put_annotation
7474
in_subsegment.in_subsegment.return_value.__enter__.return_value.put_metadata = in_subsegment.put_metadata
7575

0 commit comments

Comments
 (0)