From 607e0a845241b7033e14bae57117ee275c44b7bb Mon Sep 17 00:00:00 2001 From: Olabode Anise Date: Tue, 25 Feb 2020 20:25:44 -0500 Subject: [PATCH 1/2] ENH: changes the behavior of delete_parameter to respond with a 400 error when the parameter does not exist. Currently, the delete_parameter function for the ssm client will respond with a dict containing a key of Invalid Parameter which has a value of a list containing the parameter name that was requested to be deleted when a parameter with said name doesn't exist which doesn't match the behavior of boto3. --- moto/ssm/models.py | 5 +---- moto/ssm/responses.py | 8 +++++++- tests/test_ssm/test_ssm_boto3.py | 14 ++++++++++++++ 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/moto/ssm/models.py b/moto/ssm/models.py index 60c47f021..a7518d405 100644 --- a/moto/ssm/models.py +++ b/moto/ssm/models.py @@ -278,10 +278,7 @@ class SimpleSystemManagerBackend(BaseBackend): self._region = region def delete_parameter(self, name): - try: - del self._parameters[name] - except KeyError: - pass + return self._parameters.pop(name, None) def delete_parameters(self, names): result = [] diff --git a/moto/ssm/responses.py b/moto/ssm/responses.py index 1b13780a8..831737848 100644 --- a/moto/ssm/responses.py +++ b/moto/ssm/responses.py @@ -22,7 +22,13 @@ class SimpleSystemManagerResponse(BaseResponse): def delete_parameter(self): name = self._get_param("Name") - self.ssm_backend.delete_parameter(name) + result = self.ssm_backend.delete_parameter(name) + if result is None: + error = { + "__type": "ParameterNotFound", + "message": "Parameter {0} not found.".format(name), + } + return json.dumps(error), dict(status=400) return json.dumps({}) def delete_parameters(self): diff --git a/tests/test_ssm/test_ssm_boto3.py b/tests/test_ssm/test_ssm_boto3.py index 5b978520d..26db26dcb 100644 --- a/tests/test_ssm/test_ssm_boto3.py +++ b/tests/test_ssm/test_ssm_boto3.py @@ -30,6 +30,20 @@ def test_delete_parameter(): len(response["Parameters"]).should.equal(0) +@mock_ssm +def test_delete_nonexistent_parameter(): + client = boto3.client("ssm", region_name="us-east-1") + + try: + client.delete_parameter(Name="test_noexist") + raise RuntimeError("Should of failed") + except botocore.exceptions.ClientError as err: + err.operation_name.should.equal("DeleteParameter") + err.response["Error"]["Message"].should.equal( + "Parameter test_noexist not found." + ) + + @mock_ssm def test_delete_parameters(): client = boto3.client("ssm", region_name="us-east-1") From 9227845121788a4804da5e026d9f90baf9541bd7 Mon Sep 17 00:00:00 2001 From: Olabode Anise Date: Thu, 27 Feb 2020 07:29:13 -0500 Subject: [PATCH 2/2] using assert_raises --- tests/test_ssm/test_ssm_boto3.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/tests/test_ssm/test_ssm_boto3.py b/tests/test_ssm/test_ssm_boto3.py index 26db26dcb..bb674fb65 100644 --- a/tests/test_ssm/test_ssm_boto3.py +++ b/tests/test_ssm/test_ssm_boto3.py @@ -34,14 +34,12 @@ def test_delete_parameter(): def test_delete_nonexistent_parameter(): client = boto3.client("ssm", region_name="us-east-1") - try: + with assert_raises(ClientError) as ex: client.delete_parameter(Name="test_noexist") - raise RuntimeError("Should of failed") - except botocore.exceptions.ClientError as err: - err.operation_name.should.equal("DeleteParameter") - err.response["Error"]["Message"].should.equal( - "Parameter test_noexist not found." - ) + ex.exception.response["Error"]["Code"].should.equal("ParameterNotFound") + ex.exception.response["Error"]["Message"].should.equal( + "Parameter test_noexist not found." + ) @mock_ssm