[PATCH v2][Wok 8/8] Add Plugins Manager test cases

Test cases for new API Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> --- tests/test_plugin.py | 103 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 99 insertions(+), 4 deletions(-) diff --git a/tests/test_plugin.py b/tests/test_plugin.py index d785cfa..01a3be3 100644 --- a/tests/test_plugin.py +++ b/tests/test_plugin.py @@ -20,11 +20,13 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA import json +import os import unittest from functools import partial -#from wok.pluginsmanager import get_enabled_plugins +from wok.config import paths from wok.pluginsmanager import Plugins +from wok.utils import wok_log import utils @@ -50,9 +52,9 @@ def tearDownModule(): test_server.stop() -@unittest.skipUnless( - 'sample' in Plugins().get_enabled_plugins(), - 'sample plugin is not enabled, skip this test!') +# +# In test mode, the plugin Sample should always be enabled +# class PluginTests(unittest.TestCase): def setUp(self): @@ -121,3 +123,96 @@ class PluginTests(unittest.TestCase): req = json.dumps({'name': 'nowidth', 'length': 40}) resp = self.request('/plugins/sample/rectangles', req, 'POST') self.assertEquals(400, resp.status) + + +def _plugins_number(): + """ Find number of plugins in <wokpath>/wok/plugins""" + plugin_dir = paths.plugins_dir + try: + return len([d for d in os.listdir(plugin_dir) + if os.path.isdir(os.path.join(plugin_dir, d))]) + except OSError as e: + wok_log.error("Failed reading plugins directory '%s': %s" % + (plugin_dir, e.message)) + return 0 + + +class PluginsManagerTests(unittest.TestCase): + """ + This class test functionalities of Plugins Manager and plugins API, using + the Sample plugin, which should be enabled by default during tests + """ + + def setUp(self): + self.request = partial(utils.request, host, ssl_port) + self.info = Plugins().get_plugin_info('sample') + with open(self.info['conf_file']) as f: + self.enable_sample_plugin = ('enable = True' in f.read()) + + def test_api(self): + # Only SAMPLE should be enabled + out = [{'name': 'sample', 'enabled': True}] + + # List of plugins + resp = self.request('/pluginsmanager', {}, 'GET') + plugins = json.loads(resp.read()) + self.assertEquals(_plugins_number(), len(plugins)) + self.assertIn(out[0], plugins) + + # Wrong plugin name + resp = self.request('/pluginsmanager/samplewrong', {}, 'GET') + self.assertEquals(404, resp.status) + self.assertIn('WOKPLUG0001E', json.loads(resp.read())['reason']) + + # Lookup plugin name + resp = self.request('/pluginsmanager/sample', {}, 'GET') + self.assertEquals(200, resp.status) + self.assertDictEqual(out[0], json.loads(resp.read())) + + # Enabling wrong plugin + resp = self.request('/pluginsmanager/samplewrong/enable', {}, 'POST') + self.assertEquals(404, resp.status) + self.assertIn('WOKPLUG0001E', json.loads(resp.read())['reason']) + + # Enabling Sample (already enabled, no problem) + resp = self.request('/pluginsmanager/sample/enable', {}, 'POST') + self.assertEquals(200, resp.status) + self.assertDictEqual(out[0], json.loads(resp.read())) + + # Disabling Sample + resp = self.request('/pluginsmanager/sample/disable', {}, 'POST') + self.assertEquals(200, resp.status) + out[0]['enabled'] = False + self.assertDictEqual(out[0], json.loads(resp.read())) + + # Disabling Sample (already disabled, no problem) + resp = self.request('/pluginsmanager/sample/disable', {}, 'POST') + self.assertEquals(200, resp.status) + self.assertDictEqual(out[0], json.loads(resp.read())) + + # Check config file + with open(self.info['conf_file']) as f: + self.assertIn('enable = False', f.read()) + + # Backing configuration file to initial state + if self.enable_sample_plugin: + Plugins()._enable_plugin_conf_file(self.info['conf_file']) + + def test_not_allowed_methods(self): + # Only GET allowed in Collection + resp = self.request('/pluginsmanager', {}, 'POST') + self.assertEquals(405, resp.status) + resp = self.request('/pluginsmanager', {}, 'PUT') + self.assertEquals(405, resp.status) + resp = self.request('/pluginsmanager', {}, 'DELETE') + self.assertEquals(405, resp.status) + + # Only GET/POST allowed in resource + resp = self.request('/pluginsmanager/sample', {}, 'PUT') + self.assertEquals(405, resp.status) + resp = self.request('/pluginsmanager/sample', {}, 'DELETE') + self.assertEquals(405, resp.status) + resp = self.request('/pluginsmanager/sample/enable', {}, 'PUT') + self.assertEquals(405, resp.status) + resp = self.request('/pluginsmanager/sample/disable', {}, 'DELETE') + self.assertEquals(405, resp.status) -- 2.1.0
participants (1)
-
Rodrigo Trujillo