iot: Add VersionsLimitExceededException (#4173)
This commit is contained in:
parent
9e61ab2220
commit
ec33237165
@ -60,3 +60,12 @@ class ResourceAlreadyExistsException(IoTClientError):
|
|||||||
super(ResourceAlreadyExistsException, self).__init__(
|
super(ResourceAlreadyExistsException, self).__init__(
|
||||||
"ResourceAlreadyExistsException", msg or "The resource already exists."
|
"ResourceAlreadyExistsException", msg or "The resource already exists."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class VersionsLimitExceededException(IoTClientError):
|
||||||
|
def __init__(self, name):
|
||||||
|
self.code = 409
|
||||||
|
super(VersionsLimitExceededException, self).__init__(
|
||||||
|
"VersionsLimitExceededException",
|
||||||
|
"The policy %s already has the maximum number of versions (5)" % name,
|
||||||
|
)
|
||||||
|
@ -21,6 +21,7 @@ from .exceptions import (
|
|||||||
InvalidStateTransitionException,
|
InvalidStateTransitionException,
|
||||||
VersionConflictException,
|
VersionConflictException,
|
||||||
ResourceAlreadyExistsException,
|
ResourceAlreadyExistsException,
|
||||||
|
VersionsLimitExceededException,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -815,6 +816,8 @@ class IoTBackend(BaseBackend):
|
|||||||
policy = self.get_policy(policy_name)
|
policy = self.get_policy(policy_name)
|
||||||
if not policy:
|
if not policy:
|
||||||
raise ResourceNotFoundException()
|
raise ResourceNotFoundException()
|
||||||
|
if len(policy.versions) >= 5:
|
||||||
|
raise VersionsLimitExceededException(policy_name)
|
||||||
version = FakePolicyVersion(
|
version = FakePolicyVersion(
|
||||||
policy_name, policy_document, set_as_default, self.region_name
|
policy_name, policy_document, set_as_default, self.region_name
|
||||||
)
|
)
|
||||||
|
@ -139,8 +139,32 @@ def test_policy_versions():
|
|||||||
policy1["policyVersionId"]
|
policy1["policyVersionId"]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
policy3 = client.create_policy_version(
|
||||||
|
policyName=policy_name,
|
||||||
|
policyDocument=json.dumps({"version": "version_3"}),
|
||||||
|
setAsDefault=False,
|
||||||
|
)
|
||||||
|
policy3.should.have.key("policyArn").which.should_not.be.none
|
||||||
|
policy3.should.have.key("policyDocument").which.should.equal(
|
||||||
|
json.dumps({"version": "version_3"})
|
||||||
|
)
|
||||||
|
policy3.should.have.key("policyVersionId").which.should.equal("4")
|
||||||
|
policy3.should.have.key("isDefaultVersion").which.should.equal(False)
|
||||||
|
|
||||||
|
policy4 = client.create_policy_version(
|
||||||
|
policyName=policy_name,
|
||||||
|
policyDocument=json.dumps({"version": "version_4"}),
|
||||||
|
setAsDefault=False,
|
||||||
|
)
|
||||||
|
policy4.should.have.key("policyArn").which.should_not.be.none
|
||||||
|
policy4.should.have.key("policyDocument").which.should.equal(
|
||||||
|
json.dumps({"version": "version_4"})
|
||||||
|
)
|
||||||
|
policy4.should.have.key("policyVersionId").which.should.equal("5")
|
||||||
|
policy4.should.have.key("isDefaultVersion").which.should.equal(False)
|
||||||
|
|
||||||
policy_versions = client.list_policy_versions(policyName=policy_name)
|
policy_versions = client.list_policy_versions(policyName=policy_name)
|
||||||
policy_versions.should.have.key("policyVersions").which.should.have.length_of(3)
|
policy_versions.should.have.key("policyVersions").which.should.have.length_of(5)
|
||||||
list(
|
list(
|
||||||
map(lambda item: item["isDefaultVersion"], policy_versions["policyVersions"])
|
map(lambda item: item["isDefaultVersion"], policy_versions["policyVersions"])
|
||||||
).count(True).should.equal(1)
|
).count(True).should.equal(1)
|
||||||
@ -162,10 +186,10 @@ def test_policy_versions():
|
|||||||
)
|
)
|
||||||
|
|
||||||
client.set_default_policy_version(
|
client.set_default_policy_version(
|
||||||
policyName=policy_name, policyVersionId=policy2["policyVersionId"]
|
policyName=policy_name, policyVersionId=policy4["policyVersionId"]
|
||||||
)
|
)
|
||||||
policy_versions = client.list_policy_versions(policyName=policy_name)
|
policy_versions = client.list_policy_versions(policyName=policy_name)
|
||||||
policy_versions.should.have.key("policyVersions").which.should.have.length_of(3)
|
policy_versions.should.have.key("policyVersions").which.should.have.length_of(5)
|
||||||
list(
|
list(
|
||||||
map(lambda item: item["isDefaultVersion"], policy_versions["policyVersions"])
|
map(lambda item: item["isDefaultVersion"], policy_versions["policyVersions"])
|
||||||
).count(True).should.equal(1)
|
).count(True).should.equal(1)
|
||||||
@ -173,25 +197,48 @@ def test_policy_versions():
|
|||||||
filter(lambda item: item["isDefaultVersion"], policy_versions["policyVersions"])
|
filter(lambda item: item["isDefaultVersion"], policy_versions["policyVersions"])
|
||||||
)
|
)
|
||||||
default_policy[0].should.have.key("versionId").should.equal(
|
default_policy[0].should.have.key("versionId").should.equal(
|
||||||
policy2["policyVersionId"]
|
policy4["policyVersionId"]
|
||||||
)
|
)
|
||||||
|
|
||||||
policy = client.get_policy(policyName=policy_name)
|
policy = client.get_policy(policyName=policy_name)
|
||||||
policy.should.have.key("policyName").which.should.equal(policy_name)
|
policy.should.have.key("policyName").which.should.equal(policy_name)
|
||||||
policy.should.have.key("policyArn").which.should_not.be.none
|
policy.should.have.key("policyArn").which.should_not.be.none
|
||||||
policy.should.have.key("policyDocument").which.should.equal(
|
policy.should.have.key("policyDocument").which.should.equal(
|
||||||
json.dumps({"version": "version_2"})
|
json.dumps({"version": "version_4"})
|
||||||
)
|
)
|
||||||
policy.should.have.key("defaultVersionId").which.should.equal(
|
policy.should.have.key("defaultVersionId").which.should.equal(
|
||||||
policy2["policyVersionId"]
|
policy4["policyVersionId"]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
client.create_policy_version(
|
||||||
|
policyName=policy_name,
|
||||||
|
policyDocument=json.dumps({"version": "version_5"}),
|
||||||
|
setAsDefault=False,
|
||||||
|
)
|
||||||
|
assert False, "Should have failed in previous call"
|
||||||
|
except Exception as exception:
|
||||||
|
exception.response["Error"]["Message"].should.equal(
|
||||||
|
"The policy %s already has the maximum number of versions (5)" % policy_name
|
||||||
|
)
|
||||||
|
|
||||||
client.delete_policy_version(policyName=policy_name, policyVersionId="1")
|
client.delete_policy_version(policyName=policy_name, policyVersionId="1")
|
||||||
policy_versions = client.list_policy_versions(policyName=policy_name)
|
policy_versions = client.list_policy_versions(policyName=policy_name)
|
||||||
|
policy_versions.should.have.key("policyVersions").which.should.have.length_of(4)
|
||||||
|
|
||||||
|
client.delete_policy_version(
|
||||||
|
policyName=policy_name, policyVersionId=policy1["policyVersionId"]
|
||||||
|
)
|
||||||
|
policy_versions = client.list_policy_versions(policyName=policy_name)
|
||||||
|
policy_versions.should.have.key("policyVersions").which.should.have.length_of(3)
|
||||||
|
client.delete_policy_version(
|
||||||
|
policyName=policy_name, policyVersionId=policy2["policyVersionId"]
|
||||||
|
)
|
||||||
|
policy_versions = client.list_policy_versions(policyName=policy_name)
|
||||||
policy_versions.should.have.key("policyVersions").which.should.have.length_of(2)
|
policy_versions.should.have.key("policyVersions").which.should.have.length_of(2)
|
||||||
|
|
||||||
client.delete_policy_version(
|
client.delete_policy_version(
|
||||||
policyName=policy_name, policyVersionId=policy1["policyVersionId"]
|
policyName=policy_name, policyVersionId=policy3["policyVersionId"]
|
||||||
)
|
)
|
||||||
policy_versions = client.list_policy_versions(policyName=policy_name)
|
policy_versions = client.list_policy_versions(policyName=policy_name)
|
||||||
policy_versions.should.have.key("policyVersions").which.should.have.length_of(1)
|
policy_versions.should.have.key("policyVersions").which.should.have.length_of(1)
|
||||||
@ -199,7 +246,7 @@ def test_policy_versions():
|
|||||||
# should fail as it"s the default policy. Should use delete_policy instead
|
# should fail as it"s the default policy. Should use delete_policy instead
|
||||||
try:
|
try:
|
||||||
client.delete_policy_version(
|
client.delete_policy_version(
|
||||||
policyName=policy_name, policyVersionId=policy2["policyVersionId"]
|
policyName=policy_name, policyVersionId=policy4["policyVersionId"]
|
||||||
)
|
)
|
||||||
assert False, "Should have failed in previous call"
|
assert False, "Should have failed in previous call"
|
||||||
except Exception as exception:
|
except Exception as exception:
|
||||||
|
Loading…
Reference in New Issue
Block a user