1
"""Tests for perf_graphing support module."""
3
from mock import mock_open, patch, Mock
6
import perf_graphing as pg
7
from tests import TestCase
10
class TestCreateMongodbRRDFiles(TestCase):
12
def test_raises_SourceFileNotFound_for_missing_file(self):
13
with self.assertRaises(pg.SourceFileNotFound):
14
pg.create_mongodb_rrd_files('/foo', '/bar')
16
def test_create_mongodb_rrd_files(self):
17
results_dir = '/foo/test/'
18
destination_dir = '/bar/test/'
22
stat_data = (start_ts, end_ts, all_data)
24
with patch.object(pg, 'open', m_open):
26
pg, 'get_mongodb_stat_data',
27
autospec=True, return_value=stat_data) as m_gmst:
29
pg, '_create_mongodb_memory_database',
30
autospec=True) as m_mdb:
32
pg, '_create_mongodb_query_database',
33
autospec=True) as m_qdb:
34
pg.create_mongodb_rrd_files(
35
results_dir, destination_dir)
36
file_handle = m_open()
37
m_gmst.assert_called_once_with(file_handle)
38
m_mdb.assert_called_once_with(
39
'/bar/test/mongodb_memory.rrd', start_ts, all_data)
40
m_qdb.assert_called_once_with(
41
'/bar/test/mongodb.rrd', start_ts, all_data)
44
class TestGetMongodbStatData(TestCase):
46
def get_test_file_data(self):
47
file_data = StringIO.StringIO()
49
' 41 322 28 12 1 59|0 0.4 0.5 '
50
'0 792M 103M 0|0 0|0 114k 199k 24 juju PRI '
51
'2016-10-05T22:54:23Z\n')
53
' 11 231 9 *0 0 9|0 0.1 0.6 '
54
'0 792M 105M 0|0 0|0 51.6k 131k 24 juju '
55
'PRI 2016-10-05T22:55:08Z\n')
59
def test_returns_populated_MongoStatsData_object(self):
60
file_data = self.get_test_file_data()
61
_, _, data = pg.get_mongodb_stat_data(file_data)
63
self.assertEqual(data[0].timestamp, 1475708063)
64
self.assertEqual(data[0].insert, 41)
65
self.assertEqual(data[0].query, 322)
66
self.assertEqual(data[0].update, 28)
67
self.assertEqual(data[0].delete, 12)
68
self.assertEqual(data[0].vsize, 792000000)
69
self.assertEqual(data[0].res, 103000000)
71
def test_returns_first_and_last_timestamps(self):
72
file_data = self.get_test_file_data()
74
first, last, _ = pg.get_mongodb_stat_data(file_data)
75
self.assertEqual(first, 1475708063)
76
self.assertEqual(last, 1475708108)
78
def test_returns_multiple_results(self):
79
file_data = self.get_test_file_data()
80
first, last, data = pg.get_mongodb_stat_data(file_data)
82
self.assertEqual(len(data), 2)
83
self.assertEqual(data[0].timestamp, 1475708063)
84
self.assertEqual(data[1].timestamp, 1475708108)
87
class TestValueToBytes(TestCase):
89
def test_keeps_already_bytes(self):
90
self.assertEqual(pg.value_to_bytes('0'), 0)
91
self.assertEqual(pg.value_to_bytes('100'), 100)
93
def test_converts_Kvalues_to_bytes(self):
94
self.assertEqual(pg.value_to_bytes('1K'), 1000)
95
self.assertEqual(pg.value_to_bytes('1.5K'), 1500)
97
def test_converts_Mvalues_to_bytes(self):
98
self.assertEqual(pg.value_to_bytes('1M'), 1000000)
99
self.assertEqual(pg.value_to_bytes('2.5M'), 2500000)
101
def test_converts_Gvalues_to_bytes(self):
102
self.assertEqual(pg.value_to_bytes('1G'), 1000000000)
103
self.assertEqual(pg.value_to_bytes('2.5G'), 2500000000)
105
def test_raises_exception_on_unknown(self):
106
with self.assertRaises(ValueError):
107
pg.value_to_bytes('abc')
109
def test_returns_inttype(self):
110
self.assertIsInstance(pg.value_to_bytes('1M'), int)
113
class TestMongoStatsData(TestCase):
115
def test_values_are_int_type(self):
116
test_stats = pg.MongoStatsData(None, '*1', '*1', '*1', '*1', '1', '1')
117
self.assertIsInstance(test_stats.insert, int)
118
self.assertIsInstance(test_stats.query, int)
119
self.assertIsInstance(test_stats.update, int)
120
self.assertIsInstance(test_stats.delete, int)
121
self.assertIsInstance(test_stats.vsize, int)
122
self.assertIsInstance(test_stats.res, int)
124
def test_converts_MandG_values_to_bytes(self):
125
test_stats = pg.MongoStatsData(None, '0', '0', '0', '0', '1M', '1G')
127
self.assertEqual(test_stats.vsize, 1000000)
128
self.assertEqual(test_stats.res, 1000000000)
130
def test_removes_star_indicators(self):
131
test_stats = pg.MongoStatsData(None, '*1', '*1', '*1', '*1', '0', '0')
132
self.assertEqual(test_stats.insert, 1)
133
self.assertEqual(test_stats.query, 1)
134
self.assertEqual(test_stats.update, 1)
135
self.assertEqual(test_stats.delete, 1)
137
def test_stores_timestamp(self):
138
test_stats = pg.MongoStatsData(1234, '0', '0', '0', '0', '0', '0')
139
self.assertEqual(test_stats.timestamp, 1234)