コード例 #1
0
def test_update_rule_schedule():
    eventbridge_boto3_client = boto3.client('events')
    stubber = Stubber(eventbridge_boto3_client)
    stubber.add_response('put_rule', {'RuleArn': 'theArn'}, {
        'Name': 'theName',
        'ScheduleExpression': 'foo'
    })
    stubber.activate()
    service = EventBridgeService(eventbridge_boto3_client)

    tags = service.update_rule_schedule('theName', 'foo')
コード例 #2
0
def test_get_rule_tags():
    eventbridge_boto3_client = boto3.client('events')
    stubber = Stubber(eventbridge_boto3_client)
    stubber.add_response('list_tags_for_resource',
                         {'Tags': [{
                             'Key': 'foo',
                             'Value': 'bar'
                         }]}, {'ResourceARN': 'theArn'})
    stubber.activate()
    service = EventBridgeService(eventbridge_boto3_client)

    tags = service.get_rule_tags('theArn')

    assert tags == [{'Key': 'foo', 'Value': 'bar'}]
コード例 #3
0
def test_process_resources_updates_schedule_when_recurrences_are_different(mocker):
    rules = [{'Name': 'ruleName', 'Arn': 'ruleArn', 'ScheduleExpression': 'cron(foo)'}]
    tags = [
        {'Key': 'foo:bar:enabled', 'Value': ''},
        {'Key': 'foo:bar:local-timezone', 'Value': 'Europe/Madrid'},
        {'Key': 'foo:bar:local-time', 'Value': '10:00'}
    ]
    eb_svc = EventBridgeService()
    rec_calc = RecurrenceCalculator()
    processor = EventBridgeProcessor('foo:bar', eb_svc, rec_calc)
    mocker.patch.object(eb_svc, 'get_scheduled_rules', return_value=rules)
    mocker.patch.object(eb_svc, 'get_rule_tags', return_value=tags)
    mocker.patch.object(eb_svc, 'update_rule_schedule', return_value=None)
    mocker.patch.object(rec_calc, 'calculate_recurrence', return_value='bar')

    changes = processor.process_resources()

    eb_svc.get_rule_tags.assert_called_once_with('ruleArn')
    rec_calc.calculate_recurrence.assert_called_once_with('foo', '10:00', 'Europe/Madrid')
    eb_svc.update_rule_schedule.assert_called_once_with('ruleName', 'cron(bar)')
    assert len(changes) == 1
    assert changes[0] == {
        'Type': 'EventBridgeRule',
        'ResourceName': 'ruleName',
        'ResourceArn': 'ruleArn',
        'OriginalRecurrence': 'foo',
        'NewRecurrence': 'bar',
        'LocalTime': '10:00',
        'LocalTimezone': 'Europe/Madrid'
    }
コード例 #4
0
def test_get_scheduled_rules():
    eventbridge_boto3_client = boto3.client('events')
    stubber = Stubber(eventbridge_boto3_client)
    pattern_based_rule = {
        'Name': 'EventBasedRule',
        'EventPattern': '{"foo":"bar"}'
    }
    scheduled_rule = {
        'Name': 'ScheduledRule',
        'ScheduleExpression': '* * * * * *'
    }
    response = {'Rules': [pattern_based_rule, scheduled_rule]}
    stubber.add_response('list_rules', response, {'EventBusName': 'default'})
    stubber.activate()
    service = EventBridgeService(eventbridge_boto3_client)

    rules = service.get_scheduled_rules()

    assert len(rules) == 1
    assert rules[0] == scheduled_rule
コード例 #5
0
def test_process_resources_without_timezone_tag(mocker):
    rules = [{'Name': 'ruleName', 'Arn': 'ruleArn'}]
    tags = [{'Key': 'foo:bar:enabled', 'Value': ''}]
    eb_svc = EventBridgeService()
    rec_calc = RecurrenceCalculator()
    processor = EventBridgeProcessor('foo:bar', eb_svc, rec_calc)
    mocker.patch.object(eb_svc, 'get_scheduled_rules', return_value=rules)
    mocker.patch.object(eb_svc, 'get_rule_tags', return_value=tags)

    changes = processor.process_resources()

    eb_svc.get_rule_tags.assert_called_once_with('ruleArn')
    assert len(changes) == 0
コード例 #6
0
def test_process_resources_with_same_recurrence(mocker):
    rules = [{'Name': 'ruleName', 'Arn': 'ruleArn', 'ScheduleExpression': 'cron(foo)'}]
    tags = [
        {'Key': 'foo:bar:enabled', 'Value': ''},
        {'Key': 'foo:bar:local-timezone', 'Value': 'Europe/Madrid'}
    ]
    eb_svc = EventBridgeService()
    rec_calc = RecurrenceCalculator()
    processor = EventBridgeProcessor('foo:bar', eb_svc, rec_calc)
    mocker.patch.object(eb_svc, 'get_scheduled_rules', return_value=rules)
    mocker.patch.object(eb_svc, 'get_rule_tags', return_value=tags)
    mocker.patch.object(rec_calc, 'calculate_recurrence', return_value='foo')

    changes = processor.process_resources()

    eb_svc.get_rule_tags.assert_called_once_with('ruleArn')
    assert len(changes) == 0
コード例 #7
0
def test_process_resources_skips_update_when_an_exception_is_thrown_when_updating_schedule(mocker):
    rules = [{'Name': 'ruleName', 'Arn': 'ruleArn', 'ScheduleExpression': 'cron(foo)'}]
    tags = [
        {'Key': 'foo:bar:enabled', 'Value': ''},
        {'Key': 'foo:bar:local-timezone', 'Value': 'Europe/Madrid'},
        {'Key': 'foo:bar:local-time', 'Value': '10:00'}
    ]
    eb_svc = EventBridgeService()
    rec_calc = RecurrenceCalculator()
    processor = EventBridgeProcessor('foo:bar', eb_svc, rec_calc)
    mocker.patch.object(eb_svc, 'get_scheduled_rules', return_value=rules)
    mocker.patch.object(eb_svc, 'get_rule_tags', return_value=tags)
    mocker.patch.object(eb_svc, 'update_rule_schedule', side_effect=Exception('mocked exception'))
    mocker.patch.object(rec_calc, 'calculate_recurrence', return_value='bar')

    changes = processor.process_resources()

    eb_svc.get_rule_tags.assert_called_once_with('ruleArn')
    eb_svc.update_rule_schedule.assert_called_once_with('ruleName', 'cron(bar)')
    assert len(changes) == 0
コード例 #8
0
def test_default_client_is_eventbridge_client():
    service = EventBridgeService()

    client = service.get_client()

    assert client.__module__ + '.' + client.__class__.__qualname__ == 'botocore.client.EventBridge'