Example #1
0
def test_flusher_message(spawn, joinall):
    """
    Test that we email a simple record appropriately.
    """
    template_dir = os.path.join(os.path.dirname(__file__), '..')

    pager_window = 5
    pager_limit = 10

    message_rate = MessageRate(pager_window, pager_limit)

    spawn_ret_val = object()
    spawn.return_value = spawn_ret_val

    env = Environment(loader=FileSystemLoader(template_dir))
    message_buffer = MessageBuffer(env.get_template('subject-template.txt'),
                               env.get_template('body-template.txt'))

    message = UniqueMessage('module', 'funcName', 'filename', 'message',
                            'pathname', 'lineno', 'exc_text', 'kind')

    message_buffer.add(message, 'source')

    flusher(message_buffer, message_rate)
    spawn.assert_called_once_with(mailer, ANY, ANY, ANY)

    # We shouldn't have done anything
    eq_(1, spawn.call_count)
    eq_(1, joinall.call_count)
    joinall.assert_called_once_with([spawn_ret_val])
Example #2
0
def test_flusher_rate_excede(spawn, joinall, pager, mailer):
    """
    Test that we complain extra loudly if we get too many errors.
    """
    template_dir = os.path.join(os.path.dirname(__file__), '..')

    pager_window = 5
    pager_limit = 10

    message_rate = MessageRate(pager_window, pager_limit)

    spawn_ret_val = object()
    spawn.return_value = spawn_ret_val

    env = Environment(loader=FileSystemLoader(template_dir))
    message_buffer = MessageBuffer(env.get_template('subject-template.txt'),
                               env.get_template('body-template.txt'))

    for i in range(pager_limit + 1):
        message_buffer.add(UniqueMessage('module', 'funcName', 'filename',
                                         'message', 'pathname', i,
                                         'exc_text', 'kind'),
                           'source')

    flusher(message_buffer, message_rate)
    eq_([call(pager, pager_limit + 1),
         call(mailer, ANY, ANY, ANY)],
        spawn.call_args_list)

    # We shouldn't have done anything
    eq_(2, spawn.call_count)
    eq_(1, joinall.call_count)
    joinall.assert_called_once_with([spawn_ret_val] * 2)
Example #3
0
def test_message_buffer():
    subject_template = Mock()
    body_template = Mock()

    buf = MessageBuffer(subject_template, body_template)
    msg1 = UniqueMessage('test', 'test', 'test', 'message1', 'test.py', 1,
                         'exception text', 'app')
    msg2 = UniqueMessage('test', 'test', 'test', 'message2', 'test.py', 1,
                         'exception text', 'app')

    buf.add(msg1, 'host1')
    buf.add(msg1, 'host1')
    buf.add(msg1, 'host2')
    buf.add(msg2, 'host2')

    eq_(4, buf.total)
    eq_(2, buf.total_unique)
    eq_({'app'}, buf.kinds)
    eq_(2, len(buf.sorted_counts))
    eq_('message1', buf.sorted_counts[0][0].message)
    eq_(3, buf.sorted_counts[0][1].total)
    eq_(3, buf.total_matching(lambda m: m.message == 'message1'))

    subject_template.render.return_value = 'subj'
    body_template.render.return_value = 'body'

    subj, body, uniq_messages = buf.flush()
    eq_('subj', subj)
    eq_('body', body)
    eq_(2, len(uniq_messages))

    eq_(1, subject_template.render.call_count)
    eq_(4, body_template.render.call_args[0][0]['total'])
    eq_(2, body_template.render.call_args[0][0]['total_unique'])
    eq_(2, len(body_template.render.call_args[0][0]['sorted_counts']))
    eq_('message1',
        body_template.render.call_args[0][0]['sorted_counts'][0][0].message)
    eq_({'app'}, body_template.render.call_args[0][0]['kinds'])