adding AWS IoT policy version handling

[+] `list_policy_version`
[+] `get_policy_version`
[+] `create_policy_version`
[+] `delete_policy_version`
[+] `set_default_policy_version`
This commit is contained in:
Stephan Huber 2018-10-25 12:13:56 +02:00
commit bb7e1197bc
3 changed files with 215 additions and 7 deletions

View file

@ -1,8 +1,7 @@
from __future__ import unicode_literals
import json
import sure # noqa
import sure #noqa
import boto3
from moto import mock_iot
@ -52,6 +51,85 @@ def test_list_attached_policies():
policies['policies'].should.be.empty
@mock_iot
def test_policy_versions():
client = boto3.client('iot', region_name='ap-northeast-1')
policy_name = 'my-policy'
doc = '{}'
policy = client.create_policy(policyName=policy_name, policyDocument=doc)
policy.should.have.key('policyName').which.should.equal(policy_name)
policy.should.have.key('policyArn').which.should_not.be.none
policy.should.have.key('policyDocument').which.should.equal(json.dumps({}))
policy.should.have.key('policyVersionId').which.should.equal('1')
policy = client.get_policy(policyName=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('policyDocument').which.should.equal(json.dumps({}))
policy.should.have.key('defaultVersionId').which.should.equal(policy['defaultVersionId'])
policy1 = client.create_policy_version(policyName=policy_name, policyDocument=json.dumps({'version': 'version_1'}),
setAsDefault=True)
policy1.should.have.key('policyArn').which.should_not.be.none
policy1.should.have.key('policyDocument').which.should.equal(json.dumps({'version': 'version_1'}))
policy1.should.have.key('policyVersionId').which.should.equal('2')
policy1.should.have.key('isDefaultVersion').which.should.equal(True)
policy2 = client.create_policy_version(policyName=policy_name, policyDocument=json.dumps({'version': 'version_2'}),
setAsDefault=False)
policy2.should.have.key('policyArn').which.should_not.be.none
policy2.should.have.key('policyDocument').which.should.equal(json.dumps({'version': 'version_2'}))
policy2.should.have.key('policyVersionId').which.should.equal('3')
policy2.should.have.key('isDefaultVersion').which.should.equal(False)
policy = client.get_policy(policyName=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('policyDocument').which.should.equal(json.dumps({'version': 'version_1'}))
policy.should.have.key('defaultVersionId').which.should.equal(policy1['policyVersionId'])
policy_versions = client.list_policy_versions(policyName=policy_name)
policy_versions.should.have.key('policyVersions').which.should.have.length_of(3)
list(map(lambda item: item['isDefaultVersion'], policy_versions['policyVersions'])).count(True).should.equal(1)
default_policy = list(filter(lambda item: item['isDefaultVersion'], policy_versions['policyVersions']))
default_policy[0].should.have.key('versionId').should.equal(policy1['policyVersionId'])
policy = client.get_policy(policyName=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('policyDocument').which.should.equal(json.dumps({'version': 'version_1'}))
policy.should.have.key('defaultVersionId').which.should.equal(policy1['policyVersionId'])
client.set_default_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(3)
list(map(lambda item: item['isDefaultVersion'], policy_versions['policyVersions'])).count(True).should.equal(1)
default_policy = list(filter(lambda item: item['isDefaultVersion'], policy_versions['policyVersions']))
default_policy[0].should.have.key('versionId').should.equal(policy2['policyVersionId'])
policy = client.get_policy(policyName=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('policyDocument').which.should.equal(json.dumps({'version': 'version_2'}))
policy.should.have.key('defaultVersionId').which.should.equal(policy2['policyVersionId'])
client.delete_policy_version(policyName=policy_name, policyVersionId='1')
policy_versions = client.list_policy_versions(policyName=policy_name)
policy_versions.should.have.key('policyVersions').which.should.have.length_of(2)
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(1)
# should fail as it's the default policy. Should use delete_policy instead
try:
client.delete_policy_version(policyName=policy_name, policyVersionId=policy2['policyVersionId'])
assert False, 'Should have failed in previous call'
except Exception as exception:
exception.response['Error']['Message'].should.equal('Cannot delete the default version of a policy')
@mock_iot
def test_things():
client = boto3.client('iot', region_name='ap-northeast-1')