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])
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)
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'])