18d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi#!/usr/bin/env python
28d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# Copyright (c) 2012 Amazon.com, Inc. or its affiliates.  All Rights Reserved
38d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi#
48d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# Permission is hereby granted, free of charge, to any person obtaining a
58d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# copy of this software and associated documentation files (the
68d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# "Software"), to deal in the Software without restriction, including
78d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# without limitation the rights to use, copy, modify, merge, publish, dis-
88d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# tribute, sublicense, and/or sell copies of the Software, and to permit
98d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# persons to whom the Software is furnished to do so, subject to the fol-
108d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# lowing conditions:
118d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi#
128d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# The above copyright notice and this permission notice shall be included
138d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# in all copies or substantial portions of the Software.
148d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi#
158d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
168d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
178d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
188d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
198d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
208d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
218d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# IN THE SOFTWARE.
228d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi#
238d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
248d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoifrom base64 import b64decode
258d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoifrom boto.compat import json
268d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoifrom boto.iam.connection import IAMConnection
278d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoifrom tests.unit import AWSMockServiceTestCase
288d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
298d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
308d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass TestCreateSamlProvider(AWSMockServiceTestCase):
318d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    connection_class = IAMConnection
328d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
338d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def default_body(self):
348d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        return b"""
358d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <CreateSAMLProviderResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
368d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <CreateSAMLProviderResult>
378d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <SAMLProviderArn>arn</SAMLProviderArn>
388d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              </CreateSAMLProviderResult>
398d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <ResponseMetadata>
408d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <RequestId>29f47818-99f5-11e1-a4c3-27EXAMPLE804</RequestId>
418d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              </ResponseMetadata>
428d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </CreateSAMLProviderResponse>
438d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        """
448d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
458d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_create_saml_provider(self):
468d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
478d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        response = self.service_connection.create_saml_provider('document', 'name')
488d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
498d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assert_request_parameters(
508d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            {'Action': 'CreateSAMLProvider',
518d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi             'SAMLMetadataDocument': 'document',
528d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi             'Name': 'name'},
538d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            ignore_params_values=['Version'])
548d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
558d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assertEqual(response['create_saml_provider_response']
568d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                                 ['create_saml_provider_result']
578d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                                 ['saml_provider_arn'], 'arn')
588d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
598d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
608d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass TestListSamlProviders(AWSMockServiceTestCase):
618d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    connection_class = IAMConnection
628d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
638d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def default_body(self):
648d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        return b"""
658d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <ListSAMLProvidersResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
668d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <ListSAMLProvidersResult>
678d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <SAMLProviderList>
688d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  <member>
698d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                    <Arn>arn:aws:iam::123456789012:instance-profile/application_abc/component_xyz/Database</Arn>
708d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                    <ValidUntil>2032-05-09T16:27:11Z</ValidUntil>
718d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                    <CreateDate>2012-05-09T16:27:03Z</CreateDate>
728d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  </member>
738d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  <member>
748d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                    <Arn>arn:aws:iam::123456789012:instance-profile/application_abc/component_xyz/Webserver</Arn>
758d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                    <ValidUntil>2015-03-11T13:11:02Z</ValidUntil>
768d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                    <CreateDate>2012-05-09T16:27:11Z</CreateDate>
778d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  </member>
788d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                </SAMLProviderList>
798d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              </ListSAMLProvidersResult>
808d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <ResponseMetadata>
818d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <RequestId>fd74fa8d-99f3-11e1-a4c3-27EXAMPLE804</RequestId>
828d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              </ResponseMetadata>
838d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </ListSAMLProvidersResponse>
848d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        """
858d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
868d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_list_saml_providers(self):
878d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
888d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        response = self.service_connection.list_saml_providers()
898d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
908d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assert_request_parameters(
918d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            {'Action': 'ListSAMLProviders'},
928d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            ignore_params_values=['Version'])
938d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assertEqual(response.saml_provider_list, [
948d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            {'arn': 'arn:aws:iam::123456789012:instance-profile/application_abc/component_xyz/Database',
958d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi             'valid_until': '2032-05-09T16:27:11Z',
968d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi             'create_date': '2012-05-09T16:27:03Z'},
978d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            {'arn': 'arn:aws:iam::123456789012:instance-profile/application_abc/component_xyz/Webserver',
988d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi             'valid_until': '2015-03-11T13:11:02Z',
998d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi             'create_date': '2012-05-09T16:27:11Z'}])
1008d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1018d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1028d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass TestGetSamlProvider(AWSMockServiceTestCase):
1038d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    connection_class = IAMConnection
1048d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1058d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def default_body(self):
1068d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        return b"""
1078d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <GetSAMLProviderResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
1088d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <GetSAMLProviderResult>
1098d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <CreateDate>2012-05-09T16:27:11Z</CreateDate>
1108d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <ValidUntil>2015-12-31T211:59:59Z</ValidUntil>
1118d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <SAMLMetadataDocument>Pd9fexDssTkRgGNqs...DxptfEs==</SAMLMetadataDocument>
1128d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              </GetSAMLProviderResult>
1138d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <ResponseMetadata>
1148d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <RequestId>29f47818-99f5-11e1-a4c3-27EXAMPLE804</RequestId>
1158d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              </ResponseMetadata>
1168d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </GetSAMLProviderResponse>
1178d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        """
1188d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1198d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_get_saml_provider(self):
1208d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
1218d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.service_connection.get_saml_provider('arn')
1228d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1238d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assert_request_parameters(
1248d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            {
1258d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                'Action': 'GetSAMLProvider',
1268d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                'SAMLProviderArn': 'arn'
1278d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            },
1288d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            ignore_params_values=['Version'])
1298d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1308d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1318d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass TestUpdateSamlProvider(AWSMockServiceTestCase):
1328d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    connection_class = IAMConnection
1338d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1348d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def default_body(self):
1358d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        return b"""
1368d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <UpdateSAMLProviderResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
1378d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <UpdateSAMLProviderResult>
1388d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <SAMLProviderArn>arn:aws:iam::123456789012:saml-metadata/MyUniversity</SAMLProviderArn>
1398d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              </UpdateSAMLProviderResult>
1408d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <ResponseMetadata>
1418d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <RequestId>29f47818-99f5-11e1-a4c3-27EXAMPLE804</RequestId>
1428d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              </ResponseMetadata>
1438d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </UpdateSAMLProviderResponse>
1448d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        """
1458d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1468d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_update_saml_provider(self):
1478d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
1488d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.service_connection.update_saml_provider('arn', 'doc')
1498d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1508d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assert_request_parameters(
1518d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            {
1528d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                'Action': 'UpdateSAMLProvider',
1538d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                'SAMLMetadataDocument': 'doc',
1548d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                'SAMLProviderArn': 'arn'
1558d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            },
1568d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            ignore_params_values=['Version'])
1578d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1588d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1598d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass TestDeleteSamlProvider(AWSMockServiceTestCase):
1608d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    connection_class = IAMConnection
1618d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1628d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def default_body(self):
1638d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        return ""
1648d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1658d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_delete_saml_provider(self):
1668d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
1678d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.service_connection.delete_saml_provider('arn')
1688d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1698d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assert_request_parameters(
1708d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            {
1718d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                'Action': 'DeleteSAMLProvider',
1728d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                'SAMLProviderArn': 'arn'
1738d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            },
1748d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            ignore_params_values=['Version'])
1758d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1768d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1778d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass TestCreateRole(AWSMockServiceTestCase):
1788d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    connection_class = IAMConnection
1798d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1808d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def default_body(self):
1818d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        return b"""
1828d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi          <CreateRoleResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
1838d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <CreateRoleResult>
1848d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <Role>
1858d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <Path>/application_abc/component_xyz/</Path>
1868d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <Arn>arn:aws:iam::123456789012:role/application_abc/component_xyz/S3Access</Arn>
1878d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <RoleName>S3Access</RoleName>
1888d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <AssumeRolePolicyDocument>{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":["ec2.amazonaws.com"]},"Action":["sts:AssumeRole"]}]}</AssumeRolePolicyDocument>
1898d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <CreateDate>2012-05-08T23:34:01.495Z</CreateDate>
1908d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <RoleId>AROADBQP57FF2AEXAMPLE</RoleId>
1918d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              </Role>
1928d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </CreateRoleResult>
1938d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <ResponseMetadata>
1948d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <RequestId>4a93ceee-9966-11e1-b624-b1aEXAMPLE7c</RequestId>
1958d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </ResponseMetadata>
1968d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi          </CreateRoleResponse>
1978d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        """
1988d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1998d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_create_role_default(self):
2008d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
2018d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.service_connection.create_role('a_name')
2028d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
2038d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assert_request_parameters(
2048d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            {'Action': 'CreateRole',
2058d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi             'RoleName': 'a_name'},
2068d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            ignore_params_values=['Version', 'AssumeRolePolicyDocument'])
2078d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assertDictEqual(json.loads(self.actual_request.params["AssumeRolePolicyDocument"]), {"Statement": [{"Action": ["sts:AssumeRole"], "Effect": "Allow", "Principal": {"Service": ["ec2.amazonaws.com"]}}]})
2088d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
2098d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_create_role_default_cn_north(self):
2108d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
2118d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.service_connection.host = 'iam.cn-north-1.amazonaws.com.cn'
2128d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.service_connection.create_role('a_name')
2138d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
2148d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assert_request_parameters(
2158d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            {'Action': 'CreateRole',
2168d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi             'RoleName': 'a_name'},
2178d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            ignore_params_values=['Version', 'AssumeRolePolicyDocument'])
2188d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assertDictEqual(json.loads(self.actual_request.params["AssumeRolePolicyDocument"]), {"Statement": [{"Action": ["sts:AssumeRole"], "Effect": "Allow", "Principal": {"Service": ["ec2.amazonaws.com.cn"]}}]})
2198d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
2208d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_create_role_string_policy(self):
2218d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
2228d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.service_connection.create_role(
2238d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            'a_name',
2248d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            # Historical usage.
2258d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            assume_role_policy_document='{"hello": "policy"}'
2268d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        )
2278d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
2288d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assert_request_parameters(
2298d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            {'Action': 'CreateRole',
2308d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi             'AssumeRolePolicyDocument': '{"hello": "policy"}',
2318d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi             'RoleName': 'a_name'},
2328d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            ignore_params_values=['Version'])
2338d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
2348d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_create_role_data_policy(self):
2358d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
2368d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.service_connection.create_role(
2378d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            'a_name',
2388d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            # With plain data, we should dump it for them.
2398d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            assume_role_policy_document={"hello": "policy"}
2408d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        )
2418d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
2428d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assert_request_parameters(
2438d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            {'Action': 'CreateRole',
2448d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi             'AssumeRolePolicyDocument': '{"hello": "policy"}',
2458d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi             'RoleName': 'a_name'},
2468d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            ignore_params_values=['Version'])
2478d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
2488d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
2498d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass TestGetSigninURL(AWSMockServiceTestCase):
2508d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    connection_class = IAMConnection
2518d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
2528d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def default_body(self):
2538d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        return b"""
2548d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi          <ListAccountAliasesResponse>
2558d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <ListAccountAliasesResult>
2568d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <IsTruncated>false</IsTruncated>
2578d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <AccountAliases>
2588d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <member>foocorporation</member>
2598d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <member>anotherunused</member>
2608d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              </AccountAliases>
2618d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </ListAccountAliasesResult>
2628d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <ResponseMetadata>
2638d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <RequestId>c5a076e9-f1b0-11df-8fbe-45274EXAMPLE</RequestId>
2648d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </ResponseMetadata>
2658d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi          </ListAccountAliasesResponse>
2668d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        """
2678d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
2688d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_get_signin_url_default(self):
2698d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
2708d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        url = self.service_connection.get_signin_url()
2718d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assertEqual(
2728d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            url,
2738d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            'https://foocorporation.signin.aws.amazon.com/console/ec2'
2748d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        )
2758d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
2768d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_get_signin_url_s3(self):
2778d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
2788d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        url = self.service_connection.get_signin_url(service='s3')
2798d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assertEqual(
2808d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            url,
2818d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            'https://foocorporation.signin.aws.amazon.com/console/s3'
2828d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        )
2838d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
2848d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_get_signin_url_cn_north(self):
2858d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
2868d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.service_connection.host = 'iam.cn-north-1.amazonaws.com.cn'
2878d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        url = self.service_connection.get_signin_url()
2888d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assertEqual(
2898d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            url,
2908d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            'https://foocorporation.signin.amazonaws.cn/console/ec2'
2918d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        )
2928d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
2938d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
2948d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass TestGetSigninURLNoAliases(AWSMockServiceTestCase):
2958d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    connection_class = IAMConnection
2968d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
2978d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def default_body(self):
2988d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        return b"""
2998d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi          <ListAccountAliasesResponse>
3008d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <ListAccountAliasesResult>
3018d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <IsTruncated>false</IsTruncated>
3028d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <AccountAliases></AccountAliases>
3038d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </ListAccountAliasesResult>
3048d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <ResponseMetadata>
3058d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <RequestId>c5a076e9-f1b0-11df-8fbe-45274EXAMPLE</RequestId>
3068d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </ResponseMetadata>
3078d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi          </ListAccountAliasesResponse>
3088d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        """
3098d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
3108d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_get_signin_url_no_aliases(self):
3118d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
3128d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
3138d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        with self.assertRaises(Exception):
3148d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            self.service_connection.get_signin_url()
3158d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
3168d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
3178d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass TestGenerateCredentialReport(AWSMockServiceTestCase):
3188d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    connection_class = IAMConnection
3198d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
3208d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def default_body(self):
3218d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        return b"""
3228d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi          <GenerateCredentialReportResponse>
3238d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <GenerateCredentialReportResult>
3248d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <State>COMPLETE</State>
3258d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </GenerateCredentialReportResult>
3268d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <ResponseMetadata>
3278d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <RequestId>b62e22a3-0da1-11e4-ba55-0990EXAMPLE</RequestId>
3288d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </ResponseMetadata>
3298d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi          </GenerateCredentialReportResponse>
3308d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        """
3318d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
3328d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_generate_credential_report(self):
3338d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
3348d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        response = self.service_connection.generate_credential_report()
3358d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assertEquals(response['generate_credential_report_response']
3368d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                                  ['generate_credential_report_result']
3378d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                                  ['state'], 'COMPLETE')
3388d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
3398d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
3408d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass TestGetCredentialReport(AWSMockServiceTestCase):
3418d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    connection_class = IAMConnection
3428d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
3438d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def default_body(self):
3448d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        return b"""
3458d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi          <GetCredentialReportResponse>
3468d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <ResponseMetadata>
3478d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <RequestId>99e60e9a-0db5-11e4-94d4-b764EXAMPLE</RequestId>
3488d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </ResponseMetadata>
3498d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <GetCredentialReportResult>
3508d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <Content>RXhhbXBsZQ==</Content>
3518d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <ReportFormat>text/csv</ReportFormat>
3528d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <GeneratedTime>2014-07-17T11:09:11Z</GeneratedTime>
3538d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </GetCredentialReportResult>
3548d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi          </GetCredentialReportResponse>
3558d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        """
3568d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
3578d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_get_credential_report(self):
3588d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
3598d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        response = self.service_connection.get_credential_report()
3608d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        b64decode(response['get_credential_report_response']
3618d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                          ['get_credential_report_result']
3628d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                          ['content'])
3638d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
3648d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass TestCreateVirtualMFADevice(AWSMockServiceTestCase):
3658d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    connection_class = IAMConnection
3668d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
3678d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def default_body(self):
3688d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        return b"""
3698d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <CreateVirtualMFADeviceResponse>
3708d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <CreateVirtualMFADeviceResult>
3718d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <VirtualMFADevice>
3728d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  <SerialNumber>arn:aws:iam::123456789012:mfa/ExampleName</SerialNumber>
3738d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  <Base32StringSeed>2K5K5XTLA7GGE75TQLYEXAMPLEEXAMPLEEXAMPLECHDFW4KJYZ6
3748d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  UFQ75LL7COCYKM</Base32StringSeed>
3758d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  <QRCodePNG>89504E470D0A1A0AASDFAHSDFKJKLJFKALSDFJASDF</QRCodePNG>
3768d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                </VirtualMFADevice>
3778d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              </CreateVirtualMFADeviceResult>
3788d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <ResponseMetadata>
3798d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <RequestId>7a62c49f-347e-4fc4-9331-6e8eEXAMPLE</RequestId>
3808d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              </ResponseMetadata>
3818d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </CreateVirtualMFADeviceResponse>
3828d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        """
3838d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
3848d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_create_virtual_mfa_device(self):
3858d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
3868d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        response = self.service_connection.create_virtual_mfa_device('/', 'ExampleName')
3878d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assert_request_parameters(
3888d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            {'Path': '/',
3898d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi             'VirtualMFADeviceName': 'ExampleName',
3908d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi             'Action': 'CreateVirtualMFADevice'},
3918d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            ignore_params_values=['Version'])
3928d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assertEquals(response['create_virtual_mfa_device_response']
3938d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                                  ['create_virtual_mfa_device_result']
3948d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                                  ['virtual_mfa_device']
3958d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                                  ['serial_number'], 'arn:aws:iam::123456789012:mfa/ExampleName')
3968d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
3978d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass TestGetAccountPasswordPolicy(AWSMockServiceTestCase):
3988d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    connection_class = IAMConnection
3998d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
4008d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def default_body(self):
4018d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        return b"""
4028d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <GetAccountPasswordPolicyResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
4038d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <GetAccountPasswordPolicyResult>
4048d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <PasswordPolicy>
4058d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  <AllowUsersToChangePassword>true</AllowUsersToChangePassword>
4068d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  <RequireUppercaseCharacters>true</RequireUppercaseCharacters>
4078d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  <RequireSymbols>true</RequireSymbols>
4088d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  <ExpirePasswords>false</ExpirePasswords>
4098d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  <PasswordReusePrevention>12</PasswordReusePrevention>
4108d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  <RequireLowercaseCharacters>true</RequireLowercaseCharacters>
4118d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  <MaxPasswordAge>90</MaxPasswordAge>
4128d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  <HardExpiry>false</HardExpiry>
4138d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  <RequireNumbers>true</RequireNumbers>
4148d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  <MinimumPasswordLength>12</MinimumPasswordLength>
4158d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                </PasswordPolicy>
4168d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              </GetAccountPasswordPolicyResult>
4178d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <ResponseMetadata>
4188d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <RequestId>7a62c49f-347e-4fc4-9331-6e8eEXAMPLE</RequestId>
4198d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              </ResponseMetadata>
4208d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </GetAccountPasswordPolicyResponse>
4218d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        """
4228d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
4238d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_get_account_password_policy(self):
4248d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
4258d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        response = self.service_connection.get_account_password_policy()
4268d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
4278d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assert_request_parameters(
4288d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            {
4298d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                'Action': 'GetAccountPasswordPolicy',
4308d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            },
4318d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            ignore_params_values=['Version'])
4328d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assertEquals(response['get_account_password_policy_response']
4338d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                          ['get_account_password_policy_result']['password_policy']
4348d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                          ['minimum_password_length'], '12')
4358d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
4368d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
4378d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass TestUpdateAccountPasswordPolicy(AWSMockServiceTestCase):
4388d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    connection_class = IAMConnection
4398d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
4408d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def default_body(self):
4418d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        return b"""
4428d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <UpdateAccountPasswordPolicyResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
4438d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi               <ResponseMetadata>
4448d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                  <RequestId>7a62c49f-347e-4fc4-9331-6e8eEXAMPLE</RequestId>
4458d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi               </ResponseMetadata>
4468d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </UpdateAccountPasswordPolicyResponse>
4478d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        """
4488d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
4498d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_update_account_password_policy(self):
4508d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
4518d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        response = self.service_connection.update_account_password_policy(minimum_password_length=88)
4528d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
4538d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assert_request_parameters(
4548d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            {
4558d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                'Action': 'UpdateAccountPasswordPolicy',
4568d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                'MinimumPasswordLength': 88
4578d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            },
4588d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            ignore_params_values=['Version'])
4598d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
4608d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
4618d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass TestDeleteAccountPasswordPolicy(AWSMockServiceTestCase):
4628d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    connection_class = IAMConnection
4638d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
4648d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def default_body(self):
4658d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        return b"""
4668d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            <DeleteAccountPasswordPolicyResponse>
4678d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              <ResponseMetadata>
4688d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                <RequestId>7a62c49f-347e-4fc4-9331-6e8eEXAMPLE</RequestId>
4698d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi              </ResponseMetadata>
4708d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            </DeleteAccountPasswordPolicyResponse>
4718d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        """
4728d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
4738d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    def test_delete_account_password_policy(self):
4748d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.set_http_response(status_code=200)
4758d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        response = self.service_connection.delete_account_password_policy()
4768d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
4778d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        self.assert_request_parameters(
4788d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            {
4798d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi                'Action': 'DeleteAccountPasswordPolicy'
4808d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            },
4818d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi            ignore_params_values=['Version'])
482