1
"""Tests for assess_perf_test_simple module."""
3
from datetime import datetime, timedelta
5
import logbreakdown as lb
6
from generate_perfscale_results import TimingData
12
class TestExtractDateFromLine(TestCase):
14
def test_returns_just_date(self):
15
example_line = '2016-09-01 02:51:31 INFO juju.apiserver ...'
17
'2016-09-01 02:51:31', lb.extract_date_from_line(example_line))
20
class TestLogLineWithinStartRange(TestCase):
22
def test_returns_false_when_line_isnt_dated(self):
23
line = 'Warning some undated line.'
24
self.assertFalse(lb.log_line_within_start_range(line, None))
26
def test_returns_true_when_line_is_after_start_date(self):
27
line = '2016-09-01 02:51:31 INFO testing.'
28
end_date = datetime.strptime('2016-09-01 02:51:20', lb.dt_format)
30
lb.log_line_within_start_range(line, end_date))
32
def test_returns_true_when_line_is_same_as_start_date(self):
33
line = '2016-09-01 02:51:31 INFO testing.'
34
end_date = datetime.strptime('2016-09-01 02:51:31', lb.dt_format)
36
lb.log_line_within_start_range(line, end_date))
38
def test_returns_false_when_line_is_newer_then_start_date(self):
39
line = '2016-09-01 02:51:20 INFO testing.'
40
end_date = datetime.strptime('2016-09-01 02:51:31', lb.dt_format)
42
lb.log_line_within_start_range(line, end_date))
45
class TestLogLineWithinEndRange(TestCase):
47
def test_returns_true_when_line_isnt_dated(self):
48
line = 'Warning some undated line.'
49
self.assertTrue(lb.log_line_within_end_range(line, None))
51
def test_returns_true_when_line_is_before_end_date(self):
52
line = '2016-09-01 02:51:31 INFO testing.'
53
end_date = datetime.strptime('2016-09-01 02:51:35', lb.dt_format)
55
lb.log_line_within_end_range(line, end_date))
57
def test_returns_true_when_line_is_same_as_end_date(self):
58
line = '2016-09-01 02:51:31 INFO testing.'
59
end_date = datetime.strptime('2016-09-01 02:51:31', lb.dt_format)
61
lb.log_line_within_end_range(line, end_date))
63
def test_returns_false_when_line_is_older_then_end_date(self):
64
line = '2016-09-01 02:51:31 INFO testing.'
65
end_date = datetime.strptime('2016-09-01 02:51:20', lb.dt_format)
67
lb.log_line_within_end_range(line, end_date))
70
class TestChunkEventRange(TestCase):
71
def test_returns_start_and_end_when_period_less_than_time_step(self):
72
"""If the start and end period is less than the default step (20
73
seconds) only the start and end should be considered.
75
start = datetime.utcnow()
76
end = start + timedelta(seconds=5)
77
event = TimingData(start, end)
79
start_dt = datetime.strptime(event.start, lb.dt_format)
80
end_dt = datetime.strptime(event.end, lb.dt_format)
82
self.assertEqual(lb._chunk_event_range(event), [(start_dt, end_dt)])
84
def test_chunks_event_spanning_multiple_periods(self):
85
start = datetime.utcnow().replace(microsecond=0)
86
end = start + timedelta(seconds=2*lb.LOG_BREAKDOWN_SECONDS)
87
event = TimingData(start, end)
89
first_end = start + timedelta(seconds=lb.LOG_BREAKDOWN_SECONDS)
90
second_start = start + timedelta(seconds=lb.LOG_BREAKDOWN_SECONDS + 1)
92
expected_chunks = [(start, first_end), (second_start, end)]
94
lb._chunk_event_range(event),