From e94da488927e9fc7a042917c6718439540e22bec Mon Sep 17 00:00:00 2001 From: Joel Scheuner Date: Tue, 10 Dec 2024 17:58:54 +0100 Subject: [PATCH 1/5] Unskip supported Lambda and ESM tests --- .../cloudformation/resources/test_lambda.py | 54 +++++-------------- .../resources/test_lambda.validation.json | 3 ++ 2 files changed, 15 insertions(+), 42 deletions(-) diff --git a/tests/aws/services/cloudformation/resources/test_lambda.py b/tests/aws/services/cloudformation/resources/test_lambda.py index 128cf1441557a..5c363772f2e5c 100644 --- a/tests/aws/services/cloudformation/resources/test_lambda.py +++ b/tests/aws/services/cloudformation/resources/test_lambda.py @@ -19,8 +19,6 @@ from localstack.utils.testutil import create_lambda_archive, get_lambda_log_events -# TODO: Fix for new Lambda provider (was tested for old provider) -@pytest.mark.skip(reason="not implemented yet in new provider") @markers.aws.validated def test_lambda_w_dynamodb_event_filter(deploy_cfn_template, aws_client): function_name = f"test-fn-{short_uid()}" @@ -53,15 +51,6 @@ def _assert_single_lambda_call(): retry(_assert_single_lambda_call, retries=30) -# TODO make a test simular to one above but for updated filtering - - -@markers.snapshot.skip_snapshot_verify( - [ - "$..EventSourceMappings..FunctionArn", - "$..EventSourceMappings..LastProcessingResult", - ] -) @markers.aws.validated def test_lambda_w_dynamodb_event_filter_update(deploy_cfn_template, snapshot, aws_client): snapshot.add_transformer(snapshot.transform.dynamodb_api()) @@ -261,7 +250,6 @@ def test_lambda_alias(deploy_cfn_template, snapshot, aws_client): not in_default_partition(), reason="Test not applicable in non-default partitions" ) @markers.aws.validated -@markers.snapshot.skip_snapshot_verify(paths=["$..DestinationConfig"]) def test_lambda_code_signing_config(deploy_cfn_template, snapshot, account_id, aws_client): snapshot.add_transformer(snapshot.transform.cloudformation_api()) snapshot.add_transformer(snapshot.transform.lambda_api()) @@ -305,7 +293,12 @@ def test_event_invoke_config(deploy_cfn_template, snapshot, aws_client): snapshot.match("event_invoke_config", event_invoke_config) -@markers.snapshot.skip_snapshot_verify(paths=["$..CodeSize"]) +@markers.snapshot.skip_snapshot_verify( + paths=[ + # Lambda ZIP flaky in CI + "$..CodeSize", + ] +) @markers.aws.validated def test_lambda_version(deploy_cfn_template, snapshot, aws_client): snapshot.add_transformer(snapshot.transform.cloudformation_api()) @@ -462,7 +455,6 @@ def test_lambda_vpc(deploy_cfn_template, aws_client): aws_client.lambda_.invoke(FunctionName=fn_name, LogType="Tail", Payload=b"{}") -@pytest.mark.skip(reason="fails/times out with new provider") # FIXME @markers.aws.validated def test_update_lambda_permissions(deploy_cfn_template, aws_client): stack = deploy_cfn_template( @@ -619,16 +611,12 @@ def wait_logs(): @markers.snapshot.skip_snapshot_verify( paths=[ - "$..MaximumRetryAttempts", - "$..ParallelizationFactor", - "$..StateTransitionReason", # Lambda "$..Tags", - "$..Configuration.CodeSize", - "$..Configuration.Layers", + "$..Configuration.CodeSize", # Lambda ZIP flaky in CI # SQS "$..Attributes.SqsManagedSseEnabled", - # # IAM + # IAM "$..PolicyNames", "$..PolicyName", "$..Role.Description", @@ -742,12 +730,8 @@ def wait_logs(): with pytest.raises(aws_client.lambda_.exceptions.ResourceNotFoundException): aws_client.lambda_.get_event_source_mapping(UUID=esm_id) - # TODO: consider moving into the dedicated DynamoDB => Lambda tests + # TODO: consider moving into the dedicated DynamoDB => Lambda tests because it tests the filtering functionality rather than CloudFormation (just using CF to deploy resources) # tests.aws.services.lambda_.test_lambda_integration_dynamodbstreams.TestDynamoDBEventSourceMapping.test_dynamodb_event_filter - @pytest.mark.skipif( - config.EVENT_RULE_ENGINE != "java", - reason="Filtering is broken with the Python rule engine for this specific case (exists:false) in ESM v2", - ) @markers.aws.validated def test_lambda_dynamodb_event_filter( self, dynamodb_wait_for_table_active, deploy_cfn_template, aws_client, monkeypatch @@ -786,8 +770,7 @@ def _send_events(): paths=[ # Lambda "$..Tags", - "$..Configuration.CodeSize", - "$..Configuration.Layers", + "$..Configuration.CodeSize", # Lambda ZIP flaky in CI # IAM "$..PolicyNames", "$..policies..PolicyName", @@ -801,12 +784,6 @@ def _send_events(): "$..Table.Replicas", # stream result "$..StreamDescription.CreationRequestDateTime", - # event source mapping - "$..BisectBatchOnFunctionError", - "$..DestinationConfig", - "$..LastProcessingResult", - "$..MaximumRecordAgeInSeconds", - "$..TumblingWindowInSeconds", ] ) @markers.aws.validated @@ -929,16 +906,9 @@ def wait_logs(): paths=[ "$..Role.Description", "$..Role.MaxSessionDuration", - "$..BisectBatchOnFunctionError", - "$..DestinationConfig", - "$..LastProcessingResult", - "$..MaximumRecordAgeInSeconds", "$..Configuration.CodeSize", "$..Tags", - "$..StreamDescription.StreamModeDetails", - "$..Configuration.Layers", - "$..TumblingWindowInSeconds", - # flaky because we currently don't actually wait in cloudformation for it to be active + # TODO: wait for ESM to become active in CloudFormation to mitigate these flaky fields "$..Configuration.LastUpdateStatus", "$..Configuration.State", "$..Configuration.StateReason", @@ -1094,11 +1064,11 @@ class TestCfnLambdaDestinations: """ - @pytest.mark.skip(reason="not supported atm and test needs further work") @pytest.mark.parametrize( ["on_success", "on_failure"], [ ("sqs", "sqs"), + # TODO: test needs further work # ("sns", "sns"), # ("lambda", "lambda"), # ("eventbridge", "eventbridge") diff --git a/tests/aws/services/cloudformation/resources/test_lambda.validation.json b/tests/aws/services/cloudformation/resources/test_lambda.validation.json index 7074cf1a2a289..4d51746d55456 100644 --- a/tests/aws/services/cloudformation/resources/test_lambda.validation.json +++ b/tests/aws/services/cloudformation/resources/test_lambda.validation.json @@ -1,4 +1,7 @@ { + "tests/aws/services/cloudformation/resources/test_lambda.py::TestCfnLambdaDestinations::test_generic_destination_routing[sqs-sqs]": { + "last_validated_date": "2024-12-10T16:48:04+00:00" + }, "tests/aws/services/cloudformation/resources/test_lambda.py::TestCfnLambdaIntegrations::test_cfn_lambda_dynamodb_source": { "last_validated_date": "2024-10-12T10:46:17+00:00" }, From 1fabb6e38fc1443d0a0b3aae2421fdba2927e5d3 Mon Sep 17 00:00:00 2001 From: Joel Scheuner Date: Wed, 11 Dec 2024 10:11:06 +0100 Subject: [PATCH 2/5] Skip flaky ESM state update field --- tests/aws/services/cloudformation/resources/test_lambda.py | 7 +++++++ .../cloudformation/resources/test_lambda.validation.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tests/aws/services/cloudformation/resources/test_lambda.py b/tests/aws/services/cloudformation/resources/test_lambda.py index 5c363772f2e5c..5691c74bbadb8 100644 --- a/tests/aws/services/cloudformation/resources/test_lambda.py +++ b/tests/aws/services/cloudformation/resources/test_lambda.py @@ -51,6 +51,13 @@ def _assert_single_lambda_call(): retry(_assert_single_lambda_call, retries=30) +@markers.snapshot.skip_snapshot_verify( + [ + # TODO: Fix flaky ESM state mismatch upon update in LocalStack (expected Enabled, actual Disabled) + # This might be a parity issue if AWS does rolling updates (i.e., never disables the ESM upon update). + "$..EventSourceMappings..State", + ] +) @markers.aws.validated def test_lambda_w_dynamodb_event_filter_update(deploy_cfn_template, snapshot, aws_client): snapshot.add_transformer(snapshot.transform.dynamodb_api()) diff --git a/tests/aws/services/cloudformation/resources/test_lambda.validation.json b/tests/aws/services/cloudformation/resources/test_lambda.validation.json index 4d51746d55456..308100eed7510 100644 --- a/tests/aws/services/cloudformation/resources/test_lambda.validation.json +++ b/tests/aws/services/cloudformation/resources/test_lambda.validation.json @@ -42,7 +42,7 @@ "last_validated_date": "2024-04-09T07:21:37+00:00" }, "tests/aws/services/cloudformation/resources/test_lambda.py::test_lambda_w_dynamodb_event_filter_update": { - "last_validated_date": "2024-10-12T10:42:00+00:00" + "last_validated_date": "2024-12-11T09:03:52+00:00" }, "tests/aws/services/cloudformation/resources/test_lambda.py::test_multiple_lambda_permissions_for_singlefn": { "last_validated_date": "2024-04-09T07:25:05+00:00" From 4ad047bacd409bf6c884f5d7bf4106336d505c3e Mon Sep 17 00:00:00 2001 From: Joel Scheuner Date: Wed, 11 Dec 2024 11:33:15 +0100 Subject: [PATCH 3/5] Unskip Kinesis ESM tests --- .../test_lambda_integration_kinesis.py | 66 ++++--------------- ...t_lambda_integration_kinesis.snapshot.json | 45 ++++++------- ...lambda_integration_kinesis.validation.json | 20 +++--- 3 files changed, 48 insertions(+), 83 deletions(-) diff --git a/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py b/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py index 053c1c0581acd..fc5deef96aa02 100644 --- a/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py +++ b/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py @@ -59,17 +59,12 @@ def _snapshot_transformers(snapshot): @markers.snapshot.skip_snapshot_verify( paths=[ + # TODO: Fix transformer conflict between shardId and AWS account number (e.g., 000000000000): + # 'shardId-000000000000:' → 'shardId-111111111111:' (expected → actual) "$..Records..eventID", - "$..BisectBatchOnFunctionError", - "$..DestinationConfig", - "$..LastProcessingResult", - "$..EventSourceMappingArn", - "$..MaximumBatchingWindowInSeconds", - "$..MaximumRecordAgeInSeconds", - "$..ResponseMetadata.HTTPStatusCode", - "$..State", - "$..Topics", - "$..TumblingWindowInSeconds", + # TODO: Fix transformer issue: 'shardId-000000000000' → 'shardId-111111111111' ... (expected → actual) + "$..Messages..Body.KinesisBatchInfo.shardId", + "$..Message.KinesisBatchInfo.shardId", ], ) class TestKinesisSource: @@ -255,10 +250,7 @@ def test_duplicate_event_source_mappings( StartingPosition="LATEST", ) - # TODO: is this test relevant for the new provider without patching SYNCHRONOUS_KINESIS_EVENTS? - # At least, it is flagged as AWS-validated. @markers.aws.validated - @pytest.mark.skip(reason="deprecated config that only worked using the legacy provider") def test_kinesis_event_source_mapping_with_async_invocation( self, create_lambda_function, @@ -269,6 +261,8 @@ def test_kinesis_event_source_mapping_with_async_invocation( snapshot, aws_client, ): + """Tests that records are processed in sequence when submitting 2 batches with 10 records each + because Kinesis streams ensure strict ordering.""" function_name = f"lambda_func-{short_uid()}" stream_name = f"test-foobar-{short_uid()}" num_records_per_batch = 10 @@ -319,6 +313,8 @@ def _send_and_receive_messages(): invocation_events = retry(_send_and_receive_messages, retries=3) snapshot.match("invocation_events", invocation_events) + # Processing of the second batch should happen at least 5 seconds after first batch because the Lambda function + # of the first batch waits for 5 seconds. assert (invocation_events[1]["executionStart"] - invocation_events[0]["executionStart"]) > 5 @markers.aws.validated @@ -456,12 +452,6 @@ def _send_and_receive_messages(): aws_client.logs, function_name, expected_num_events=1, retries=10 ) - @markers.snapshot.skip_snapshot_verify( - paths=[ - "$..Messages..Body.KinesisBatchInfo.shardId", - "$..Messages..Body.KinesisBatchInfo.streamArn", - ], - ) @markers.aws.validated def test_kinesis_event_source_mapping_with_on_failure_destination_config( self, @@ -544,11 +534,8 @@ def verify_failure_received(): @markers.snapshot.skip_snapshot_verify( paths=[ - # FIXME Conflict between shardId and AWS account number when transforming - # i.e "shardId-000000000000" versus AWS Account ID 000000000000 - "$..Messages..Body.KinesisBatchInfo.shardId", - "$..Messages..Body.KinesisBatchInfo.streamArn", - "$..Records", # FIXME Figure out why there is an extra log record + # TODO: Figure out why there is an extra log record + "$..Records", ], ) @markers.aws.validated @@ -643,11 +630,6 @@ def verify_failure_received(): snapshot.match("kinesis_records", {"Records": sorted_records}) @markers.aws.validated - @markers.snapshot.skip_snapshot_verify( - paths=[ - "$..Messages..Body.KinesisBatchInfo.shardId", - ], - ) @pytest.mark.parametrize( "set_lambda_response", [ @@ -746,12 +728,6 @@ def verify_failure_received(): invocation_events = [event for event in events if "Records" in event] snapshot.match("kinesis_events", invocation_events) - @markers.snapshot.skip_snapshot_verify( - paths=[ - "$..Message.KinesisBatchInfo.shardId", - "$..Message.KinesisBatchInfo.streamArn", - ], - ) @markers.aws.validated def test_kinesis_event_source_mapping_with_sns_on_failure_destination_config( self, @@ -859,11 +835,6 @@ def verify_failure_received(): snapshot.match("failure_sns_message", failure_sns_message) @markers.aws.validated - @markers.snapshot.skip_snapshot_verify( - paths=[ - "$..Messages..Body.KinesisBatchInfo.shardId", - ], - ) @pytest.mark.parametrize( "set_lambda_response", [ @@ -950,7 +921,8 @@ def _verify_messages_received(): @markers.aws.validated @markers.snapshot.skip_snapshot_verify( paths=[ - "$..Messages..Body.KinesisBatchInfo.shardId", + # TODO: Fix flaky status 'OK' → 'No records processed' ... (expected → actual) + "$..LastProcessingResult", ], ) def test_kinesis_empty_provided( @@ -1016,18 +988,6 @@ def _verify_invoke(): # TODO: add tests for different edge cases in filtering (e.g. message isn't json => needs to be dropped) # https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventfiltering.html#filtering-kinesis class TestKinesisEventFiltering: - @markers.snapshot.skip_snapshot_verify( - paths=[ - # Lifecycle updates not yet implemented in ESM v2 - "$..LastProcessingResult", - ], - ) - @markers.snapshot.skip_snapshot_verify( - paths=[ - "$..Messages..Body.KinesisBatchInfo.shardId", - "$..Messages..Body.KinesisBatchInfo.streamArn", - ], - ) @markers.aws.validated def test_kinesis_event_filtering_json_pattern( self, diff --git a/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.snapshot.json b/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.snapshot.json index 0e7458e9873e5..b2bd5fac3da3a 100644 --- a/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.snapshot.json +++ b/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.snapshot.json @@ -195,7 +195,7 @@ } }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_event_source_mapping_with_async_invocation": { - "recorded-date": "27-02-2023, 16:55:08", + "recorded-date": "11-12-2024, 09:54:54", "recorded-content": { "create_event_source_mapping_response": { "BatchSize": 10, @@ -204,9 +204,10 @@ "OnFailure": {} }, "EventSourceArn": "arn::kinesis::111111111111:stream/", + "EventSourceMappingArn": "arn::lambda::111111111111:event-source-mapping:", "FunctionArn": "arn::lambda::111111111111:function:", "FunctionResponseTypes": [], - "LastModified": "datetime", + "LastModified": "", "LastProcessingResult": "No records processed", "MaximumBatchingWindowInSeconds": 0, "MaximumRecordAgeInSeconds": -1, @@ -233,7 +234,7 @@ "partitionKey": "test_0", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiAwfQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -249,7 +250,7 @@ "partitionKey": "test_0", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiAxfQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -265,7 +266,7 @@ "partitionKey": "test_0", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiAyfQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -281,7 +282,7 @@ "partitionKey": "test_0", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiAzfQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -297,7 +298,7 @@ "partitionKey": "test_0", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiA0fQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -313,7 +314,7 @@ "partitionKey": "test_0", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiA1fQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -329,7 +330,7 @@ "partitionKey": "test_0", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiA2fQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -345,7 +346,7 @@ "partitionKey": "test_0", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiA3fQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -361,7 +362,7 @@ "partitionKey": "test_0", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiA4fQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -377,7 +378,7 @@ "partitionKey": "test_0", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiA5fQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -400,7 +401,7 @@ "partitionKey": "test_1", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiAwfQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -416,7 +417,7 @@ "partitionKey": "test_1", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiAxfQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -432,7 +433,7 @@ "partitionKey": "test_1", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiAyfQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -448,7 +449,7 @@ "partitionKey": "test_1", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiAzfQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -464,7 +465,7 @@ "partitionKey": "test_1", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiA0fQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -480,7 +481,7 @@ "partitionKey": "test_1", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiA1fQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -496,7 +497,7 @@ "partitionKey": "test_1", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiA2fQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -512,7 +513,7 @@ "partitionKey": "test_1", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiA3fQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -528,7 +529,7 @@ "partitionKey": "test_1", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiA4fQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", @@ -544,7 +545,7 @@ "partitionKey": "test_1", "sequenceNumber": "", "data": "eyJyZWNvcmRfaWQiOiA5fQ==", - "approximateArrivalTimestamp": "timestamp" + "approximateArrivalTimestamp": "" }, "eventSource": "aws:kinesis", "eventVersion": "1.0", diff --git a/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.validation.json b/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.validation.json index ed33b95838a11..a42e219ce7cc2 100644 --- a/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.validation.json +++ b/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.validation.json @@ -1,8 +1,9 @@ { - "test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_event_source_mapping_with_on_failure_destination_config": { - "last_validated_date": "2023-02-27T16:01:08+00:00" - }, - "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisEventFiltering::test_kinesis_event_filtering_json_pattern": { + "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_event_source_mapping_with_async_invocation": { + "last_validated_date": "2024-12-11T09:56:46+00:00" + } +} +source_mapping/test_lambda_integration_kinesis.py::TestKinesisEventFiltering::test_kinesis_event_filtering_json_pattern": { "last_validated_date": "2024-10-12T13:31:49+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_create_kinesis_event_source_mapping": { @@ -21,7 +22,7 @@ "last_validated_date": "2024-10-11T11:04:52+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_event_source_mapping_with_async_invocation": { - "last_validated_date": "2023-02-27T15:55:08+00:00" + "last_validated_date": "2024-12-11T09:54:52+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_event_source_mapping_with_on_failure_destination_config": { "last_validated_date": "2024-10-12T12:27:07+00:00" @@ -62,9 +63,6 @@ "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_success_scenarios[empty_list_success]": { "last_validated_date": "2024-10-12T13:21:23+00:00" }, - "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_success_scenarios[empty_string_success]": { - "last_validated_date": "2024-10-12T13:19:35+00:00" - }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_success_scenarios[empty_string_success]": { "last_validated_date": "2024-10-11T12:38:13+00:00" }, @@ -75,3 +73,9 @@ "last_validated_date": "2024-10-12T13:23:12+00:00" } } +" + }, + "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_success_scenarios[null_success]": { + "last_validated_date": "2024-10-12T13:23:12+00:00" + } +} From 376b6a9020c0317682484de7657495988abe4274 Mon Sep 17 00:00:00 2001 From: Joel Scheuner Date: Wed, 11 Dec 2024 14:46:15 +0100 Subject: [PATCH 4/5] Unskip passing SQS ESM tests --- .../test_lambda_integration_sqs.py | 70 +++---------------- .../test_lambda_integration_sqs.snapshot.json | 42 +++++------ ...est_lambda_integration_sqs.validation.json | 8 +-- 3 files changed, 36 insertions(+), 84 deletions(-) diff --git a/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.py b/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.py index b67665ff563c3..964ebd08674c4 100644 --- a/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.py +++ b/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.py @@ -55,18 +55,6 @@ def _snapshot_transformers(snapshot): ) -@markers.snapshot.skip_snapshot_verify( - paths=[ - # FIXME: this is most of the event source mapping unfortunately - "$..ParallelizationFactor", - "$..LastProcessingResult", - "$..Topics", - "$..MaximumRetryAttempts", - "$..MaximumBatchingWindowInSeconds", - "$..StartingPosition", - "$..StateTransitionReason", - ] -) @markers.aws.validated def test_failing_lambda_retries_after_visibility_timeout( create_lambda_function, @@ -242,17 +230,6 @@ def test_message_body_and_attributes_passed_correctly( snapshot.match("first_attempt", response) -@markers.snapshot.skip_snapshot_verify( - paths=[ - "$..ParallelizationFactor", - "$..LastProcessingResult", - "$..Topics", - "$..MaximumRetryAttempts", - "$..MaximumBatchingWindowInSeconds", - "$..StartingPosition", - "$..StateTransitionReason", - ] -) @markers.aws.validated def test_redrive_policy_with_failing_lambda( create_lambda_function, @@ -412,27 +389,6 @@ def receive_dlq(): # TODO: flaky against AWS -@markers.snapshot.skip_snapshot_verify( - paths=[ - # FIXME: we don't seem to be returning SQS FIFO sequence numbers correctly - "$..SequenceNumber", - # no idea why this one fails - "$..receiptHandle", - # matching these attributes doesn't work well because of the dynamic nature of messages - "$..md5OfBody", - "$..MD5OfMessageBody", - # FIXME: this is most of the event source mapping unfortunately - "$..create_event_source_mapping.ParallelizationFactor", - "$..create_event_source_mapping.LastProcessingResult", - "$..create_event_source_mapping.Topics", - "$..create_event_source_mapping.MaximumRetryAttempts", - "$..create_event_source_mapping.MaximumBatchingWindowInSeconds", - "$..create_event_source_mapping.StartingPosition", - "$..create_event_source_mapping.StateTransitionReason", - "$..create_event_source_mapping.State", - "$..create_event_source_mapping.ResponseMetadata", - ] -) @markers.aws.validated def test_report_batch_item_failures( create_lambda_function, @@ -923,17 +879,6 @@ def test_fifo_message_group_parallelism( @markers.snapshot.skip_snapshot_verify( paths=[ - # create event source mapping attributes - "$..FunctionResponseTypes", - "$..LastProcessingResult", - "$..MaximumBatchingWindowInSeconds", - "$..MaximumRetryAttempts", - "$..ParallelizationFactor", - "$..ResponseMetadata.HTTPStatusCode", - "$..StartingPosition", - "$..State", - "$..StateTransitionReason", - "$..Topics", # events attribute "$..Records..md5OfMessageAttributes", ], @@ -1057,6 +1002,12 @@ def test_sqs_event_source_mapping_batch_size( ): snapshot.add_transformer(snapshot.transform.sqs_api()) snapshot.add_transformer(SortingTransformer("Records", lambda s: s["body"]), priority=-1) + # Intentional parity difference to speed up testing in LocalStack + snapshot.add_transformer( + snapshot.transform.key_value( + "MaximumBatchingWindowInSeconds", reference_replacement=False + ) + ) destination_queue_name = f"destination-queue-{short_uid()}" function_name = f"lambda_func-{short_uid()}" @@ -1078,6 +1029,7 @@ def test_sqs_event_source_mapping_batch_size( create_event_source_mapping_response = aws_client.lambda_.create_event_source_mapping( EventSourceArn=queue_arn, FunctionName=function_name, + # Speed up testing in LocalStack by waiting only up to 2s instead of up to 10s; AWS is slower. MaximumBatchingWindowInSeconds=10 if is_aws_cloud() else 2, BatchSize=batch_size, ) @@ -1086,17 +1038,17 @@ def test_sqs_event_source_mapping_batch_size( snapshot.match("create-event-source-mapping-response", create_event_source_mapping_response) _await_event_source_mapping_enabled(aws_client.lambda_, mapping_uuid) - reponse_batch_send_10 = aws_client.sqs.send_message_batch( + response_batch_send_10 = aws_client.sqs.send_message_batch( QueueUrl=queue_url, Entries=[{"Id": f"{i}-0", "MessageBody": f"{i}-0-message-{i}"} for i in range(10)], ) - snapshot.match("send-message-batch-result-10", reponse_batch_send_10) + snapshot.match("send-message-batch-result-10", response_batch_send_10) - reponse_batch_send_5 = aws_client.sqs.send_message_batch( + response_batch_send_5 = aws_client.sqs.send_message_batch( QueueUrl=queue_url, Entries=[{"Id": f"{i}-1", "MessageBody": f"{i}-1-message-{i}"} for i in range(5)], ) - snapshot.match("send-message-batch-result-5", reponse_batch_send_5) + snapshot.match("send-message-batch-result-5", response_batch_send_5) batches = [] diff --git a/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.snapshot.json b/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.snapshot.json index 7ff32c8fd5937..9483962dfb652 100644 --- a/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.snapshot.json +++ b/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.snapshot.json @@ -1664,7 +1664,7 @@ } }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.py::TestSQSEventSourceMapping::test_sqs_event_source_mapping_batch_size[15]": { - "recorded-date": "26-11-2024, 13:43:42", + "recorded-date": "11-12-2024, 13:42:57", "recorded-content": { "create-event-source-mapping-response": { "BatchSize": 15, @@ -1673,7 +1673,7 @@ "FunctionArn": "arn::lambda::111111111111:function:", "FunctionResponseTypes": [], "LastModified": "", - "MaximumBatchingWindowInSeconds": 10, + "MaximumBatchingWindowInSeconds": "maximum-batching-window-in-seconds", "State": "Creating", "StateTransitionReason": "USER_INITIATED", "UUID": "", @@ -1785,8 +1785,8 @@ "ApproximateFirstReceiveTimestamp": "" }, "messageAttributes": {}, - "md5OfMessageAttributes": null, "md5OfBody": "", + "md5OfMessageAttributes": null, "eventSource": "aws:sqs", "eventSourceARN": "arn::sqs::111111111111:", "awsRegion": "" @@ -1836,8 +1836,8 @@ "ApproximateFirstReceiveTimestamp": "" }, "messageAttributes": {}, - "md5OfMessageAttributes": null, "md5OfBody": "", + "md5OfMessageAttributes": null, "eventSource": "aws:sqs", "eventSourceARN": "arn::sqs::111111111111:", "awsRegion": "" @@ -1904,8 +1904,8 @@ "ApproximateFirstReceiveTimestamp": "" }, "messageAttributes": {}, - "md5OfMessageAttributes": null, "md5OfBody": "", + "md5OfMessageAttributes": null, "eventSource": "aws:sqs", "eventSourceARN": "arn::sqs::111111111111:", "awsRegion": "" @@ -2023,8 +2023,8 @@ "ApproximateFirstReceiveTimestamp": "" }, "messageAttributes": {}, - "md5OfMessageAttributes": null, "md5OfBody": "", + "md5OfMessageAttributes": null, "eventSource": "aws:sqs", "eventSourceARN": "arn::sqs::111111111111:", "awsRegion": "" @@ -2579,7 +2579,7 @@ } }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.py::TestSQSEventSourceMapping::test_sqs_event_source_mapping_batch_size[100]": { - "recorded-date": "26-11-2024, 13:44:40", + "recorded-date": "11-12-2024, 13:43:49", "recorded-content": { "create-event-source-mapping-response": { "BatchSize": 100, @@ -2588,7 +2588,7 @@ "FunctionArn": "arn::lambda::111111111111:function:", "FunctionResponseTypes": [], "LastModified": "", - "MaximumBatchingWindowInSeconds": 10, + "MaximumBatchingWindowInSeconds": "maximum-batching-window-in-seconds", "State": "Creating", "StateTransitionReason": "USER_INITIATED", "UUID": "", @@ -2734,8 +2734,8 @@ "ApproximateFirstReceiveTimestamp": "" }, "messageAttributes": {}, - "md5OfBody": "", "md5OfMessageAttributes": null, + "md5OfBody": "", "eventSource": "aws:sqs", "eventSourceARN": "arn::sqs::111111111111:", "awsRegion": "" @@ -2751,8 +2751,8 @@ "ApproximateFirstReceiveTimestamp": "" }, "messageAttributes": {}, - "md5OfBody": "", "md5OfMessageAttributes": null, + "md5OfBody": "", "eventSource": "aws:sqs", "eventSourceARN": "arn::sqs::111111111111:", "awsRegion": "" @@ -2768,8 +2768,8 @@ "ApproximateFirstReceiveTimestamp": "" }, "messageAttributes": {}, - "md5OfBody": "", "md5OfMessageAttributes": null, + "md5OfBody": "", "eventSource": "aws:sqs", "eventSourceARN": "arn::sqs::111111111111:", "awsRegion": "" @@ -2802,8 +2802,8 @@ "ApproximateFirstReceiveTimestamp": "" }, "messageAttributes": {}, - "md5OfBody": "", "md5OfMessageAttributes": null, + "md5OfBody": "", "eventSource": "aws:sqs", "eventSourceARN": "arn::sqs::111111111111:", "awsRegion": "" @@ -2819,8 +2819,8 @@ "ApproximateFirstReceiveTimestamp": "" }, "messageAttributes": {}, - "md5OfBody": "", "md5OfMessageAttributes": null, + "md5OfBody": "", "eventSource": "aws:sqs", "eventSourceARN": "arn::sqs::111111111111:", "awsRegion": "" @@ -2836,8 +2836,8 @@ "ApproximateFirstReceiveTimestamp": "" }, "messageAttributes": {}, - "md5OfBody": "", "md5OfMessageAttributes": null, + "md5OfBody": "", "eventSource": "aws:sqs", "eventSourceARN": "arn::sqs::111111111111:", "awsRegion": "" @@ -2853,8 +2853,8 @@ "ApproximateFirstReceiveTimestamp": "" }, "messageAttributes": {}, - "md5OfBody": "", "md5OfMessageAttributes": null, + "md5OfBody": "", "eventSource": "aws:sqs", "eventSourceARN": "arn::sqs::111111111111:", "awsRegion": "" @@ -2904,8 +2904,8 @@ "ApproximateFirstReceiveTimestamp": "" }, "messageAttributes": {}, - "md5OfBody": "", "md5OfMessageAttributes": null, + "md5OfBody": "", "eventSource": "aws:sqs", "eventSourceARN": "arn::sqs::111111111111:", "awsRegion": "" @@ -2938,8 +2938,8 @@ "ApproximateFirstReceiveTimestamp": "" }, "messageAttributes": {}, - "md5OfBody": "", "md5OfMessageAttributes": null, + "md5OfBody": "", "eventSource": "aws:sqs", "eventSourceARN": "arn::sqs::111111111111:", "awsRegion": "" @@ -2948,7 +2948,7 @@ } }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.py::TestSQSEventSourceMapping::test_sqs_event_source_mapping_batch_size[1000]": { - "recorded-date": "26-11-2024, 13:45:41", + "recorded-date": "11-12-2024, 13:44:40", "recorded-content": { "create-event-source-mapping-response": { "BatchSize": 1000, @@ -2957,7 +2957,7 @@ "FunctionArn": "arn::lambda::111111111111:function:", "FunctionResponseTypes": [], "LastModified": "", - "MaximumBatchingWindowInSeconds": 10, + "MaximumBatchingWindowInSeconds": "maximum-batching-window-in-seconds", "State": "Creating", "StateTransitionReason": "USER_INITIATED", "UUID": "", @@ -3317,7 +3317,7 @@ } }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.py::TestSQSEventSourceMapping::test_sqs_event_source_mapping_batch_size[10000]": { - "recorded-date": "26-11-2024, 13:46:48", + "recorded-date": "11-12-2024, 13:45:32", "recorded-content": { "create-event-source-mapping-response": { "BatchSize": 10000, @@ -3326,7 +3326,7 @@ "FunctionArn": "arn::lambda::111111111111:function:", "FunctionResponseTypes": [], "LastModified": "", - "MaximumBatchingWindowInSeconds": 10, + "MaximumBatchingWindowInSeconds": "maximum-batching-window-in-seconds", "State": "Creating", "StateTransitionReason": "USER_INITIATED", "UUID": "", diff --git a/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.validation.json b/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.validation.json index 78db21ed15025..47bf99bb18e53 100644 --- a/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.validation.json +++ b/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.validation.json @@ -33,16 +33,16 @@ "last_validated_date": "2024-11-25T15:46:54+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.py::TestSQSEventSourceMapping::test_sqs_event_source_mapping_batch_size[10000]": { - "last_validated_date": "2024-11-26T13:46:45+00:00" + "last_validated_date": "2024-12-11T13:45:31+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.py::TestSQSEventSourceMapping::test_sqs_event_source_mapping_batch_size[1000]": { - "last_validated_date": "2024-11-26T13:45:39+00:00" + "last_validated_date": "2024-12-11T13:44:38+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.py::TestSQSEventSourceMapping::test_sqs_event_source_mapping_batch_size[100]": { - "last_validated_date": "2024-11-26T13:44:38+00:00" + "last_validated_date": "2024-12-11T13:43:48+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.py::TestSQSEventSourceMapping::test_sqs_event_source_mapping_batch_size[15]": { - "last_validated_date": "2024-11-26T13:43:39+00:00" + "last_validated_date": "2024-12-11T13:42:55+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_sqs.py::TestSQSEventSourceMapping::test_sqs_event_source_mapping_batching_reserved_concurrency": { "last_validated_date": "2024-11-29T13:29:53+00:00" From 46fac99f1618532f70162df891d1ed9cd38955be Mon Sep 17 00:00:00 2001 From: Joel Scheuner Date: Sat, 14 Dec 2024 12:23:02 +0100 Subject: [PATCH 5/5] Fix broken validation file --- ...lambda_integration_kinesis.validation.json | 59 ++++++++----------- 1 file changed, 23 insertions(+), 36 deletions(-) diff --git a/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.validation.json b/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.validation.json index a42e219ce7cc2..cfe5d0c6a437a 100644 --- a/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.validation.json +++ b/tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.validation.json @@ -1,81 +1,68 @@ { - "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_event_source_mapping_with_async_invocation": { - "last_validated_date": "2024-12-11T09:56:46+00:00" - } -} -source_mapping/test_lambda_integration_kinesis.py::TestKinesisEventFiltering::test_kinesis_event_filtering_json_pattern": { - "last_validated_date": "2024-10-12T13:31:49+00:00" + "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisEventFiltering::test_kinesis_event_filtering_json_pattern": { + "last_validated_date": "2024-12-13T14:48:09+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_create_kinesis_event_source_mapping": { - "last_validated_date": "2024-10-12T11:47:14+00:00" + "last_validated_date": "2024-12-13T14:01:07+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_create_kinesis_event_source_mapping_multiple_lambdas_single_kinesis_event_stream": { - "last_validated_date": "2024-10-12T13:58:15+00:00" + "last_validated_date": "2024-12-13T14:02:48+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_disable_kinesis_event_source_mapping": { - "last_validated_date": "2024-10-12T11:54:19+00:00" + "last_validated_date": "2024-12-13T14:10:20+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_duplicate_event_source_mappings": { - "last_validated_date": "2024-10-12T11:48:44+00:00" + "last_validated_date": "2024-12-13T14:03:01+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_empty_provided": { - "last_validated_date": "2024-10-11T11:04:52+00:00" + "last_validated_date": "2024-12-13T14:45:29+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_event_source_mapping_with_async_invocation": { - "last_validated_date": "2024-12-11T09:54:52+00:00" - }, - "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_event_source_mapping_with_on_failure_destination_config": { - "last_validated_date": "2024-10-12T12:27:07+00:00" + "last_validated_date": "2024-12-13T14:04:46+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_event_source_mapping_with_sns_on_failure_destination_config": { - "last_validated_date": "2024-10-12T13:17:51+00:00" + "last_validated_date": "2024-12-13T14:35:43+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_event_source_trim_horizon": { - "last_validated_date": "2024-10-12T11:50:50+00:00" + "last_validated_date": "2024-12-13T14:06:49+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_failure_scenarios[empty_string_item_identifier_failure]": { - "last_validated_date": "2024-10-12T13:08:07+00:00" + "last_validated_date": "2024-12-13T14:23:18+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_failure_scenarios[invalid_key_foo_failure]": { - "last_validated_date": "2024-10-12T13:13:16+00:00" + "last_validated_date": "2024-12-13T14:27:36+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_failure_scenarios[invalid_key_foo_null_value_failure]": { - "last_validated_date": "2024-10-12T13:14:10+00:00" + "last_validated_date": "2024-12-13T14:31:32+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_failure_scenarios[item_identifier_not_present_failure]": { - "last_validated_date": "2024-10-12T13:06:11+00:00" + "last_validated_date": "2024-12-13T14:20:08+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_failure_scenarios[null_item_identifier_failure]": { - "last_validated_date": "2024-10-12T13:10:18+00:00" + "last_validated_date": "2024-12-13T14:25:26+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_failure_scenarios[unhandled_exception_in_function]": { - "last_validated_date": "2024-10-14T18:10:14+00:00" + "last_validated_date": "2024-12-13T14:34:41+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_failures": { - "last_validated_date": "2024-10-12T14:17:03+00:00" + "last_validated_date": "2024-12-13T14:18:13+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_success_scenarios[empty_batch_item_failure_success]": { - "last_validated_date": "2024-10-12T13:27:09+00:00" + "last_validated_date": "2024-12-13T14:42:49+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_success_scenarios[empty_dict_success]": { - "last_validated_date": "2024-10-12T13:25:11+00:00" + "last_validated_date": "2024-12-13T14:41:30+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_success_scenarios[empty_list_success]": { - "last_validated_date": "2024-10-12T13:21:23+00:00" + "last_validated_date": "2024-12-13T14:38:21+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_success_scenarios[empty_string_success]": { - "last_validated_date": "2024-10-11T12:38:13+00:00" + "last_validated_date": "2024-12-13T14:37:20+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_success_scenarios[null_batch_item_failure_success]": { - "last_validated_date": "2024-10-12T13:28:03+00:00" - }, - "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_success_scenarios[null_success]": { - "last_validated_date": "2024-10-12T13:23:12+00:00" - } -} -" + "last_validated_date": "2024-12-13T14:44:14+00:00" }, "tests/aws/services/lambda_/event_source_mapping/test_lambda_integration_kinesis.py::TestKinesisSource::test_kinesis_report_batch_item_success_scenarios[null_success]": { - "last_validated_date": "2024-10-12T13:23:12+00:00" + "last_validated_date": "2024-12-13T14:39:47+00:00" } }