Completed
Push — master ( c845e9...7e8cc2 )
by Kenny
02:02
created

TestPlumdUtils   A

Complexity

Total Complexity 24

Size/Duplication

Total Lines 221
Duplicated Lines 0 %

Importance

Changes 2
Bugs 2 Features 2
Metric Value
c 2
b 2
f 2
dl 0
loc 221
rs 10
wmc 24

18 Methods

Rating   Name   Duplication   Size   Complexity  
A test_interval_invalid1() 0 5 1
A test_get_file_list_nonexistent() 0 6 1
A test_interval_eventset() 0 14 2
A test_get_file_map_normal() 0 14 1
A test_get_file_map_list_short1() 0 12 1
A test_get_file_map_list_empty() 0 6 1
A test_get_hostname() 0 4 1
A test_get_file_list_normal() 0 8 1
A test_get_file_map_short1() 0 12 1
A test_get_file_list_empty() 0 6 1
A test_get_file_normal1() 0 6 1
A test_get_file_map_short2() 0 12 1
A test_interval_eventnotset() 0 18 3
A test_get_file_map_empty() 0 6 1
A test_interval_normal1() 0 16 3
A test_get_file_map_list_nonexistent() 0 6 1
A test_get_file_map_list_normal() 0 14 1
A test_get_file_map_list_short2() 0 12 1
1
import sys
2
import math
3
import time
4
import socket
5
import os.path
6
import unittest
7
from threading import Event
8
from collections import deque
9
10
MAX_DIFF = 8192
11
FILE_PATH = os.path.realpath(__file__)
12
PATH = os.path.dirname(FILE_PATH)
13
DAT_PATH = os.path.join(PATH, "dat")
14
sys.path.insert(0, os.path.realpath(os.path.join(PATH, "../../../")))
15
import plumd.util
16
17
18
class TestPlumdUtils(unittest.TestCase):
19
20
    def test_get_hostname(self):
21
        """ensure hostname properly generated"""
22
        hostname = socket.gethostname().split(".")[0]
23
        self.assertEqual(plumd.util.get_hostname(), hostname)
24
25
26
    def test_get_file_map_normal(self):
27
        """ensure get_file_map returns expected mappings"""
28
        self.maxDiff = MAX_DIFF
29
        fname = os.path.join(DAT_PATH, "get_file_map/normal1.dat")
30
        check = plumd.util.get_file_map(fname, 2, 0)
31
        expected = {
32
            'vda': deque(['253','0','12985','19498','566600','80185','8755',
33
                          '25098','270730','344158','0','179702','424339']),
34
            'vda1': deque(['253','1','112','1231','2702','80','13','4','34',
35
                           '79','0','120','159']),
36
            'vda2': deque(['253','2','12864','18251','563698','80078','8742',
37
                           '25094','270696','344079','0','179608','424153'])
38
        }
39
        self.assertEqual(check, expected)
40
41
42
    def test_get_file_map_short1(self):
43
        """ensure get_file_map properly handles invalid/short input"""
44
        self.maxDiff = MAX_DIFF
45
        fname = os.path.join(DAT_PATH, "get_file_map/short1.dat")
46
        check = plumd.util.get_file_map(fname, 2, 0)
47
        expected = {
48
            'vda': deque(['253','0','12985','19498','566600','80185','8755',
49
                          '25098','270730','344158','0','179702','424339']),
50
            'vda1': deque(['253','1','112','1231','2702','80','13','4','34',
51
                           '79','0','120','159'])
52
        }
53
        self.assertEqual(check, expected)
54
55
56
    def test_get_file_map_short2(self):
57
        """ensure get_file_map properly handles invalid/short input"""
58
        self.maxDiff = MAX_DIFF
59
        fname = os.path.join(DAT_PATH, "get_file_map/short2.dat")
60
        check = plumd.util.get_file_map(fname, 2, 0)
61
        expected = {
62
            'vda': deque(['253','0','12985','19498','566600','80185','8755',
63
                          '25098','270730','344158','0','179702','424339']),
64
            'vda1': deque(['253','1','112','1231','2702','80','13','4','34',
65
                           '79','0','120','159'])
66
        }
67
        self.assertEqual(check, expected)
68
69
70
    def test_get_file_map_empty(self):
71
        """ensure get_file_map properly handles invalid/short input"""
72
        fname = os.path.join(DAT_PATH, "get_file_map/empty.dat")
73
        check = plumd.util.get_file_map(fname, 2, 0)
74
        expected = {}
75
        self.assertEqual(check, expected)
76
77
78
    def test_get_file_map_list_normal(self):
79
        """ensure get_file_map returns expected mappings"""
80
        self.maxDiff = MAX_DIFF
81
        fname = os.path.join(DAT_PATH, "get_file_map/normal1.dat")
82
        check = plumd.util.get_file_map_list(fname, 2, 0)
83
        expected = {
84
            'vda': ['253','0','12985','19498','566600','80185','8755',
85
                          '25098','270730','344158','0','179702','424339'],
86
            'vda1': ['253','1','112','1231','2702','80','13','4','34',
87
                           '79','0','120','159'],
88
            'vda2': ['253','2','12864','18251','563698','80078','8742',
89
                           '25094','270696','344079','0','179608','424153']
90
        }
91
        self.assertEqual(check, expected)
92
93
94
    def test_get_file_map_list_short1(self):
95
        """ensure get_file_map properly handles invalid/short input"""
96
        self.maxDiff = MAX_DIFF
97
        fname = os.path.join(DAT_PATH, "get_file_map/short1.dat")
