class TestPlugin(unittest.TestCase): def setUp(self): self.sh = MockSmartHome() self.plugins = self.sh.with_plugins_from(common.BASE + "/tests/resources/plugin") self.item_conf = self.sh.with_items_from(common.BASE + "/tests/resources/plugin_items.conf") def test_plugin_is_registered(self): self.assertIsNotNone(self.plugins.get_plugin("wol")) def test_plugin_not_registered(self): self.assertIsNone(self.plugins.get_plugin("wol1")) def test_plugin_name(self): wolplug = self.plugins.get_plugin("wol_ww") self.assertEqual(wolplug.name, "wol_ww") def test_plugin_implementation(self): wolplug = self.plugins.get_plugin("wol_ww") self.assertEqual(wolplug.plugin, wolplug.get_implementation()) def test_plugin_ident(self): wolplug = self.plugins.get_plugin("wol_ww") self.assertIsNone(wolplug.ident) self.plugins.start() self.assertEqual(wolplug.ident, wolplug.get_ident()) self.assertIsNotNone(wolplug.get_ident()) self.plugins.stop() def test_plugin_instance_not_set(self): cliplug = self.plugins.get_plugin("cli") self.assertEqual(cliplug.plugin.get_instance_name(),"") def test_plugin_instance_set(self): cliplug = self.plugins.get_plugin("wol_ww") self.assertEqual(cliplug.plugin.get_instance_name(),"bind") def test_plugin_multi_instance_capable_true(self): wolplug = self.plugins.get_plugin("wol_ww") self.assertTrue(isinstance(wolplug.plugin, SmartPlugin)) self.assertTrue(wolplug.plugin.is_multi_instance_capable()) def test_plugin_multi_instance_capable_false(self): cliplug = self.plugins.get_plugin("cli") self.assertTrue(isinstance(cliplug.plugin, SmartPlugin)) self.assertFalse(cliplug.plugin.is_multi_instance_capable()) def test_plugin_instance_not_set_has_iattr(self): wolplug = self.plugins.get_plugin("wol") config_mock = {'key3', 'value3'} self.assertTrue(wolplug.plugin.has_iattr(config_mock,"key3")) config_mock = {'key3@*', 'value3'} self.assertTrue(wolplug.plugin.has_iattr(config_mock, "key3")) config_mock = {'key3@false*', 'value3'} self.assertFalse(wolplug.plugin.has_iattr(config_mock, "key3")) def test_plugin_instance_set_has_iattr(self): wolplug = self.plugins.get_plugin("wol_ww") config_mock = {'key3@bind', 'value3'} self.assertTrue(wolplug.plugin.has_iattr(config_mock, "key3")) config_mock = {'key3@*', 'value3'} self.assertTrue(wolplug.plugin.has_iattr(config_mock, "key3")) config_mock = {'key3@false', 'value3'} self.assertFalse(wolplug.plugin.has_iattr(config_mock, "key3")) def test_plugin_instance_not_set_get_iattr_value(self): wolplug = self.plugins.get_plugin("wol") config_mock = {'key3@*' : 'value3'} self.assertEqual(wolplug.plugin.get_iattr_value(config_mock, "key3"), "value3") config_mock = {'key3@bind' : 'value2'} self.assertIsNone(wolplug.plugin.get_iattr_value(config_mock, "key3")) config_mock = {'key3@bind2' : 'value4'} self.assertIsNone(wolplug.plugin.get_iattr_value(config_mock, "key3")) def test_plugin_instance_set_get_iattr_value(self): wolplug = self.plugins.get_plugin("wol_ww") config_mock = {'key3@*' : 'value3'} self.assertEqual(wolplug.plugin.get_iattr_value(config_mock, "key3"), "value3") config_mock = {'key3@bind' : 'value2'} self.assertEqual(wolplug.plugin.get_iattr_value(config_mock, "key3"), "value2") config_mock = {'key3@bind2', 'value4'} self.assertIsNone(wolplug.plugin.get_iattr_value(config_mock, "key3")) def test_plugin_instance_not_used_in_item_config(self): it = self.sh.return_item("item3.item3b.item3b1") self.assertIsNotNone(it) self.assertEqual(len(it.get_method_triggers()),1) def test_plugin_instance_used_in_item_config(self): it = self.sh.return_item("item3.item3b.item3b1.item3b1a") self.assertIsNotNone(it) self.assertEqual(len(it.get_method_triggers()),2) def test_plugin_instance_no_attributes_item_config(self): it = self.sh.return_item("item3.item3b") self.assertIsNotNone(it) self.assertEqual(len(it.get_method_triggers()),0) def test_plugin_instance_wol(self): wolplug = self.plugins.get_plugin("wol_ww") self.sh.scheduler.add(wolplug.name, wolplug.plugin.update_item, prio=5, cycle=300, offset=2) wolplug.plugin.wake_on_lan("11:22:33:44:55:66") def _test_configsave(self): import configparser item_conf = self.item_conf config = configparser.RawConfigParser( ) #config.read(common.BASE + '/tests/resources/plugin_items.conf') config.read_dict(item_conf) print(config) with open('example.cfg', 'w') as configfile: config.write(configfile)
class TestPlugin(unittest.TestCase): def setUp(self): self.sh = MockSmartHome() self.plugins = self.sh.with_plugins_from(common.BASE + "/tests/resources/plugin") self.item_conf = self.sh.with_items_from( common.BASE + "/tests/resources/plugin_items.conf") def test_plugin_is_registered(self): self.assertIsNotNone(self.plugins.get_pluginthread("wol")) def test_plugin_not_registered(self): self.assertIsNone(self.plugins.get_pluginthread("wol1")) def test_plugin_name(self): wolplug = self.plugins.get_pluginthread("wol_ww") self.assertEqual(wolplug.name, "wol_ww") def test_plugin_implementation(self): wolplug = self.plugins.get_pluginthread("wol_ww") self.assertEqual(wolplug.plugin, wolplug.get_implementation()) def test_plugin_ident(self): wolplug = self.plugins.get_pluginthread("wol_ww") self.assertIsNone(wolplug.ident) self.plugins.start() self.assertEqual(wolplug.ident, wolplug.get_ident()) self.assertIsNotNone(wolplug.get_ident()) self.plugins.stop() def test_plugin_instance_not_set(self): cliplug = self.plugins.get_pluginthread("cli") self.assertEqual(cliplug.plugin.get_instance_name(), "") def test_plugin_instance_set(self): cliplug = self.plugins.get_pluginthread("wol_ww") self.assertEqual(cliplug.plugin.get_instance_name(), "bind") def test_plugin_multi_instance_capable_true(self): wolplug = self.plugins.get_pluginthread("wol_ww") self.assertTrue(isinstance(wolplug.plugin, SmartPlugin)) self.assertTrue(wolplug.plugin.is_multi_instance_capable()) cliplug = self.plugins.get_pluginthread("cli") self.assertTrue(isinstance(cliplug.plugin, SmartPlugin)) self.assertTrue(cliplug.plugin.is_multi_instance_capable()) def test_plugin_multi_instance_capable_false(self): pass # cliplug = self.plugins.get_pluginthread("cli") # self.assertTrue(isinstance(cliplug.plugin, SmartPlugin)) # self.assertFalse(cliplug.plugin.is_multi_instance_capable()) def test_plugin_instance_not_set_has_iattr(self): wolplug = self.plugins.get_pluginthread("wol") config_mock = {'key3', 'value3'} self.assertTrue(wolplug.plugin.has_iattr(config_mock, "key3")) config_mock = {'key3@*', 'value3'} self.assertTrue(wolplug.plugin.has_iattr(config_mock, "key3")) config_mock = {'key3@false*', 'value3'} self.assertFalse(wolplug.plugin.has_iattr(config_mock, "key3")) def test_plugin_instance_set_has_iattr(self): wolplug = self.plugins.get_pluginthread("wol_ww") config_mock = {'key3@bind', 'value3'} self.assertTrue(wolplug.plugin.has_iattr(config_mock, "key3")) config_mock = {'key3@*', 'value3'} self.assertTrue(wolplug.plugin.has_iattr(config_mock, "key3")) config_mock = {'key3@false', 'value3'} self.assertFalse(wolplug.plugin.has_iattr(config_mock, "key3")) def test_plugin_instance_not_set_get_iattr_value(self): wolplug = self.plugins.get_pluginthread("wol") config_mock = {'key3@*': 'value3'} self.assertEqual(wolplug.plugin.get_iattr_value(config_mock, "key3"), "value3") config_mock = {'key3@bind': 'value2'} self.assertIsNone(wolplug.plugin.get_iattr_value(config_mock, "key3")) config_mock = {'key3@bind2': 'value4'} self.assertIsNone(wolplug.plugin.get_iattr_value(config_mock, "key3")) def test_plugin_instance_set_get_iattr_value(self): wolplug = self.plugins.get_pluginthread("wol_ww") config_mock = {'key3@*': 'value3'} self.assertEqual(wolplug.plugin.get_iattr_value(config_mock, "key3"), "value3") config_mock = {'key3@bind': 'value2'} self.assertEqual(wolplug.plugin.get_iattr_value(config_mock, "key3"), "value2") config_mock = {'key3@bind2', 'value4'} self.assertIsNone(wolplug.plugin.get_iattr_value(config_mock, "key3")) def test_plugin_instance_not_used_in_item_config(self): it = self.sh.items.return_item("item3.item3b.item3b1") self.assertIsNotNone(it) self.assertEqual(len(it.get_method_triggers()), 1) def test_plugin_instance_used_in_item_config(self): it = self.sh.items.return_item("item3.item3b.item3b1.item3b1a") self.assertIsNotNone(it) self.assertEqual(len(it.get_method_triggers()), 2) def test_plugin_instance_no_attributes_item_config(self): it = self.sh.items.return_item("item3.item3b") self.assertIsNotNone(it) self.assertEqual(len(it.get_method_triggers()), 0) def test_plugin_instance_wol(self): wolplug = self.plugins.get_pluginthread("wol_ww") self.sh.scheduler.add(wolplug.name, wolplug.plugin.update_item, prio=5, cycle=300, offset=2) wolplug.plugin.wake_on_lan("11:22:33:44:55:66") def _test_configsave(self): import configparser item_conf = self.item_conf config = configparser.RawConfigParser() #config.read(common.BASE + '/tests/resources/plugin_items.conf') config.read_dict(item_conf) print(config) with open('example.cfg', 'w') as configfile: config.write(configfile)
class TestDatabaseBase(unittest.TestCase): TIME_FACTOR = 1000 def plugin(self): self.sh = MockSmartHome() self.sh.with_items_from(common.BASE + '/plugins/database/tests/test_items.conf') plugin = Database(self.sh, 'sqlite3', {'database': ':memory:'}) for item in self.sh.return_items(): plugin.parse_item(item) return plugin def t(self, s): return s * TestDatabaseBase.TIME_FACTOR def create_tmpfile(self): (fd, name) = tempfile.mkstemp() os.close(fd) return name def read_tmpfile(self, name): with open(name, 'r') as f: content = f.read(os.path.getsize(name)) os.unlink(name) return content def create_item(self, plugin, name): return plugin.id(self.sh.return_item(name), True) def create_log(self, plugin, name, tuples): """ Create log in database (pass list of tuples: start, end, value) """ id = self.create_item(plugin, name) for t in tuples: if t[1] is None: duration = None else: duration = self.t(t[1] - t[0]) plugin.insertLog(id, time=self.t(t[0]), duration=duration, val=t[2], it='num') def dump_item(self, plugin, name): value = plugin.readItem(plugin.id(self.sh.return_item(name))) values = [(value[0], value[2], value[4])] self.log_dump(values) def dump_log(self, plugin, name): values = [(value[0], value[2], value[4]) for value in plugin.readLogs( plugin.id(self.sh.return_item(name), False))] self.log_dump(values) def log_slice(self, start, interval, *tuples_list): logs = [] for tuples in tuples_list: for t in tuples: logs.append((start, start + interval, t)) start = start + interval return logs def log_slice_values_delta(self, start, end, delta): values = [] value = start while (delta < 0 or value <= end) and (delta > 0 or value >= end): values.append(value) value = value + delta return values def log_slice_values_func(self, start, end, func): n = 0 value = func(n=n) while value <= end: values.append(value) n = n + 1 value = func(n) return values def log_dump(self, values): func = [ lambda v, nv: "{0:5} - {1: >5} ({2: >3})".format( v, (nv if nv != None else 0), (nv if nv != None else 0) - v), lambda v, nv: v, lambda v, nv: v ] align = [">26", ">10", ">10"] for (j, value) in enumerate(values): for (i, column) in enumerate(value): fmt = "{0: " + align[i] + "}" v = column nv = None if j == len(values) - 1 else values[j + 1][i] res = func[i](v, nv) print(fmt.format(res if res is not None else "(none)"), end='') print("") def assertLines(self, expected, actual): print(actual.split("\n")) for line in actual.split("\n"): self.assertIn(line, expected) def assertSingle(self, expected, actual): self.assertEquals(expected, actual) def assertSeries(self, expected, actual): # Series result is (in actual): # { # 'sid': 'main.num|avg|0|now|100', # 'params': { # 'item': 'main.num', # 'step': None, # 'update': True, # 'func': 'avg', # 'start': 1494087165032, # 'sid': 'main.num|avg|0|now|100', # 'end': 'now' # }, # 'series': [ # (1494087165029, 0.0), # (1494087165032, 0.0) # ], # 'update': datetime.datetime(2017, 10, 26, 16, 27, 16, 33702), # 'cmd': 'series' # } result = [] for (i, e) in enumerate(expected): result.append((self.t(e[0]), e[1])) self.assertEquals(result, actual['series']) def assertSeriesCount(self, expected, actual): self.assertEquals(expected, len(actual['series']))