Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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']))