Ejemplo n.º 1
0
    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'
        }
Ejemplo n.º 2
0
class test_Logs(TestCase):

    log_group = '/unit-tests/test_log_group'
    stream_name = 'tmp_stream'
    logs = Logs(log_group, stream_name)
    delete_on_exit = True

    @classmethod
    def setUpClass(cls):
        if test_Logs.delete_on_exit:
            assert test_Logs.logs.group_create() is True

    @classmethod
    def tearDownClass(cls):
        if test_Logs.delete_on_exit:
            assert test_Logs.logs.group_delete() is True

    def setUp(self):
        self.logs = Logs(test_Logs.log_group, test_Logs.stream_name)
        self.logs.stream_create()

    def test_events(self):
        assert self.logs.events().get('events') == []
        message_1 = 'an message'
        message_2 = 'another message'
        result = self.logs.event_add(message_1)
        assert result.get('status') == 'ok'
        assert 'An error occurred (DataAlreadyAcceptedException)' in self.logs.event_add(
            'an message').get('data')
        assert self.logs.event_add(
            message_2, sequence_token=result.get('nextSequenceToken')).get(
                'status') == 'ok'
        max_attempts = 20
        sleep_for = 0.5
        for i in range(1, max_attempts):  # wait for log events to be processed
            if len(self.logs.events().get('events')) == 2:
                break
            sleep(sleep_for)
        assert len(self.logs.events().get('events')) == 2
        assert self.logs.messages() == [message_1, message_2]

    def test_log_group_create_delete_exists_info(self):
        tmp_log_group = Misc.random_string_and_numbers(
            prefix='/unit-tests/test_log_group_')
        temp_logs = Logs(tmp_log_group, '')
        assert temp_logs.group_exists() is False
        assert temp_logs.group_create() is True
        assert temp_logs.group_exists() is True
        assert temp_logs.group_info().get('logGroupName') == tmp_log_group
        assert temp_logs.group_delete() == True
        assert temp_logs.group_exists() is False

    def test_groups(self):
        assert len(list(self.logs.groups())) > 1
        assert len(self.logs.groups()) > 10

    def test_streams__exists_delete_create(self):
        assert self.logs.stream_exists(
        ) is True  # log stream is created by setUpClass
        assert self.logs.streams().pop().get(
            'logStreamName') == test_Logs.stream_name
        assert self.logs.stream_delete() is True
        assert self.logs.stream_delete() is False
        assert self.logs.streams() == []
        assert self.logs.stream_create() is True
        assert self.logs.stream_create() is False