98
        check = plumd.util.get_file_map_list(fname, 2, 0)
99
        expected = {
100
            'vda': ['253','0','12985','19498','566600','80185','8755',
101
                          '25098','270730','344158','0','179702','424339'],
102
            'vda1': ['253','1','112','1231','2702','80','13','4','34',
103
                           '79','0','120','159']
104
        }
105
        self.assertEqual(check, expected)
106
107
108
    def test_get_file_map_list_short2(self):
109
        """ensure get_file_map properly handles invalid/short input"""
110
        self.maxDiff = MAX_DIFF
111
        fname = os.path.join(DAT_PATH, "get_file_map/short2.dat")
112
        check = plumd.util.get_file_map_list(fname, 2, 0)
113
        expected = {
114
            'vda': ['253','0','12985','19498','566600','80185','8755',
115
                          '25098','270730','344158','0','179702','424339'],
116
            'vda1': ['253','1','112','1231','2702','80','13','4','34',
117
                           '79','0','120','159']
118
        }
119
        self.assertEqual(check, expected)
120
121
122
    def test_get_file_map_list_empty(self):
123
        """ensure get_file_map properly handles invalid/short input"""
124
        fname = os.path.join(DAT_PATH, "get_file_map/empty.dat")
125
        check = plumd.util.get_file_map_list(fname, 2, 0)
126
        expected = {}
127
        self.assertEqual(check, expected)
128
129
130
    def test_get_file_map_list_nonexistent(self):
131
        """ensure get_file_map properly handles invalid/short input"""
132
        fname = os.path.join(DAT_PATH, "get_file_map/nonexistantfile")
133
        check = plumd.util.get_file_map_list(fname, 2, 0)
134
        expected = {}
135
        self.assertEqual(check, expected)
136
137
138
    def test_get_file_list_normal(self):
139
        """ensure get_file_list properly handles normal inpurt"""
140
        fname = os.path.join(DAT_PATH, "get_file_list/normal1.dat")
141
        check = plumd.util.get_file_list(fname)
142
        expected = deque(['rootfs / rootfs rw 0 0\r',
143
                          'sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0\r',
144
                          'proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0'])
145
        self.assertEqual(check, expected)
146
147
148
    def test_get_file_list_empty(self):
149
        """ensure get_file_list properly handles empty inpurt"""
150
        fname = os.path.join(DAT_PATH, "get_file_list/empty.dat")
151
        check = plumd.util.get_file_list(fname)
152
        expected = deque([''])
153
        self.assertEqual(check, expected)
154
155
156
    def test_get_file_list_nonexistent(self):
157
        """ensure get_file_list properly handles empty inpurt"""
158
        fname = os.path.join(DAT_PATH, "get_file_list/nonexistantfile")
159
        check = plumd.util.get_file_list(fname)
160
        expected = deque([''])
161
        self.assertEqual(check, expected)
162
163
164
    def test_get_file_normal1(self):
165
        """ensure get_file properly handles normal inpurt"""
166
        fname = os.path.join(DAT_PATH, "get_file/normal1.dat")
167
        check = plumd.util.get_file(fname)
168
        expected = "get_file Normal1"
169
        self.assertEqual(check, expected)
170
171
172
    def test_get_file_normal1(self):
173
        """ensure get_file properly handles empty inpurt"""
174
        fname = os.path.join(DAT_PATH, "get_file/nonexistantfile")
175
        check = plumd.util.get_file(fname)
176
        expected = ""
177
        self.assertEqual(check, expected)
178
179
180
    def test_interval_normal1(self):
181
        """ensure interval class functioning normally"""
182
        interval = 0.01
183
        start = time.time()
184
        with plumd.util.Interval(interval):
185
            pass
186
        end = time.time()
187
        # should be roughly 0.1 seconds
188
        took = end - start
189
        if took > interval:
190
            diff = took - interval
191
        else:
192
            diff = interval - took
193
        # expect a small difference
194
        msg = "expected interval of {0} s, difference was: {1}"
195
        self.assertTrue(diff < interval/100, msg=msg.format(interval, diff))
196
197
198
    def test_interval_invalid1(self):
199
        """ensure interval class handling invalid interval"""
200
        interval = -0.1
201
        start = time.time()
202
        self.assertRaises(ValueError, plumd.util.Interval, interval)
203
204
205
    def test_interval_eventnotset(self):
206
        """ensure interval class handling events properly"""
207
        interval = 0.01
208
        evt = Event()
209
        start = time.time()
210
        with plumd.util.Interval(interval, evt):
211
            pass
212
        end = time.time()
213
        took = end - start
214
        # should be roughly 0.1 seconds
215
        if took > interval:
216
            diff = took - interval
217
        else:
218
            diff = interval - took
219
        expected = interval/10
220
        # expect a very very small difference - note: heavily loaded systems may trigger failure
221
        msg = "expected interval of {0} s, difference was: {1}"
222
        self.assertTrue(diff < expected, msg=msg.format(diff, diff))
223
224
225
    def test_interval_eventset(self):
226
        """ensure interval class handling events properly"""
227
        interval = 0.01
228
        evt = Event()
229
        start = time.time()
230
        with plumd.util.Interval(interval, evt):
231
            evt.set()
232
        end = time.time()
233
        diff = end - start
234
        # in this case the loop is expected to complete early
235
        # if we get here the test passes if it didn't take longer
236
        # than interval
237
        # running on heavily loaded systems could fail this though..
238
        self.assertTrue(interval > diff)
239
240
if __name__ == '__main__':
241
    unittest.main()
242