9
9
10
10
"""Glances unitary tests suite."""
11
11
12
+ import functools
12
13
import json
13
14
import time
14
15
import unittest
@@ -54,22 +55,31 @@ def setUp(self):
54
55
"""The function is called *every time* before test_*."""
55
56
print ('\n ' + '=' * 78 )
56
57
57
- def _common_plugin_tests (self , plugin ):
58
- """Common method to test a Glances plugin
59
- This method is called multiple time by test 100 to 1xx"""
60
-
61
- # Reset all the stats, history and views
58
+ def reset_stats_history_and_views (self , plugin ):
62
59
plugin_instance = stats .get_plugin (plugin )
63
60
plugin_instance .reset () # reset stats
64
61
plugin_instance .reset_views () # reset views
65
62
plugin_instance .reset_stats_history () # reset history
66
63
67
- # Check before update
68
- self .assertEqual (plugin_instance .get_raw (), plugin_instance .stats_init_value )
69
- self .assertEqual (plugin_instance .is_enabled (), True )
70
- self .assertEqual (plugin_instance .is_disabled (), False )
71
- self .assertEqual (plugin_instance .get_views (), {})
64
+ return plugin_instance
65
+
66
+ def zipWith (self , method , elems , values ):
67
+ [method (elem , value ) for elem , value in zip (elems , values )]
68
+
69
+ def do_checks_before_update (self , plugin_instance ):
70
+ elems = [
71
+ plugin_instance .get_raw (),
72
+ plugin_instance .is_enabled (),
73
+ plugin_instance .is_disabled (),
74
+ plugin_instance .get_views (),
75
+ ]
76
+
77
+ values = [plugin_instance .stats_init_value , True , False , {}]
78
+
79
+ self .zipWith (self .assertEqual , elems , values )
80
+
72
81
self .assertIsInstance (plugin_instance .get_raw (), (dict , list ))
82
+
73
83
if plugin_instance .history_enable () and isinstance (plugin_instance .get_raw (), dict ):
74
84
self .assertEqual (plugin_instance .get_key (), None )
75
85
self .assertTrue (
@@ -81,39 +91,72 @@ def _common_plugin_tests(self, plugin):
81
91
elif plugin_instance .history_enable () and isinstance (plugin_instance .get_raw (), list ):
82
92
self .assertNotEqual (plugin_instance .get_key (), None )
83
93
84
- # Update stats (add first element)
94
+ def update_stats ( self , plugin_instance ):
85
95
plugin_instance .update ()
86
96
plugin_instance .update_stats_history ()
87
97
plugin_instance .update_views ()
88
98
89
- # Check stats
99
+ return plugin_instance
100
+
101
+ def is_field_in_plugin (self , plugin_instance ):
102
+ def is_in_description (result , f ):
103
+ return True if f in plugin_instance .fields_description else result
104
+
105
+ def is_field_in_this_description (result , i ):
106
+ return functools .reduce (is_in_description , i , False )
107
+
108
+ return is_field_in_this_description
109
+
110
+ def is_field_in_stats (self , plugin_instance , plugin ):
111
+ def is_field_in_this_plugin (result , f ):
112
+ if f not in plugin_instance .get_raw ():
113
+ print (f"WARNING: { f } field not found in { plugin } plugin stats" )
114
+ else :
115
+ result = True
116
+
117
+ return result
118
+
119
+ return is_field_in_this_plugin
120
+
121
+ def check_stats (self , plugin_instance , plugin ):
90
122
self .assertIsInstance (plugin_instance .get_raw (), (dict , list ))
91
123
if isinstance (plugin_instance .get_raw (), dict ) and plugin_instance .get_raw () != {}:
92
- res = False
93
- for f in plugin_instance . fields_description :
94
- if f not in plugin_instance .get_raw ():
95
- print ( f"WARNING: { f } field not found in { plugin } plugin stats" )
96
- else :
97
- res = True
98
- self . assertTrue ( res )
124
+ init = False
125
+ is_field_present = self . is_field_in_stats ( plugin_instance , plugin )
126
+ field_description = plugin_instance .fields_description
127
+ result = functools . reduce ( is_field_present , field_description , init )
128
+
129
+ self . assertTrue ( result )
130
+
99
131
elif isinstance (plugin_instance .get_raw (), list ) and len (plugin_instance .get_raw ()) > 0 :
100
- res = False
101
- for i in plugin_instance .get_raw ():
102
- for f in i :
103
- if f in plugin_instance .fields_description :
104
- res = True
105
- self .assertTrue (res )
106
-
107
- self .assertEqual (plugin_instance .get_raw (), plugin_instance .get_export ())
108
- self .assertEqual (plugin_instance .get_stats (), plugin_instance .get_json ())
109
- self .assertEqual (json .loads (plugin_instance .get_stats ()), plugin_instance .get_raw ())
132
+ init = False
133
+ is_field_present = self .is_field_in_plugin (plugin_instance )
134
+ raw_from_instance = plugin_instance .get_raw ()
135
+ result = functools .reduce (is_field_present , raw_from_instance , init )
136
+
137
+ self .assertTrue (result )
138
+
139
+ elems = [plugin_instance .get_raw (), plugin_instance .get_stats (), json .loads (plugin_instance .get_stats ())]
140
+
141
+ values = [plugin_instance .get_export (), plugin_instance .get_json (), plugin_instance .get_raw ()]
142
+
143
+ self .zipWith (self .assertEqual , elems , values )
144
+
110
145
if len (plugin_instance .fields_description ) > 0 :
111
146
# Get first item of the fields_description
112
147
first_field = list (plugin_instance .fields_description .keys ())[0 ]
113
- self .assertIsInstance (plugin_instance .get_raw_stats_item (first_field ), dict )
114
- self .assertIsInstance (json .loads (plugin_instance .get_stats_item (first_field )), dict )
115
- self .assertIsInstance (plugin_instance .get_item_info (first_field , 'description' ), str )
116
- # Filter stats
148
+
149
+ elems = [
150
+ plugin_instance .get_raw_stats_item (first_field ),
151
+ json .loads (plugin_instance .get_stats_item (first_field )),
152
+ plugin_instance .get_item_info (first_field , 'description' ),
153
+ ]
154
+
155
+ values = [dict , dict , str ]
156
+
157
+ self .zipWith (self .assertIsInstance , elems , values )
158
+
159
+ def filter_stats (self , plugin_instance ):
117
160
current_stats = plugin_instance .get_raw ()
118
161
if isinstance (plugin_instance .get_raw (), dict ):
119
162
current_stats ['foo' ] = 'bar'
@@ -124,40 +167,46 @@ def _common_plugin_tests(self, plugin):
124
167
current_stats = plugin_instance .filter_stats (current_stats )
125
168
self .assertTrue ('foo' not in current_stats [0 ])
126
169
127
- # Update stats (add second element)
128
- plugin_instance .update ()
129
- plugin_instance .update_stats_history ()
130
- plugin_instance .update_views ()
170
+ def get_first_history_field (self , plugin_instance ):
171
+ if isinstance (plugin_instance .get_raw (), dict ):
172
+ first_history_field = plugin_instance .get_items_history_list ()[0 ]['name' ]
173
+ elif isinstance (plugin_instance .get_raw (), list ) and len (plugin_instance .get_raw ()) > 0 :
174
+ first_history_field = '_' .join (
175
+ [
176
+ plugin_instance .get_raw ()[0 ][plugin_instance .get_key ()],
177
+ plugin_instance .get_items_history_list ()[0 ]['name' ],
178
+ ]
179
+ )
131
180
132
- # Check history
181
+ return first_history_field
182
+
183
+ def maybe_assert_first_for_raw (self , plugin_instance , first_history_field ):
184
+ if len (plugin_instance .get_raw ()) > 0 :
185
+ self .assertEqual (len (plugin_instance .get_raw_history (first_history_field )), 2 )
186
+ self .assertGreater (
187
+ plugin_instance .get_raw_history (first_history_field )[1 ][0 ],
188
+ plugin_instance .get_raw_history (first_history_field )[0 ][0 ],
189
+ )
190
+
191
+ def maybe_assert_first_for_stats (self , plugin_instance , first_history_field ):
192
+ if len (plugin_instance .get_raw ()) > 0 :
193
+ self .assertEqual (len (plugin_instance .get_raw_history (first_history_field )), 3 )
194
+ self .assertEqual (len (plugin_instance .get_raw_history (first_history_field , 2 )), 2 )
195
+ self .assertIsInstance (json .loads (plugin_instance .get_stats_history ()), dict )
196
+
197
+ def chk_hist_maybe_add_third_elem (self , plugin_instance ):
133
198
if plugin_instance .history_enable ():
134
- if isinstance (plugin_instance .get_raw (), dict ):
135
- first_history_field = plugin_instance .get_items_history_list ()[0 ]['name' ]
136
- elif isinstance (plugin_instance .get_raw (), list ) and len (plugin_instance .get_raw ()) > 0 :
137
- first_history_field = '_' .join (
138
- [
139
- plugin_instance .get_raw ()[0 ][plugin_instance .get_key ()],
140
- plugin_instance .get_items_history_list ()[0 ]['name' ],
141
- ]
142
- )
143
- if len (plugin_instance .get_raw ()) > 0 :
144
- self .assertEqual (len (plugin_instance .get_raw_history (first_history_field )), 2 )
145
- self .assertGreater (
146
- plugin_instance .get_raw_history (first_history_field )[1 ][0 ],
147
- plugin_instance .get_raw_history (first_history_field )[0 ][0 ],
148
- )
199
+ first_history_field = self .get_first_history_field (plugin_instance )
200
+ self .maybe_assert_first_for_raw (plugin_instance , first_history_field )
149
201
150
202
# Update stats (add third element)
151
- plugin_instance .update ()
152
- plugin_instance .update_stats_history ()
153
- plugin_instance .update_views ()
203
+ plugin_instance = self .update_stats (plugin_instance )
154
204
155
- if len (plugin_instance .get_raw ()) > 0 :
156
- self .assertEqual (len (plugin_instance .get_raw_history (first_history_field )), 3 )
157
- self .assertEqual (len (plugin_instance .get_raw_history (first_history_field , 2 )), 2 )
158
- self .assertIsInstance (json .loads (plugin_instance .get_stats_history ()), dict )
205
+ self .maybe_assert_first_for_stats (plugin_instance , first_history_field )
159
206
160
- # Check views
207
+ return first_history_field
208
+
209
+ def check_views (self , plugin_instance , first_history_field ):
161
210
self .assertIsInstance (plugin_instance .get_views (), dict )
162
211
if isinstance (plugin_instance .get_raw (), dict ):
163
212
self .assertIsInstance (plugin_instance .get_views (first_history_field ), dict )
@@ -170,6 +219,34 @@ def _common_plugin_tests(self, plugin):
170
219
self .assertIsInstance (json .loads (plugin_instance .get_json_views ()), dict )
171
220
self .assertEqual (json .loads (plugin_instance .get_json_views ()), plugin_instance .get_views ())
172
221
222
+ def _common_plugin_tests (self , plugin ):
223
+ """Common method to test a Glances plugin
224
+ This method is called multiple time by test 100 to 1xx"""
225
+
226
+ # Reset all the stats, history and views
227
+ plugin_instance = self .reset_stats_history_and_views (plugin )
228
+
229
+ # Check before update
230
+ self .do_checks_before_update (plugin_instance )
231
+
232
+ # Update stats (add first element)
233
+ plugin_instance = self .update_stats (plugin_instance )
234
+
235
+ # Check stats
236
+ self .check_stats (plugin_instance , plugin )
237
+
238
+ # Filter stats
239
+ self .filter_stats (plugin_instance )
240
+
241
+ # Update stats (add second element)
242
+ plugin_instance = self .update_stats (plugin_instance )
243
+
244
+ # Check history
245
+ first_history_field = self .chk_hist_maybe_add_third_elem (plugin_instance )
246
+
247
+ # Check views
248
+ self .check_views (plugin_instance , first_history_field )
249
+
173
250
def test_000_update (self ):
174
251
"""Update stats (mandatory step for all the stats).
175
252
0 commit comments