From eef1b2d0f94d5efca43bc855df4d5a6017a88ab2 Mon Sep 17 00:00:00 2001 From: Greg Furman Date: Thu, 5 Dec 2024 13:04:38 +0200 Subject: [PATCH] [ESM] Raise exception when setting DestinationConfig.OnSuccess --- .../localstack/services/lambda_/provider.py | 7 +++++++ tests/aws/services/lambda_/test_lambda_api.py | 13 +++++++++++++ .../services/lambda_/test_lambda_api.snapshot.json | 14 +++++++++++++- .../lambda_/test_lambda_api.validation.json | 2 +- 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/localstack-core/localstack/services/lambda_/provider.py b/localstack-core/localstack/services/lambda_/provider.py index 9abf3cebac384..ea6b620bc3b5b 100644 --- a/localstack-core/localstack/services/lambda_/provider.py +++ b/localstack-core/localstack/services/lambda_/provider.py @@ -1889,6 +1889,13 @@ def validate_event_source_mapping(self, context, request): # TODO: test whether stream ARNs are valid sources for Pipes or ESM or whether only DynamoDB table ARNs work is_create_esm_request = context.operation.name == self.create_event_source_mapping.operation + if destination_config := request.get("DestinationConfig"): + if "OnSuccess" in destination_config: + raise InvalidParameterValueException( + "Unsupported DestinationConfig parameter for given event source mapping type.", + Type="User", + ) + service = None if "SelfManagedEventSource" in request: service = "kafka" diff --git a/tests/aws/services/lambda_/test_lambda_api.py b/tests/aws/services/lambda_/test_lambda_api.py index bd69fd5e591f0..00af4e338d74f 100644 --- a/tests/aws/services/lambda_/test_lambda_api.py +++ b/tests/aws/services/lambda_/test_lambda_api.py @@ -5337,6 +5337,19 @@ def test_event_source_mapping_exceptions(self, snapshot, aws_client): EventSourceArn="arn:aws:sqs:us-east-1:111111111111:somequeue", ) snapshot.match("create_unknown_params", e.value.response) + + with pytest.raises(aws_client.lambda_.exceptions.InvalidParameterValueException) as e: + aws_client.lambda_.create_event_source_mapping( + FunctionName="doesnotexist", + EventSourceArn="arn:aws:sqs:us-east-1:111111111111:somequeue", + DestinationConfig={ + "OnSuccess": { + "Destination": "arn:aws:sqs:us-east-1:111111111111:someotherqueue" + } + }, + ) + snapshot.match("destination_config_failure", e.value.response) + # TODO: add test for event source arn == failure destination # TODO: add test for adding success destination # TODO: add test_multiple_esm_conflict: create an event source mapping for a combination of function + target ARN that already exists diff --git a/tests/aws/services/lambda_/test_lambda_api.snapshot.json b/tests/aws/services/lambda_/test_lambda_api.snapshot.json index 2a586a29b4c3b..755c1bd6bc7cc 100644 --- a/tests/aws/services/lambda_/test_lambda_api.snapshot.json +++ b/tests/aws/services/lambda_/test_lambda_api.snapshot.json @@ -5791,7 +5791,7 @@ } }, "tests/aws/services/lambda_/test_lambda_api.py::TestLambdaEventSourceMappings::test_event_source_mapping_exceptions": { - "recorded-date": "10-04-2024, 09:19:37", + "recorded-date": "05-12-2024, 10:52:30", "recorded-content": { "get_unknown_uuid": { "Error": { @@ -5852,6 +5852,18 @@ "HTTPHeaders": {}, "HTTPStatusCode": 400 } + }, + "destination_config_failure": { + "Error": { + "Code": "InvalidParameterValueException", + "Message": "Unsupported DestinationConfig parameter for given event source mapping type." + }, + "Type": "User", + "message": "Unsupported DestinationConfig parameter for given event source mapping type.", + "ResponseMetadata": { + "HTTPHeaders": {}, + "HTTPStatusCode": 400 + } } } }, diff --git a/tests/aws/services/lambda_/test_lambda_api.validation.json b/tests/aws/services/lambda_/test_lambda_api.validation.json index 97b90d0083c9a..ea6960aeabae6 100644 --- a/tests/aws/services/lambda_/test_lambda_api.validation.json +++ b/tests/aws/services/lambda_/test_lambda_api.validation.json @@ -42,7 +42,7 @@ "last_validated_date": "2024-04-10T09:21:59+00:00" }, "tests/aws/services/lambda_/test_lambda_api.py::TestLambdaEventSourceMappings::test_event_source_mapping_exceptions": { - "last_validated_date": "2024-04-10T09:19:37+00:00" + "last_validated_date": "2024-12-05T10:52:30+00:00" }, "tests/aws/services/lambda_/test_lambda_api.py::TestLambdaEventSourceMappings::test_event_source_mapping_lifecycle": { "last_validated_date": "2024-10-14T12:36:54+00:00"