Skip to content

Commit

Permalink
fix tests + fix linter
Browse files Browse the repository at this point in the history
  • Loading branch information
aaythapa committed Oct 10, 2024
1 parent 7bd46e1 commit 1016858
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 19 deletions.
2 changes: 1 addition & 1 deletion samtranslator/model/sam_resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -887,7 +887,7 @@ def _construct_inline_code(*args: Any, **kwargs: Dict[str, Any]) -> Dict[str, An
dispatch_function: Callable[..., Dict[str, Any]] = artifact_dispatch[filtered_key]
return dispatch_function(artifacts[filtered_key], self.logical_id, filtered_key)

def _construct_version(
def _construct_version( # noqa: PLR0912
self,
function: LambdaFunction,
intrinsics_resolver: IntrinsicsResolver,
Expand Down
5 changes: 5 additions & 0 deletions tests/model/test_sam_resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class TestArchitecture(TestCase):
"intrinsics_resolver": IntrinsicsResolver({}),
"event_resources": [],
"managed_policy_map": {"foo": "bar"},
"resource_resolver": ResourceResolver({}),
}

@patch("boto3.session.Session.region_name", "ap-southeast-1")
Expand Down Expand Up @@ -60,6 +61,7 @@ class TestCodeUriandImageUri(TestCase):
"intrinsics_resolver": IntrinsicsResolver({}),
"event_resources": [],
"managed_policy_map": {"foo": "bar"},
"resource_resolver": ResourceResolver({}),
}

@patch("boto3.session.Session.region_name", "ap-southeast-1")
Expand Down Expand Up @@ -143,6 +145,7 @@ class TestAssumeRolePolicyDocument(TestCase):
"intrinsics_resolver": IntrinsicsResolver({}),
"event_resources": [],
"managed_policy_map": {"foo": "bar"},
"resource_resolver": ResourceResolver({}),
}

@patch("boto3.session.Session.region_name", "ap-southeast-1")
Expand Down Expand Up @@ -193,6 +196,7 @@ class TestVersionDescription(TestCase):
"intrinsics_resolver": IntrinsicsResolver({}),
"event_resources": [],
"managed_policy_map": {"foo": "bar"},
"resource_resolver": ResourceResolver({}),
}

@patch("boto3.session.Session.region_name", "ap-southeast-1")
Expand Down Expand Up @@ -441,6 +445,7 @@ class TestFunctionUrlConfig(TestCase):
"intrinsics_resolver": IntrinsicsResolver({}),
"event_resources": [],
"managed_policy_map": {"foo": "bar"},
"resource_resolver": ResourceResolver({}),
}

@patch("boto3.session.Session.region_name", "ap-southeast-1")
Expand Down
6 changes: 3 additions & 3 deletions tests/translator/output/error_globals_unsupported_type.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
"Number of errors found: 1. ",
"'Globals' section is invalid. ",
"'NewType' is not supported. ",
"Must be one of the following values - ['Api', 'Function', 'HttpApi', 'SimpleTable', 'StateMachine']"
"Must be one of the following values - ['Api', 'Function', 'HttpApi', 'LayerVersion', 'SimpleTable', 'StateMachine']"
],
"errorMessage": "Invalid Serverless Application Specification document. Number of errors found: 1. 'Globals' section is invalid. 'NewType' is not supported. Must be one of the following values - ['Api', 'Function', 'HttpApi', 'SimpleTable', 'StateMachine']",
"errorMessage": "Invalid Serverless Application Specification document. Number of errors found: 1. 'Globals' section is invalid. 'NewType' is not supported. Must be one of the following values - ['Api', 'Function', 'HttpApi', 'LayerVersion', 'SimpleTable', 'StateMachine']",
"errors": [
{
"errorMessage": "'Globals' section is invalid. 'NewType' is not supported. Must be one of the following values - ['Api', 'Function', 'HttpApi', 'SimpleTable', 'StateMachine']"
"errorMessage": "'Globals' section is invalid. 'NewType' is not supported. Must be one of the following values - ['Api', 'Function', 'HttpApi', 'LayerVersion', 'SimpleTable', 'StateMachine']"
}
]
}
62 changes: 47 additions & 15 deletions tests/translator/test_function_resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ def setUp(self):
self.intrinsics_resolver_mock.resolve = Mock()
self.mappings_resolver_mock = Mock()
self.mappings_resolver_mock.resolve = Mock()
self.resource_resolver_mock = Mock()
self.resource_resolver_mock.resolve = Mock()

