Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion aws_lambda_powertools/utilities/parameters/ssm.py
Original file line number Diff line number Diff line change
Expand Up @@ -630,7 +630,9 @@ def _get_parameters_by_name(
response = self.client.get_parameters(Names=parameter_names, WithDecryption=True)
else:
response = self.client.get_parameters(Names=parameter_names)
except (self.client.exceptions.InvalidKeyId, self.client.exceptions.InternalServerError):
except (self.client.exceptions.InvalidKeyId, self.client.exceptions.InternalServerError) as exc:
if raise_on_error:
raise GetParameterError(f"Failed to fetch parameters: {parameter_names}") from exc
return ret, parameter_names

batch_errors = self._handle_any_invalid_get_parameter_errors(response, raise_on_error)
Expand Down
44 changes: 44 additions & 0 deletions tests/functional/parameters/_boto3/test_utilities_parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -1084,6 +1084,50 @@
stubber.deactivate()


def test_ssm_provider_get_parameters_by_name_raise_on_get_parameters_error(mock_name, config):
# GIVEN two parameters are requested
provider = parameters.SSMProvider(boto_config=config)
params = {f"/dev/{mock_name}": {}, f"/prod/{mock_name}": {}}
param_names = list(params.keys())

expected_stub_params = {"Names": param_names}

stubber = stub.Stubber(provider.client)
stubber.add_client_error("get_parameters", "InvalidKeyId", expected_params=expected_stub_params)
stubber.activate()

# WHEN the GetParameters call itself fails
# THEN raise GetParameterError instead of returning an empty dict
with pytest.raises(parameters.exceptions.GetParameterError, match="Failed to fetch parameters"):

Check warning on line 1101 in tests/functional/parameters/_boto3/test_utilities_parameters.py

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Refactor this exception test to have only one invocation possibly throwing an exception.

See more on https://sonarcloud.io/project/issues?id=aws-powertools_powertools-lambda-python&issues=AaFP_MEkHD09lah9bIgf&open=AaFP_MEkHD09lah9bIgf&pullRequest=8616
try:
provider.get_parameters_by_name(parameters=params, raise_on_error=True)
stubber.assert_no_pending_responses()
finally:
stubber.deactivate()


def test_ssm_provider_get_parameters_by_name_raise_on_get_parameters_error_decrypt(mock_name, config):
# GIVEN two parameters are requested, all with decrypt enabled (GetParameters WithDecryption batch)
provider = parameters.SSMProvider(boto_config=config)
params = {f"/dev/{mock_name}": {"decrypt": True}, f"/prod/{mock_name}": {"decrypt": True}}
param_names = list(params.keys())

expected_stub_params = {"Names": param_names, "WithDecryption": True}

stubber = stub.Stubber(provider.client)
stubber.add_client_error("get_parameters", "InternalServerError", expected_params=expected_stub_params)
stubber.activate()

# WHEN the GetParameters call itself fails
# THEN raise GetParameterError instead of returning an empty dict
with pytest.raises(parameters.exceptions.GetParameterError, match="Failed to fetch parameters"):

Check warning on line 1123 in tests/functional/parameters/_boto3/test_utilities_parameters.py

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Refactor this exception test to have only one invocation possibly throwing an exception.

See more on https://sonarcloud.io/project/issues?id=aws-powertools_powertools-lambda-python&issues=AaFP_MEkHD09lah9bIgg&open=AaFP_MEkHD09lah9bIgg&pullRequest=8616
try:
provider.get_parameters_by_name(parameters=params, raise_on_error=True)
stubber.assert_no_pending_responses()
finally:
stubber.deactivate()


def test_ssm_provider_get_parameters_by_name_do_not_raise_on_failure(mock_name, mock_value, config):
# GIVEN two parameters are requested
success = f"/dev/{mock_name}"
Expand Down
Loading