1
# This Source Code Form is subject to the terms of the Mozilla Public
2
# License, v. 2.0. If a copy of the MPL was not distributed with this
3
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
15
from mozsystemmonitor.resourcemonitor import (
16
SystemResourceMonitor,
21
@unittest.skipIf(psutil is None, 'Resource monitor requires psutil.')
22
class TestResourceMonitor(unittest.TestCase):
24
monitor = SystemResourceMonitor(poll_interval=0.5)
31
data = list(monitor.range_usage())
32
self.assertGreater(len(data), 3)
34
self.assertIsInstance(data[0], SystemResourceUsage)
37
monitor = SystemResourceMonitor(poll_interval=2.0)
41
data = list(monitor.range_usage())
42
self.assertEqual(len(data), 0)
44
def test_phases(self):
45
monitor = SystemResourceMonitor(poll_interval=0.25)
50
with monitor.phase('phase1'):
53
with monitor.phase('phase2'):
58
self.assertEqual(len(monitor.phases), 2)
59
self.assertEqual(['phase2', 'phase1'], monitor.phases.keys())
61
all = list(monitor.range_usage())
62
data1 = list(monitor.phase_usage('phase1'))
63
data2 = list(monitor.phase_usage('phase2'))
65
self.assertGreater(len(all), len(data1))
66
self.assertGreater(len(data1), len(data2))
68
# This could fail if time.time() takes more than 0.1s. It really
70
self.assertAlmostEqual(data1[-1].end, data2[-1].end, delta=0.25)
72
def test_no_data(self):
73
monitor = SystemResourceMonitor()
75
data = list(monitor.range_usage())
76
self.assertEqual(len(data), 0)
78
def test_events(self):
79
monitor = SystemResourceMonitor(poll_interval=0.25)
85
monitor.record_event('t0')
89
monitor.record_event('t1')
93
events = monitor.events
94
self.assertEqual(len(events), 2)
98
self.assertEqual(event[1], 't0')
99
self.assertAlmostEqual(event[0], t0, delta=0.25)
101
data = list(monitor.between_events_usage('t0', 't1'))
102
self.assertGreater(len(data), 0)
104
def test_aggregate_cpu(self):
105
monitor = SystemResourceMonitor(poll_interval=0.25)
111
values = monitor.aggregate_cpu_percent()
112
self.assertIsInstance(values, list)
113
self.assertEqual(len(values), multiprocessing.cpu_count())
115
self.assertIsInstance(v, float)
117
value = monitor.aggregate_cpu_percent(per_cpu=False)
118
self.assertIsInstance(value, float)
120
values = monitor.aggregate_cpu_times()
121
self.assertIsInstance(values, list)
122
self.assertGreater(len(values), 0)
123
self.assertTrue(hasattr(values[0], 'user'))
127
value = monitor.aggregate_cpu_times(per_cpu=False)
128
self.assertIsInstance(value, t)
130
def test_aggregate_io(self):
131
monitor = SystemResourceMonitor(poll_interval=0.25)
133
# There's really no easy way to ensure I/O occurs. For all we know
134
# reads and writes will all be serviced by the page cache.
139
values = monitor.aggregate_io()
140
self.assertTrue(hasattr(values, 'read_count'))
142
def test_memory(self):
143
monitor = SystemResourceMonitor(poll_interval=0.25)
149
v = monitor.min_memory_available()
150
self.assertIsInstance(v, long)
152
v = monitor.max_memory_percent()
153
self.assertIsInstance(v, float)