bumblebee-status/tests/core/test_module.py

116 lines
5 KiB
Python
Raw Normal View History

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):
2020-02-23 14:55:13 +01:00
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')
2020-03-01 14:36:12 +01:00
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