def _test_lambda_write_cloud_watch__with_asserts(self): group_name = '/unit-tests/test_log_group' stream_name = Misc.random_string_and_numbers(prefix='tmp_stream_') message = 'this is a message sent from an lambda function' lambda_name = 'osbot_aws.lambdas.dev.write_cloud_watch_log' log_group_arn = 'arn:aws:logs:eu-west-2:244560807427:log-group:{0}*'.format( group_name) policy_name = 'temp_policy_for_lambda_write_cloud_watch' role_name = 'temp_role_for_lambda_invocation' policy_actions = ['logs:PutLogEvents'] logs = Logs(group_name=group_name, stream_name=stream_name) logs.group_create() logs.stream_create() iam_role = IAM(role_name=role_name) iam_policy = IAM_Policy(policy_name=policy_name) iam_policy.add_statement_allow(policy_actions, [log_group_arn]) policy_arn = iam_policy.create( delete_before_create=True).get('policy_arn') assert iam_policy.exists() is True assert iam_role.role_exists() is True assert logs.group_exists() is True assert logs.stream_exists() is True assert set(iam_role.role_policies()) == { 'AWSXrayWriteOnlyAccess', 'policy_temp_role_for_lambda_invocation' } iam_role.role_policy_attach(policy_arn) assert set(iam_role.role_policies()) == { 'AWSXrayWriteOnlyAccess', 'policy_temp_role_for_lambda_invocation', 'temp_policy_for_lambda_write_cloud_watch' } sleep(10) # wait for AWS to propagate role update payload = { 'group_name': group_name, 'stream_name': stream_name, 'message': message } lambda_obj = Lambda_Package(lambda_name) #.update_with_root_folder() result = lambda_obj.invoke(payload) sleep(1) # wait for Cloudwatch to update assert result.get('status') == 'ok' assert logs.messages() == [message] assert iam_policy.delete() is True assert logs.group_delete() is True assert logs.group_exists() is False assert set(iam_role.role_policies()) == { 'AWSXrayWriteOnlyAccess', 'policy_temp_role_for_lambda_invocation' }
class test_IAM_Policy(TestCase): def setUp(self): self.account_id = '244560807427' self.iam_policy = IAM_Policy() def test_add_cloud_watch(self): expected_statements = [{ 'Action': [ 'logs:CreateLogGroup', 'logs:CreateLogStream', 'logs:PutLogEvents' ], 'Effect': 'Allow', 'Resource': ['abc'] }] assert self.iam_policy.add_cloud_watch('abc') == self.iam_policy assert self.iam_policy.statement().get( 'Statement') == expected_statements def test_create(self): self.iam_policy = IAM_Policy('temp_policy__test_create') self.iam_policy.delete() result = self.iam_policy.add_cloud_watch('arn:aws:abc').create() expected_policy_arn = 'arn:aws:iam::{0}:policy/{1}'.format( self.account_id, self.iam_policy.policy_name) status = result.get('status') policy_arn = result.get('policy_arn') data = result.get('data') assert status == 'ok' assert policy_arn == expected_policy_arn assert data.get('Arn') == expected_policy_arn assert data.get('Path') == '/' assert data.get('DefaultVersionId') == 'v1' assert data.get('PolicyName') == self.iam_policy.policy_name assert self.iam_policy.statement_from_aws() == [{ 'Action': [ 'logs:CreateLogGroup', 'logs:CreateLogStream', 'logs:PutLogEvents' ], 'Effect': 'Allow', 'Resource': ['arn:aws:abc'] }] assert self.iam_policy.delete() is True def test_create___bad_policy_statement(self): iam_policy = IAM_Policy('temp_policy__test_create_no_policy') response = iam_policy.create() assert response == { 'data': 'An error occurred (MalformedPolicyDocument) when calling the CreatePolicy operation: Syntax errors in policy.', 'policy_arn': None, 'policy_name': 'temp_policy__test_create_no_policy', 'status': 'error' } assert iam_policy.exists() is False def test_create___no_policy_name(self): assert IAM_Policy().create() == { 'data': 'policy name is None', 'status': 'error' } def test_statement(self): assert IAM_Policy().statement() == { 'Statement': [], 'Version': '2012-10-17' }