Revert "Reduced complexity of `unittest-core.TestGlances._common_plugin_tests()`"

* reverting 98e8e32457
* introduced #3040.
This commit is contained in:
Ariel Otilibili 2024-12-08 21:12:25 +01:00
parent 8258101d35
commit 2134174758
1 changed files with 60 additions and 137 deletions

View File

@ -10,7 +10,6 @@
"""Glances unitary tests suite."""
import functools
import json
import time
import unittest
@ -55,31 +54,22 @@ class TestGlances(unittest.TestCase):
"""The function is called *every time* before test_*."""
print('\n' + '=' * 78)
def reset_stats_history_and_views(self, plugin):
def _common_plugin_tests(self, plugin):
"""Common method to test a Glances plugin
This method is called multiple time by test 100 to 1xx"""
# Reset all the stats, history and views
plugin_instance = stats.get_plugin(plugin)
plugin_instance.reset() # reset stats
plugin_instance.reset_views() # reset views
plugin_instance.reset_stats_history() # reset history
return plugin_instance
def zip_with(self, method, elems, values):
[method(elem, value) for elem, value in zip(elems, values)]
def do_checks_before_update(self, plugin_instance):
elems = [
plugin_instance.get_raw(),
plugin_instance.is_enabled(),
plugin_instance.is_disabled(),
plugin_instance.get_views(),
]
values = [plugin_instance.stats_init_value, True, False, {}]
self.zip_with(self.assertEqual, elems, values)
# Check before update
self.assertEqual(plugin_instance.get_raw(), plugin_instance.stats_init_value)
self.assertEqual(plugin_instance.is_enabled(), True)
self.assertEqual(plugin_instance.is_disabled(), False)
self.assertEqual(plugin_instance.get_views(), {})
self.assertIsInstance(plugin_instance.get_raw(), (dict, list))
if plugin_instance.history_enable() and isinstance(plugin_instance.get_raw(), dict):
self.assertEqual(plugin_instance.get_key(), None)
self.assertTrue(
@ -91,72 +81,39 @@ class TestGlances(unittest.TestCase):
elif plugin_instance.history_enable() and isinstance(plugin_instance.get_raw(), list):
self.assertNotEqual(plugin_instance.get_key(), None)
def update_stats(self, plugin_instance):
# Update stats (add first element)
plugin_instance.update()
plugin_instance.update_stats_history()
plugin_instance.update_views()
return plugin_instance
def is_field_in_plugin(self, plugin_instance):
def is_in_description(result, f):
return True if f in plugin_instance.fields_description else result
def is_field_in_this_description(result, i):
return functools.reduce(is_in_description, i, False)
return is_field_in_this_description
def is_field_in_stats(self, plugin_instance, plugin):
def is_field_in_this_plugin(result, f):
if f not in plugin_instance.get_raw():
print(f"WARNING: {f} field not found in {plugin} plugin stats")
else:
result = True
return result
return is_field_in_this_plugin
def check_stats(self, plugin_instance, plugin):
# Check stats
self.assertIsInstance(plugin_instance.get_raw(), (dict, list))
if isinstance(plugin_instance.get_raw(), dict) and plugin_instance.get_raw() != {}:
init = False
is_field_present = self.is_field_in_stats(plugin_instance, plugin)
field_description = plugin_instance.fields_description
result = functools.reduce(is_field_present, field_description, init)
self.assertTrue(result)
res = False
for f in plugin_instance.fields_description:
if f not in plugin_instance.get_raw():
print(f"WARNING: {f} field not found in {plugin} plugin stats")
else:
res = True
self.assertTrue(res)
elif isinstance(plugin_instance.get_raw(), list) and len(plugin_instance.get_raw()) > 0:
init = False
is_field_present = self.is_field_in_plugin(plugin_instance)
raw_from_instance = plugin_instance.get_raw()
result = functools.reduce(is_field_present, raw_from_instance, init)
self.assertTrue(result)
elems = [plugin_instance.get_raw(), plugin_instance.get_stats(), json.loads(plugin_instance.get_stats())]
values = [plugin_instance.get_export(), plugin_instance.get_json(), plugin_instance.get_raw()]
self.zip_with(self.assertEqual, elems, values)
res = False
for i in plugin_instance.get_raw():
for f in i:
if f in plugin_instance.fields_description:
res = True
self.assertTrue(res)
self.assertEqual(plugin_instance.get_raw(), plugin_instance.get_export())
self.assertEqual(plugin_instance.get_stats(), plugin_instance.get_json())
self.assertEqual(json.loads(plugin_instance.get_stats()), plugin_instance.get_raw())
if len(plugin_instance.fields_description) > 0:
# Get first item of the fields_description
first_field = list(plugin_instance.fields_description.keys())[0]
elems = [
plugin_instance.get_raw_stats_item(first_field),
json.loads(plugin_instance.get_stats_item(first_field)),
plugin_instance.get_item_info(first_field, 'description'),
]
values = [dict, dict, str]
self.zip_with(self.assertIsInstance, elems, values)
def filter_stats(self, plugin_instance):
self.assertIsInstance(plugin_instance.get_raw_stats_item(first_field), dict)
self.assertIsInstance(json.loads(plugin_instance.get_stats_item(first_field)), dict)
self.assertIsInstance(plugin_instance.get_item_info(first_field, 'description'), str)
# Filter stats
current_stats = plugin_instance.get_raw()
if isinstance(plugin_instance.get_raw(), dict):
current_stats['foo'] = 'bar'
@ -167,46 +124,40 @@ class TestGlances(unittest.TestCase):
current_stats = plugin_instance.filter_stats(current_stats)
self.assertTrue('foo' not in current_stats[0])
def get_first_history_field(self, plugin_instance):
if isinstance(plugin_instance.get_raw(), dict):
first_history_field = plugin_instance.get_items_history_list()[0]['name']
elif isinstance(plugin_instance.get_raw(), list) and len(plugin_instance.get_raw()) > 0:
first_history_field = '_'.join(
[
plugin_instance.get_raw()[0][plugin_instance.get_key()],
plugin_instance.get_items_history_list()[0]['name'],
]
)
# Update stats (add second element)
plugin_instance.update()
plugin_instance.update_stats_history()
plugin_instance.update_views()
return first_history_field
def maybe_assert_first_for_raw(self, plugin_instance, first_history_field):
if len(plugin_instance.get_raw()) > 0:
self.assertEqual(len(plugin_instance.get_raw_history(first_history_field)), 2)
self.assertGreater(
plugin_instance.get_raw_history(first_history_field)[1][0],
plugin_instance.get_raw_history(first_history_field)[0][0],
)
def maybe_assert_first_for_stats(self, plugin_instance, first_history_field):
if len(plugin_instance.get_raw()) > 0:
self.assertEqual(len(plugin_instance.get_raw_history(first_history_field)), 3)
self.assertEqual(len(plugin_instance.get_raw_history(first_history_field, 2)), 2)
self.assertIsInstance(json.loads(plugin_instance.get_stats_history()), dict)
def chk_hist_maybe_add_third_elem(self, plugin_instance):
# Check history
if plugin_instance.history_enable():
first_history_field = self.get_first_history_field(plugin_instance)
self.maybe_assert_first_for_raw(plugin_instance, first_history_field)
if isinstance(plugin_instance.get_raw(), dict):
first_history_field = plugin_instance.get_items_history_list()[0]['name']
elif isinstance(plugin_instance.get_raw(), list) and len(plugin_instance.get_raw()) > 0:
first_history_field = '_'.join(
[
plugin_instance.get_raw()[0][plugin_instance.get_key()],
plugin_instance.get_items_history_list()[0]['name'],
]
)
if len(plugin_instance.get_raw()) > 0:
self.assertEqual(len(plugin_instance.get_raw_history(first_history_field)), 2)
self.assertGreater(
plugin_instance.get_raw_history(first_history_field)[1][0],
plugin_instance.get_raw_history(first_history_field)[0][0],
)
# Update stats (add third element)
plugin_instance = self.update_stats(plugin_instance)
plugin_instance.update()
plugin_instance.update_stats_history()
plugin_instance.update_views()
self.maybe_assert_first_for_stats(plugin_instance, first_history_field)
if len(plugin_instance.get_raw()) > 0:
self.assertEqual(len(plugin_instance.get_raw_history(first_history_field)), 3)
self.assertEqual(len(plugin_instance.get_raw_history(first_history_field, 2)), 2)
self.assertIsInstance(json.loads(plugin_instance.get_stats_history()), dict)
return first_history_field
def check_views(self, plugin_instance, first_history_field):
# Check views
self.assertIsInstance(plugin_instance.get_views(), dict)
if isinstance(plugin_instance.get_raw(), dict):
self.assertIsInstance(plugin_instance.get_views(first_history_field), dict)
@ -219,34 +170,6 @@ class TestGlances(unittest.TestCase):
self.assertIsInstance(json.loads(plugin_instance.get_json_views()), dict)
self.assertEqual(json.loads(plugin_instance.get_json_views()), plugin_instance.get_views())
def _common_plugin_tests(self, plugin):
"""Common method to test a Glances plugin
This method is called multiple time by test 100 to 1xx"""
# Reset all the stats, history and views
plugin_instance = self.reset_stats_history_and_views(plugin)
# Check before update
self.do_checks_before_update(plugin_instance)
# Update stats (add first element)
plugin_instance = self.update_stats(plugin_instance)
# Check stats
self.check_stats(plugin_instance, plugin)
# Filter stats
self.filter_stats(plugin_instance)
# Update stats (add second element)
plugin_instance = self.update_stats(plugin_instance)
# Check history
first_history_field = self.chk_hist_maybe_add_third_elem(plugin_instance)
# Check views
self.check_views(plugin_instance, first_history_field)
def test_000_update(self):
"""Update stats (mandatory step for all the stats).