Skip to content

fix: Call correct exception when Connectors attribute is non-dict #3022

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Mar 13, 2023
2 changes: 1 addition & 1 deletion samtranslator/translator/translator.py
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ def _get_embedded_connectors(self, resources: Dict[str, Any]) -> List[Resource]:
).to_be_a_map()
except InvalidResourceException as e:
self.document_errors.append(e)

continue
for connector_logical_id, connector_dict in resource["Connectors"].items():
try:
full_connector_logical_id = source_logical_id + connector_logical_id
Expand Down
8 changes: 8 additions & 0 deletions tests/translator/input/error_embedded_connectors.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -181,3 +181,11 @@ Resources:
Runtime: python3.9
InlineCode: foo
Handler: foo

NoneTypeConnector:
Connectors:
Type: AWS::Serverless::Function
Properties:
Runtime: python3.9
InlineCode: foo
Handler: foo
6 changes: 4 additions & 2 deletions tests/translator/output/error_embedded_connectors.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"_autoGeneratedBreakdownErrorMessage": [
"Invalid Serverless Application Specification document. ",
"Number of errors found: 24. ",
"Number of errors found: 25. ",
"Transforming resource with id [DuplicateTest] attempts to create a new resource with id [DuplicateTestDuplicateId] and type \"AWS::Serverless::Connector\". ",
"A resource with that id already exists within this template. ",
"Please use a different id for that resource. ",
Expand Down Expand Up @@ -49,8 +49,10 @@
"Unsupported 'Permissions' provided for connector from AWS::SQS::Queue to AWS::Lambda::Function; valid combinations are: Read + Write. ",
"Resource with id [MyResourceWithoutTypeResourceWithoutType] is invalid. ",
"'Type' is missing or not a string. ",
"Resource with id [NoneTypeConnector] is invalid. ",
"Attribute 'NoneTypeConnector.Connectors' should be a map. ",
"Resource with id [TestSourceReferenceId] is invalid. ",
"'Id' shouldn't be defined in 'SourceReference'."
],
"errorMessage": "Invalid Serverless Application Specification document. Number of errors found: 24. Transforming resource with id [DuplicateTest] attempts to create a new resource with id [DuplicateTestDuplicateId] and type \"AWS::Serverless::Connector\". A resource with that id already exists within this template. Please use a different id for that resource. Resource with id [EventsRuleMissingLambdaFunctionArn] is invalid. Unable to get Lambda function ARN from 'Destination' resource. Resource with id [EventsRuleMissingSnsTopicArn] is invalid. Destination.Arn is missing. Resource with id [EventsRuleMissingSqsQueueUrl] is invalid. Unable to create connector from AWS::Events::Rule to AWS::SQS:Queue; it's not supported or the template is invalid. Resource with id [MyFunction] is invalid. Attribute 'Connectors.NoProperties.Properties' should be a map. Resource with id [MyFunction] is invalid. Attribute 'Connectors.NonDictProperties.Properties' should be a map. Resource with id [MyFunction] is invalid. Attribute 'Connectors.EmptyProperties.Properties' should be a map. Resource with id [MyFunction] is invalid. Property 'Connectors.NonDictSourceReference.Properties.SourceReference' should be a map. Resource with id [MyFunctionBothIdAndOtherProps] is invalid. Must provide 'Id' (with optional 'Qualifier') or a supported combination of other properties. Resource with id [MyFunctionEmptyDestination] is invalid. Missing required property 'Destination'. Resource with id [MyFunctionEmptyPermissions] is invalid. Missing required property 'Permissions'. Resource with id [MyFunctionEmptyPermissionsList] is invalid. 'Permissions' cannot be empty; valid values are: Read, Write. Resource with id [MyFunctionMissingRoleMissingRole] is invalid. Unable to get IAM role name from 'Source' resource. Resource with id [MyFunctionNoDestination] is invalid. Missing required property 'Destination'. Resource with id [MyFunctionNoDictConnectorNonDictConnector] is invalid. MyFunctionNoDictConnector.MyFunctionNoDictConnectorNonDictConnector should be a map. Resource with id [MyFunctionNoIdMissingType] is invalid. 'Type' is missing or not a string. Resource with id [MyFunctionNoPermissions] is invalid. Missing required property 'Permissions'. Resource with id [MyFunctionNoStrId] is invalid. 'Id' is missing or not a string. Resource with id [MyFunctionNonExistentId] is invalid. Unable to find resource with logical ID 'ThisDoesntExist'. Resource with id [MyFunctionUnsupportedAccessCategory] is invalid. Unsupported 'Permissions' provided for connector from AWS::Lambda::Function to AWS::SQS::Queue; valid values are: Read, Write. Resource with id [MyQueueMissingRoleDestination] is invalid. Unable to get IAM role name from 'Destination' resource. Resource with id [MyQueueUnsupportedAccessCategoryCombination] is invalid. Unsupported 'Permissions' provided for connector from AWS::SQS::Queue to AWS::Lambda::Function; valid combinations are: Read + Write. Resource with id [MyResourceWithoutTypeResourceWithoutType] is invalid. 'Type' is missing or not a string. Resource with id [TestSourceReferenceId] is invalid. 'Id' shouldn't be defined in 'SourceReference'."
"errorMessage": "Invalid Serverless Application Specification document. Number of errors found: 25. Transforming resource with id [DuplicateTest] attempts to create a new resource with id [DuplicateTestDuplicateId] and type \"AWS::Serverless::Connector\". A resource with that id already exists within this template. Please use a different id for that resource. Resource with id [EventsRuleMissingLambdaFunctionArn] is invalid. Unable to get Lambda function ARN from 'Destination' resource. Resource with id [EventsRuleMissingSnsTopicArn] is invalid. Destination.Arn is missing. Resource with id [EventsRuleMissingSqsQueueUrl] is invalid. Unable to create connector from AWS::Events::Rule to AWS::SQS:Queue; it's not supported or the template is invalid. Resource with id [MyFunction] is invalid. Attribute 'Connectors.NoProperties.Properties' should be a map. Resource with id [MyFunction] is invalid. Attribute 'Connectors.NonDictProperties.Properties' should be a map. Resource with id [MyFunction] is invalid. Attribute 'Connectors.EmptyProperties.Properties' should be a map. Resource with id [MyFunction] is invalid. Property 'Connectors.NonDictSourceReference.Properties.SourceReference' should be a map. Resource with id [MyFunctionBothIdAndOtherProps] is invalid. Must provide 'Id' (with optional 'Qualifier') or a supported combination of other properties. Resource with id [MyFunctionEmptyDestination] is invalid. Missing required property 'Destination'. Resource with id [MyFunctionEmptyPermissions] is invalid. Missing required property 'Permissions'. Resource with id [MyFunctionEmptyPermissionsList] is invalid. 'Permissions' cannot be empty; valid values are: Read, Write. Resource with id [MyFunctionMissingRoleMissingRole] is invalid. Unable to get IAM role name from 'Source' resource. Resource with id [MyFunctionNoDestination] is invalid. Missing required property 'Destination'. Resource with id [MyFunctionNoDictConnectorNonDictConnector] is invalid. MyFunctionNoDictConnector.MyFunctionNoDictConnectorNonDictConnector should be a map. Resource with id [MyFunctionNoIdMissingType] is invalid. 'Type' is missing or not a string. Resource with id [MyFunctionNoPermissions] is invalid. Missing required property 'Permissions'. Resource with id [MyFunctionNoStrId] is invalid. 'Id' is missing or not a string. Resource with id [MyFunctionNonExistentId] is invalid. Unable to find resource with logical ID 'ThisDoesntExist'. Resource with id [MyFunctionUnsupportedAccessCategory] is invalid. Unsupported 'Permissions' provided for connector from AWS::Lambda::Function to AWS::SQS::Queue; valid values are: Read, Write. Resource with id [MyQueueMissingRoleDestination] is invalid. Unable to get IAM role name from 'Destination' resource. Resource with id [MyQueueUnsupportedAccessCategoryCombination] is invalid. Unsupported 'Permissions' provided for connector from AWS::SQS::Queue to AWS::Lambda::Function; valid combinations are: Read + Write. Resource with id [MyResourceWithoutTypeResourceWithoutType] is invalid. 'Type' is missing or not a string. Resource with id [NoneTypeConnector] is invalid. Attribute 'NoneTypeConnector.Connectors' should be a map. Resource with id [TestSourceReferenceId] is invalid. 'Id' shouldn't be defined in 'SourceReference'."
}