9cd9ff626d
first, this fixes #607 also, i think it slightly simplifies code to make "simple" stuff like names, etc. attributes instead of methods all the time. so, expect this to be extended to other components, as well.
115 lines
5 KiB
Python
115 lines
5 KiB
Python
import unittest
|
|
|
|
import sys
|
|
import shlex
|
|
|
|
import core.module
|
|
import core.widget
|
|
import core.config
|
|
|
|
class TestModule(core.module.Module):
|
|
def update(self):
|
|
if self.fail:
|
|
raise Exception(self.error)
|
|
pass
|
|
|
|
class module(unittest.TestCase):
|
|
def setUp(self):
|
|
self.invalidModuleName = 'invalid-module-name'
|
|
self.validModuleName = 'test'
|
|
self.someWidget = core.widget.Widget('randomeWidgetContent', name='A')
|
|
self.anotherWidget = core.widget.Widget('more Widget content', name='B')
|
|
self.unusedWidgetName = 'C'
|
|
|
|
def test_loadinvalid_module(self):
|
|
config = unittest.mock.MagicMock()
|
|
module = core.module.load(module_name=self.invalidModuleName, config=config)
|
|
self.assertEqual('core.module', module.__class__.__module__, 'module must be a module object')
|
|
self.assertEqual('Error', module.__class__.__name__, 'an invalid module must be a core.module.Error')
|
|
|
|
@unittest.skipIf(sys.version_info.major == 3 and sys.version_info.minor in [ 4, 5 ], 'importlib error reporting in Python 3.{4,5} different')
|
|
def test_importerror(self):
|
|
with unittest.mock.patch('core.module.importlib') as importlib:
|
|
importlib.import_module.side_effect = ImportError('some-error')
|
|
|
|
config = unittest.mock.MagicMock()
|
|
module = core.module.load(module_name=self.validModuleName, config=config)
|
|
module.widget().full_text()
|
|
self.assertEqual('Error', module.__class__.__name__, 'an invalid module must be a core.module.Error')
|
|
self.assertEqual(module.widget().get('_raw'), 'test: some-error')
|
|
|
|
def test_loadvalid_module(self):
|
|
module = core.module.load(module_name=self.validModuleName)
|
|
self.assertEqual('modules.core.{}'.format(self.validModuleName), module.__class__.__module__, 'module must be a modules.core.<name> object')
|
|
self.assertEqual('Module', module.__class__.__name__, 'a valid module must have a Module class')
|
|
self.assertEqual([], module.state(None), 'default state of module is empty')
|
|
|
|
def test_empty_widgets(self):
|
|
module = core.module.Module(widgets=[])
|
|
self.assertEqual([], module.widgets())
|
|
|
|
def test_error_widget(self):
|
|
cfg = core.config.Config(shlex.split('-p test_module.foo=5'))
|
|
module = core.module.Error(cfg, 'test-mod', 'xyz')
|
|
self.assertEqual(['critical'], module.state(None), 'error module must have critical state')
|
|
full_text = module.full_text(module.widget())
|
|
self.assertTrue('test-mod' in full_text)
|
|
self.assertTrue('xyz' in full_text)
|
|
|
|
def test_single_widget(self):
|
|
module = core.module.Module(widgets=self.someWidget)
|
|
self.assertEqual([self.someWidget], module.widgets())
|
|
|
|
def test_widget_list(self):
|
|
module = core.module.Module(widgets=[ self.someWidget, self.anotherWidget ])
|
|
self.assertEqual([ self.someWidget, self.anotherWidget ], module.widgets())
|
|
|
|
def test_module_Name(self):
|
|
module = TestModule()
|
|
self.assertEqual('test_module', module.name(), 'module has wrong name')
|
|
self.assertEqual('test_module', module.module_name(), 'module has wrong name')
|
|
|
|
def testvalid_parameter(self):
|
|
cfg = core.config.Config(shlex.split('-p test_module.foo=5'))
|
|
module = TestModule(config=cfg)
|
|
self.assertEqual(5, int(module.parameter('foo')))
|
|
|
|
def test_default_parameter(self):
|
|
cfg = core.config.Config([])
|
|
module = TestModule(config=cfg)
|
|
self.assertEqual('default', module.parameter('foo', 'default'))
|
|
|
|
def test_default_is_none(self):
|
|
cfg = core.config.Config([])
|
|
module = TestModule(config=cfg)
|
|
self.assertEqual(None, module.parameter('foo'))
|
|
|
|
def test_error_widget(self):
|
|
cfg = core.config.Config([])
|
|
module = TestModule(config=cfg)
|
|
module.fail = True
|
|
module.error = '!!'
|
|
module.update_wrapper()
|
|
self.assertEqual(1, len(module.widgets()))
|
|
self.assertEqual('error: !!', module.widget().full_text())
|
|
|
|
def test_get_widget_by_name(self):
|
|
cfg = core.config.Config([])
|
|
module = TestModule(config=cfg, widgets=[self.someWidget, self.anotherWidget])
|
|
|
|
self.assertEqual(self.someWidget, module.widget(self.someWidget.name))
|
|
self.assertEqual(self.anotherWidget, module.widget(self.anotherWidget.name))
|
|
self.assertEqual(None, module.widget(self.unusedWidgetName))
|
|
self.assertEqual(self.someWidget, module.widget())
|
|
|
|
def test_default_thresholds(self):
|
|
cfg = core.config.Config([])
|
|
module = TestModule(config=cfg, widgets=[self.someWidget, self.anotherWidget])
|
|
|
|
self.assertEqual('critical', module.threshold_state(100, 80, 99))
|
|
self.assertEqual('warning', module.threshold_state(100, 80, 100))
|
|
self.assertEqual('warning', module.threshold_state(81, 80, 100))
|
|
self.assertEqual(None, module.threshold_state(80, 80, 100))
|
|
self.assertEqual(None, module.threshold_state(10, 80, 100))
|
|
|
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|