self.code_uri = "s3://bucket/key?versionId=version"
self.func_dict = {
Expand Down Expand Up @@ -44,6 +46,7 @@ def test_sam_function_with_code_signer(self):
kwargs["managed_policy_map"] = {"a": "b"}
kwargs["event_resources"] = []
kwargs["intrinsics_resolver"] = self.intrinsics_resolver_mock
kwargs["resource_resolver"] = self.resource_resolver_mock
self.intrinsics_resolver_mock.resolve_parameter_refs.return_value = {
"S3Bucket": "bucket",
"S3Key": "key",
Expand Down Expand Up @@ -76,6 +79,7 @@ def test_sam_function_with_alias(self, get_resolved_alias_name_mock):
kwargs["managed_policy_map"] = {"a": "b"}
kwargs["event_resources"] = []
kwargs["intrinsics_resolver"] = self.intrinsics_resolver_mock
kwargs["resource_resolver"] = self.resource_resolver_mock
self.intrinsics_resolver_mock.resolve_parameter_refs.return_value = {
"S3Bucket": "bucket",
"S3Key": "key",
Expand Down Expand Up @@ -131,6 +135,7 @@ def test_sam_function_with_deployment_preference(self, get_resolved_alias_name_m
kwargs["event_resources"] = []
kwargs["intrinsics_resolver"] = self.intrinsics_resolver_mock
kwargs["mappings_resolver"] = self.mappings_resolver_mock
kwargs["resource_resolver"] = self.resource_resolver_mock
deployment_preference_collection = self._make_deployment_preference_collection()
kwargs["deployment_preference_collection"] = deployment_preference_collection
get_resolved_alias_name_mock.return_value = alias_name
Expand Down Expand Up @@ -176,6 +181,7 @@ def test_sam_function_with_deployment_preference_missing_collection_raises_error
kwargs["event_resources"] = []
kwargs["intrinsics_resolver"] = self.intrinsics_resolver_mock
kwargs["mappings_resolver"] = self.mappings_resolver_mock
kwargs["resource_resolver"] = self.resource_resolver_mock
self.intrinsics_resolver_mock.resolve_parameter_refs.return_value = {
"S3Bucket": "bucket",
"S3Key": "key",
Expand Down Expand Up @@ -212,6 +218,7 @@ def test_sam_function_with_disabled_deployment_preference_does_not_add_update_po
kwargs["event_resources"] = []
kwargs["intrinsics_resolver"] = self.intrinsics_resolver_mock
kwargs["mappings_resolver"] = self.mappings_resolver_mock
kwargs["resource_resolver"] = self.resource_resolver_mock
preference_collection = self._make_deployment_preference_collection()
preference_collection.get.return_value = DeploymentPreference.from_dict(
sam_func.logical_id, deploy_preference_dict
Expand Down Expand Up @@ -248,6 +255,7 @@ def test_sam_function_cannot_be_with_deployment_preference_without_alias(self):
kwargs["intrinsics_resolver"] = self.intrinsics_resolver_mock
kwargs["mappings_resolver"] = self.mappings_resolver_mock
kwargs["deployment_preference_collection"] = self._make_deployment_preference_collection()
kwargs["resource_resolver"] = self.resource_resolver_mock
sam_func.to_cloudformation(**kwargs)

@patch("boto3.session.Session.region_name", "ap-southeast-1")
Expand All @@ -271,6 +279,7 @@ def test_sam_function_without_alias_allows_disabled_deployment_preference(self):
kwargs["event_resources"] = []
kwargs["intrinsics_resolver"] = self.intrinsics_resolver_mock
kwargs["mappings_resolver"] = self.mappings_resolver_mock
kwargs["resource_resolver"] = self.resource_resolver_mock

preference_collection = self._make_deployment_preference_collection()
preference_collection.get.return_value = DeploymentPreference.from_dict(
Expand Down Expand Up @@ -311,6 +320,7 @@ def test_sam_function_with_deployment_preference_intrinsic_ref_enabled_boolean_p
kwargs["event_resources"] = []
kwargs["intrinsics_resolver"] = self.intrinsics_resolver_mock
kwargs["mappings_resolver"] = self.mappings_resolver_mock
kwargs["resource_resolver"] = self.resource_resolver_mock
deployment_preference_collection = self._make_deployment_preference_collection()
kwargs["deployment_preference_collection"] = deployment_preference_collection
self.intrinsics_resolver_mock.resolve_parameter_refs.return_value = True
Expand Down Expand Up @@ -355,6 +365,7 @@ def test_sam_function_with_deployment_preference_intrinsic_ref_enabled_dict_para
kwargs["event_resources"] = []
kwargs["intrinsics_resolver"] = self.intrinsics_resolver_mock
kwargs["mappings_resolver"] = self.mappings_resolver_mock
kwargs["resource_resolver"] = self.resource_resolver_mock
deployment_preference_collection = self._make_deployment_preference_collection()
kwargs["deployment_preference_collection"] = deployment_preference_collection
self.intrinsics_resolver_mock.resolve_parameter_refs.return_value = {"MyEnabledFlag": True}
Expand Down Expand Up @@ -389,6 +400,7 @@ def test_sam_function_with_deployment_preference_intrinsic_findinmap_enabled_dic
kwargs["event_resources"] = []
kwargs["intrinsics_resolver"] = self.intrinsics_resolver_mock
kwargs["mappings_resolver"] = self.mappings_resolver_mock
kwargs["resource_resolver"] = self.resource_resolver_mock
deployment_preference_collection = self._make_deployment_preference_collection()
kwargs["deployment_preference_collection"] = deployment_preference_collection
self.intrinsics_resolver_mock.resolve_parameter_refs.return_value = {"MyEnabledFlag": True}
Expand Down Expand Up @@ -424,6 +436,7 @@ def test_sam_function_with_deployment_preference_passthrough_condition_through_p
kwargs["event_resources"] = []
kwargs["intrinsics_resolver"] = self.intrinsics_resolver_mock
kwargs["mappings_resolver"] = self.mappings_resolver_mock
kwargs["resource_resolver"] = self.resource_resolver_mock
deployment_preference_collection = self._make_deployment_preference_collection()
kwargs["deployment_preference_collection"] = deployment_preference_collection
get_resolved_alias_name_mock.return_value = alias_name
Expand Down Expand Up @@ -472,6 +485,7 @@ def test_sam_function_with_deployment_preference_passthrough_condition_through_f
kwargs["event_resources"] = []
kwargs["intrinsics_resolver"] = self.intrinsics_resolver_mock
kwargs["mappings_resolver"] = self.mappings_resolver_mock
kwargs["resource_resolver"] = self.resource_resolver_mock
deployment_preference_collection = self._make_deployment_preference_collection()
kwargs["deployment_preference_collection"] = deployment_preference_collection
get_resolved_alias_name_mock.return_value = alias_name
Expand Down Expand Up @@ -531,6 +545,7 @@ def test_sam_function_with_deployment_preference_passthrough_condition_invalid_i
kwargs["event_resources"] = []
kwargs["intrinsics_resolver"] = self.intrinsics_resolver_mock
kwargs["mappings_resolver"] = self.mappings_resolver_mock
kwargs["resource_resolver"] = self.resource_resolver_mock
deployment_preference_collection = self._make_deployment_preference_collection()
kwargs["deployment_preference_collection"] = deployment_preference_collection
get_resolved_alias_name_mock.return_value = alias_name
Expand Down Expand Up @@ -560,7 +575,9 @@ def test_version_creation(self, LogicalIdGeneratorMock):
generator_mock.gen.return_value = id_val

self.intrinsics_resolver_mock.resolve_parameter_refs.return_value = self.lambda_func.Code
version = self.sam_func._construct_version(self.lambda_func, self.intrinsics_resolver_mock)
version = self.sam_func._construct_version(
self.lambda_func, self.intrinsics_resolver_mock, self.resource_resolver_mock
)

self.assertEqual(version.logical_id, id_val)
self.assertEqual(version.Description, None)
Expand All @@ -582,7 +599,9 @@ def test_version_creation_with_code_sha(self, LogicalIdGeneratorMock):

self.intrinsics_resolver_mock.resolve_parameter_refs.return_value = self.lambda_func.Code
self.sam_func.AutoPublishCodeSha256 = hash_code
version = self.sam_func._construct_version(self.lambda_func, self.intrinsics_resolver_mock, hash_code)
version = self.sam_func._construct_version(
self.lambda_func, self.intrinsics_resolver_mock, self.resource_resolver_mock, hash_code
)

self.assertEqual(version.logical_id, id_val)
self.assertEqual(version.Description, None)
Expand All @@ -603,7 +622,9 @@ def test_version_creation_without_s3_object_version(self, LogicalIdGeneratorMock

del self.lambda_func.Code["S3ObjectVersion"]
self.intrinsics_resolver_mock.resolve_parameter_refs.return_value = self.lambda_func.Code
version = self.sam_func._construct_version(self.lambda_func, self.intrinsics_resolver_mock)
version = self.sam_func._construct_version(
self.lambda_func, self.intrinsics_resolver_mock, self.resource_resolver_mock
)

self.assertEqual(version.logical_id, id_val)

Expand All @@ -616,7 +637,9 @@ def test_version_creation_error(self):
# Empty code dictionary
self.lambda_func.Code = {}
with self.assertRaises(ValueError):
self.sam_func._construct_version(self.lambda_func, self.intrinsics_resolver_mock)
self.sam_func._construct_version(
self.lambda_func, self.intrinsics_resolver_mock, self.resource_resolver_mock
)

@patch("samtranslator.translator.logical_id_generator.LogicalIdGenerator")
def test_version_creation_intrinsic_function_in_code_s3key(self, LogicalIdGeneratorMock):
Expand All @@ -628,7 +651,9 @@ def test_version_creation_intrinsic_function_in_code_s3key(self, LogicalIdGenera
self.lambda_func.Code = {"S3Bucket": "bucket", "S3Key": {"Ref": "keyparameter"}, "S3ObjectVersion": "version"}
self.intrinsics_resolver_mock.resolve_parameter_refs.return_value = self.lambda_func.Code

version = self.sam_func._construct_version(self.lambda_func, self.intrinsics_resolver_mock)
version = self.sam_func._construct_version(
self.lambda_func, self.intrinsics_resolver_mock, self.resource_resolver_mock
)
self.assertEqual(version.logical_id, id_val)

expected_prefix = self.sam_func.logical_id + "Version"
Expand All @@ -644,7 +669,9 @@ def test_version_creation_intrinsic_function_in_code_s3bucket(self, LogicalIdGen
self.lambda_func.Code = {"S3Bucket": {"Ref": "bucketparameter"}, "S3Key": "key", "S3ObjectVersion": "version"}
self.intrinsics_resolver_mock.resolve_parameter_refs.return_value = self.lambda_func.Code

version = self.sam_func._construct_version(self.lambda_func, self.intrinsics_resolver_mock)
version = self.sam_func._construct_version(
self.lambda_func, self.intrinsics_resolver_mock, self.resource_resolver_mock
)
self.assertEqual(version.logical_id, id_val)

expected_prefix = self.sam_func.logical_id + "Version"
Expand All @@ -660,7 +687,9 @@ def test_version_creation_intrinsic_function_in_code_s3version(self, LogicalIdGe
self.lambda_func.Code = {"S3Bucket": "bucket", "S3Key": "key", "S3ObjectVersion": {"Ref": "versionparameter"}}
self.intrinsics_resolver_mock.resolve_parameter_refs.return_value = self.lambda_func.Code

version = self.sam_func._construct_version(self.lambda_func, self.intrinsics_resolver_mock)
version = self.sam_func._construct_version(
self.lambda_func, self.intrinsics_resolver_mock, self.resource_resolver_mock
)
self.assertEqual(version.logical_id, id_val)

expected_prefix = self.sam_func.logical_id + "Version"
Expand All @@ -676,7 +705,7 @@ def test_version_logical_id_changes(self, LogicalIdGeneratorMock):

# Test that logicalId changes with changes to CodeSha
self.intrinsics_resolver_mock.resolve_parameter_refs.return_value = self.lambda_func.Code
self.sam_func._construct_version(self.lambda_func, self.intrinsics_resolver_mock)
self.sam_func._construct_version(self.lambda_func, self.intrinsics_resolver_mock, self.resource_resolver_mock)

LogicalIdGeneratorMock.assert_called_once_with(prefix, self.lambda_func.Code, None)
self.intrinsics_resolver_mock.resolve_parameter_refs.assert_called_with(self.lambda_func.Code)
Expand All @@ -685,7 +714,7 @@ def test_version_logical_id_changes(self, LogicalIdGeneratorMock):
self.lambda_func.Code["S3ObjectVersion"] = "new object version"
new_code = self.lambda_func.Code.copy()
self.intrinsics_resolver_mock.resolve_parameter_refs.return_value = new_code
self.sam_func._construct_version(self.lambda_func, self.intrinsics_resolver_mock)
self.sam_func._construct_version(self.lambda_func, self.intrinsics_resolver_mock, self.resource_resolver_mock)
LogicalIdGeneratorMock.assert_called_with(prefix, new_code, None)
self.intrinsics_resolver_mock.resolve_parameter_refs.assert_called_with(new_code)

Expand All @@ -699,15 +728,15 @@ def test_version_logical_id_changes_with_intrinsic_functions(self, LogicalIdGene
self.lambda_func.Code = {"S3Bucket": "bucket", "S3Key": {"Ref": "someparam"}}

self.intrinsics_resolver_mock.resolve_parameter_refs.return_value = self.lambda_func.Code
self.sam_func._construct_version(self.lambda_func, self.intrinsics_resolver_mock)
self.sam_func._construct_version(self.lambda_func, self.intrinsics_resolver_mock, self.resource_resolver_mock)

LogicalIdGeneratorMock.assert_called_once_with(prefix, self.lambda_func.Code, None)
self.intrinsics_resolver_mock.resolve_parameter_refs.assert_called_with(self.lambda_func.Code)

# Now, just let the intrinsics resolver return a different value. Let's make sure the new value gets wired up properly
new_code = {"S3Bucket": "bucket", "S3Key": "some new value"}
self.intrinsics_resolver_mock.resolve_parameter_refs.return_value = new_code
self.sam_func._construct_version(self.lambda_func, self.intrinsics_resolver_mock)
self.sam_func._construct_version(self.lambda_func, self.intrinsics_resolver_mock, self.resource_resolver_mock)
LogicalIdGeneratorMock.assert_called_with(prefix, new_code, None)
self.intrinsics_resolver_mock.resolve_parameter_refs.assert_called_with(self.lambda_func.Code)

Expand All @@ -723,11 +752,14 @@ def test_version_logical_id_changes_with_snapstart(self):

self.intrinsics_resolver_mock.resolve_parameter_refs.return_value = lambda_func.Code

version1 = self.sam_func._construct_version(lambda_func, self.intrinsics_resolver_mock)
version_snapstart = self.sam_func._construct_version(lambda_func_snapstart, self.intrinsics_resolver_mock)
version1 = self.sam_func._construct_version(
lambda_func, self.intrinsics_resolver_mock, self.resource_resolver_mock
)
version_snapstart = self.sam_func._construct_version(
lambda_func_snapstart, self.intrinsics_resolver_mock, self.resource_resolver_mock
)
version_snapstart_none = self.sam_func._construct_version(
lambda_func_snapstart_none,
self.intrinsics_resolver_mock,
lambda_func_snapstart_none, self.intrinsics_resolver_mock, self.resource_resolver_mock
)
# SnapStart config changes the hash, except when ApplyOn is "None"
self.assertNotEqual(version1.logical_id, version_snapstart.logical_id)
Expand Down

0 comments on commit 1016858

Please sign in to comment.