Unless the idea to only have sample plugin enabled on test mode, this
patch looks good for me.
On 06/06/2016 04:13 PM, Rodrigo Trujillo wrote:
Test cases for new API
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo(a)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()
-(a)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)