diff --git a/moto/iam/models.py b/moto/iam/models.py index 5110a012e..c204a60d9 100644 --- a/moto/iam/models.py +++ b/moto/iam/models.py @@ -4,7 +4,7 @@ from boto.exception import BotoServerError from moto.core import BaseBackend from .utils import random_access_key, random_alphanumeric, random_resource_id from datetime import datetime -import base64 +import codecs class Role(object): @@ -446,6 +446,6 @@ class IAMBackend(BaseBackend): report = 'user,arn,user_creation_time,password_enabled,password_last_used,password_last_changed,password_next_rotation,mfa_active,access_key_1_active,access_key_1_last_rotated,access_key_2_active,access_key_2_last_rotated,cert_1_active,cert_1_last_rotated,cert_2_active,cert_2_last_rotated\n' for user in self.users: report += self.users[user].to_csv() - return base64.b64encode(report.encode('ascii')) + return codecs.encode(report.encode('ascii'), 'base64').decode('ascii') iam_backend = IAMBackend() diff --git a/tests/test_iam/test_iam.py b/tests/test_iam/test_iam.py index 0538c5f17..4f13fd256 100644 --- a/tests/test_iam/test_iam.py +++ b/tests/test_iam/test_iam.py @@ -5,7 +5,7 @@ import re from nose.tools import assert_raises, assert_equals, assert_not_equals from boto.exception import BotoServerError -import base64 +import codecs from moto import mock_iam @@ -220,5 +220,5 @@ def test_get_credential_report(): while result['generate_credential_report_response']['generate_credential_report_result']['state'] != 'COMPLETE': result = conn.generate_credential_report() result = conn.get_credential_report() - report = base64.b64decode(result['get_credential_report_response']['get_credential_report_result']['content']) + report = codecs.decode(result['get_credential_report_response']['get_credential_report_result']['content'].encode('ascii'), 'base64').decode('ascii') report.should.match(r'.*my-user.*') \ No newline at end of file