def test_multiple_dirs(self): pm = StoqPluginManager( [utils.get_plugins_dir(), utils.get_plugins2_dir()]) collected_plugins = pm.list_plugins() for name in self.DUMMY_PLUGINS + ['dummy_worker2']: self.assertIn(name, collected_plugins)
def test_plugin_override(self): """ Verify that if plugin directories have plugins with duplicate names, the one in the last specified directory will be used """ pm = StoqPluginManager([utils.get_plugins_dir(), utils.get_plugins2_dir()]) collected_plugins = pm.list_plugins() self.assertIn('dummy_worker', collected_plugins) worker = pm.load_plugin('dummy_worker') self.assertTrue(worker.PLUGINS2_DUP_MARKER) pm = StoqPluginManager([utils.get_plugins2_dir(), utils.get_plugins_dir()]) self.assertIn('dummy_worker', collected_plugins) worker = pm.load_plugin('dummy_worker') with self.assertRaises(Exception): worker.PLUGINS2_DUP_MARKER
def test_plugin_opts(self): pm = StoqPluginManager( [utils.get_plugins_dir()], {'configurable_worker': { 'crazy_runtime_option': 16 }}, ) plugin = pm.load_plugin('configurable_worker') self.assertEqual(plugin.get_crazy_runtime_option(), 16)
def test_plugin_objects(self): pm = StoqPluginManager([utils.get_plugins_dir()]) simple_worker = pm.load_plugin('simple_worker') self.assertEqual('simple_worker', simple_worker.plugin_name) self.assertEqual('Marcus LaFerrera', simple_worker.__author__) self.assertEqual('0.1', simple_worker.__version__) self.assertEqual( 'https://github.com/PUNCH-Cyber/stoq-plugins-public', simple_worker.__website__, ) self.assertEqual('Simple stoQ Worker plugin', simple_worker.__description__)
def test_plugin_config(self): pm = StoqPluginManager([utils.get_plugins_dir()]) plugin = pm.load_plugin('configurable_worker') self.assertEqual(plugin.get_important_option(), 'cybercybercyber') # Test StoqConfigParser.getjson reading from configuration file self.assertEqual(plugin.getjson_option('list'), ['item1', 'item2']) self.assertEqual(plugin.getjson_option('dict'), {'key':'value'}) self.assertEqual(plugin.getjson_option('sq_dict'), {"bar'foo": "value"}) with self.assertRaises(json.decoder.JSONDecodeError) as exc: plugin.getjson_option('invalid') # Test fallback self.assertEqual(plugin.getjson_option('doesnotexist'), {})
def test_plugin_opts(self): pm = StoqPluginManager( [utils.get_plugins_dir()], {'configurable_worker': { 'crazy_runtime_option': 16, 'list': json.dumps(['item3', 'item4']), 'dict': json.dumps({'key1': 'value1'}), 'invalid':'invalid json blob', 'sq_dict': json.dumps({"foo'bar": "value"}), 'dq_dict': json.dumps({'foo"bar': "value"}) }}, ) plugin = pm.load_plugin('configurable_worker') self.assertEqual(plugin.get_crazy_runtime_option(), 16) # Test StoqConfigParser.getjson reading from plugin_opts self.assertEqual(plugin.getjson_option('list'), ['item3', 'item4']) self.assertEqual(plugin.getjson_option('dict'), {'key1':'value1'}) self.assertEqual(plugin.getjson_option('sq_dict'), {"foo'bar": "value"}) self.assertEqual(plugin.getjson_option('dq_dict'), {'foo"bar': "value"}) with self.assertRaises(json.decoder.JSONDecodeError) as exc: plugin.getjson_option('invalid')
def test_no_reload(self): pm = StoqPluginManager([utils.get_plugins_dir()]) worker = pm.load_plugin('dummy_worker') self.assertIsNotNone(worker) worker2 = pm.load_plugin('dummy_worker') self.assertIs(worker, worker2) # Same object
def test_load_plugin_nonexistent(self): pm = StoqPluginManager([utils.get_plugins_dir()]) with self.assertRaises(StoqPluginNotFound): pm.load_plugin('this_plugin_does_not_exist')
def test_load_plugin(self): pm = StoqPluginManager([utils.get_plugins_dir()]) for name in self.DUMMY_PLUGINS: pm.load_plugin(name)
def test_collect_one_invalid_dir(self): # Verify that the invalid directory doesn't cause an exception pm = StoqPluginManager( [utils.get_plugins_dir(), '/no/way/this/exists']) self.assertGreater(len(pm.list_plugins()), 0)
def test_collect_plugins(self): pm = StoqPluginManager([utils.get_plugins_dir()]) collected_plugins = pm.list_plugins() for name in self.DUMMY_PLUGINS: self.assertIn(name, collected_plugins)
def test_plugin_config(self): pm = StoqPluginManager([utils.get_plugins_dir()]) plugin = pm.load_plugin('configurable_worker') self.assertEqual(plugin.get_important_option(), 'cybercybercyber')