1
from landscape.lib.monitor import (
2
Timer, Monitor, BurstMonitor, CoverageMonitor, FrequencyMonitor)
3
from landscape.reactor import FakeReactor
4
from landscape.tests.helpers import LandscapeTest
7
class ReactorHavingTest(LandscapeTest):
9
super(ReactorHavingTest, self).setUp()
10
self.reactor = FakeReactor()
13
class TimerTest(ReactorHavingTest):
16
super(TimerTest, self).setUp()
17
self.timer = Timer(create_time=self.reactor.time)
19
def test_since_start(self):
20
self.assertEquals(self.timer.since_start(), 0.0)
22
self.reactor.advance(1)
23
self.assertEquals(self.timer.since_start(), 1.0)
25
self.reactor.advance(2)
26
self.assertEquals(self.timer.since_start(), 3.0)
28
def test_since_reset(self):
29
self.reactor.advance(1)
30
self.assertEquals(self.timer.since_reset(), 1.0)
32
self.reactor.advance(1)
33
self.assertEquals(self.timer.since_start(), 2.0)
35
self.reactor.advance(2)
37
self.assertEquals(self.timer.since_start(), 4.0)
40
class MonitorTest(ReactorHavingTest):
43
super(MonitorTest, self).setUp()
44
self.monitor = Monitor("test", create_time=self.reactor.time)
47
self.assertEquals(self.monitor.count, 0)
48
self.assertEquals(self.monitor.total_count, 0)
51
self.assertEquals(self.monitor.count, 1)
52
self.assertEquals(self.monitor.total_count, 1)
55
self.assertEquals(self.monitor.count, 0)
59
self.assertEquals(self.monitor.count, 2)
60
self.assertEquals(self.monitor.total_count, 2)
64
self.assertEquals(self.monitor.count, 1)
65
self.assertEquals(self.monitor.total_count, 3)
70
self.reactor.advance(1)
72
self.assertTrue("INFO: 100 test events occurred in the last 100.00s."
73
in self.logfile.getvalue())
76
class BurstMonitorTest(ReactorHavingTest):
79
super(BurstMonitorTest, self).setUp()
80
self.monitor = BurstMonitor(60, 1, "test",
81
create_time=self.reactor.time)
83
def test_warn_no_pings(self):
84
self.assertFalse(self.monitor.warn())
86
def test_warn_below_threshold(self):
88
self.reactor.advance(61)
89
self.assertFalse(self.monitor.warn())
91
def test_warn_on_threshold(self):
93
self.reactor.advance(61)
94
self.assertFalse(self.monitor.warn())
96
def test_warn_over_threshold(self):
98
self.reactor.advance(30)
100
self.assertTrue(self.monitor.warn())
102
self.reactor.advance(31)
103
self.assertFalse(self.monitor.warn())
105
def test_warn_in_first_interval(self):
107
self.reactor.advance(59)
108
self.assertFalse(self.monitor.warn())
110
def test_warn_unexpected_burst(self):
112
self.reactor.advance(5000)
113
self.assertFalse(self.monitor.warn())
116
self.assertFalse(self.monitor.warn())
119
self.assertTrue(self.monitor.warn())
121
def test_warn_maximum_count(self):
122
monitor = BurstMonitor(60, 2, "test", create_time=self.reactor.time)
125
self.assertFalse(monitor.warn())
128
self.assertTrue(monitor.warn())
130
def test_warn_maximum_count_over_time_span(self):
131
monitor = BurstMonitor(60, 3, "test", create_time=self.reactor.time)
134
self.assertFalse(monitor.warn())
136
self.reactor.advance(30)
138
self.assertFalse(monitor.warn())
140
self.reactor.advance(31)
142
self.assertFalse(monitor.warn())
146
self.assertTrue(monitor.warn())
149
class CoverageMonitorTest(ReactorHavingTest):
152
super(CoverageMonitorTest, self).setUp()
153
self.monitor = CoverageMonitor(1, 1.0, "test",
154
create_time=self.reactor.time)
158
self.reactor.advance(1)
159
self.assertFalse(self.monitor.warn())
161
self.reactor.advance(1)
162
self.assertTrue(self.monitor.warn())
165
self.assertFalse(self.monitor.warn())
167
def test_percent_no_data(self):
169
If no time has passed and the monitor hasn't received any
170
pings it should return 100%.
172
self.assertEquals(self.monitor.percent, 1.0)
174
def test_percent(self):
175
self.reactor.advance(1)
176
self.assertEquals(self.monitor.percent, 0.0)
179
self.reactor.advance(1)
180
self.assertEquals(self.monitor.percent, 0.5)
182
def test_percent_reset(self):
183
self.reactor.advance(1)
184
self.assertEquals(self.monitor.percent, 0.0)
188
self.reactor.advance(1)
189
self.assertEquals(self.monitor.percent, 1.0)
191
def test_expected_count(self):
192
self.reactor.advance(1)
193
self.assertEquals(self.monitor.expected_count, 1.0)
195
self.reactor.advance(1)
196
self.assertEquals(self.monitor.expected_count, 2.0)
198
def test_expected_count_reset(self):
199
self.reactor.advance(1)
200
self.assertEquals(self.monitor.expected_count, 1.0)
203
self.reactor.advance(1)
204
self.assertEquals(self.monitor.expected_count, 1.0)
209
self.reactor.advance(1)
211
self.assertTrue("INFO: 100 of 100 expected test events (100.00%) "
212
"occurred in the last 100.00s."
213
in self.logfile.getvalue())
215
def test_log_warning(self):
217
self.reactor.advance(1)
219
self.assertTrue("WARNING: 0 of 100 expected test events (0.00%) "
220
"occurred in the last 100.00s."
221
in self.logfile.getvalue())
224
class FrequencyMonitorTest(ReactorHavingTest):
227
super(FrequencyMonitorTest, self).setUp()
228
self.monitor = FrequencyMonitor(100, 1, "test",
229
create_time=self.reactor.time)
231
def test_expected_count(self):
232
self.assertEquals(self.monitor.expected_count, 0)
234
self.reactor.advance(99)
235
self.assertEquals(self.monitor.expected_count, 0)
237
self.reactor.advance(1)
238
self.assertEquals(self.monitor.expected_count, 1)
241
self.assertFalse(self.monitor.warn())
243
self.reactor.advance(80)
245
self.assertFalse(self.monitor.warn())
247
self.reactor.advance(80)
248
self.assertFalse(self.monitor.warn())
251
self.assertFalse(self.monitor.warn())
253
self.reactor.advance(101)
254
self.assertTrue(self.monitor.warn())
258
self.reactor.advance(100)
260
self.assertTrue("minimum expected test events"
261
not in self.logfile.getvalue())
262
self.reactor.advance(1)
264
self.assertTrue("WARNING: Only 0 of 1 minimum expected test events "
265
"occurred in the last 100.00s."
266
in self.logfile.getvalue())