Re: [Kimchi-devel] [PATCH v2][Wok 8/8] Add Plugins Manager test cases

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@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)

On 06/08/2016 04:16 PM, Aline Manera wrote:
Unless the idea to only have sample plugin enabled on test mode, this patch looks good for me.
Lets define 2 modes here: "test" mode and "runningWOKtestsuite" mode. I want only sample plugin enabled in the second. I believe the solution that i proposed before can fix this.
On 06/06/2016 04:13 PM, Rodrigo Trujillo wrote:
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)
_______________________________________________ Kimchi-devel mailing list Kimchi-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/kimchi-devel

On 06/08/2016 06:41 PM, Rodrigo Trujillo wrote:
On 06/08/2016 04:16 PM, Aline Manera wrote:
Unless the idea to only have sample plugin enabled on test mode, this patch looks good for me.
Lets define 2 modes here: "test" mode and "runningWOKtestsuite" mode. I want only sample plugin enabled in the second.
I believe the solution that i proposed before can fix this.
I don; t agree to create an option to a server (ie, a command line tool) which will be used only for tests (tests that are not package into the rpm/deb) Let's go back a bit and thinking about the real problem: 1. What do you need to do the tests? 2. Why having other plugins enabled among of Sample is a problem?
On 06/06/2016 04:13 PM, Rodrigo Trujillo wrote:
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)
_______________________________________________ Kimchi-devel mailing list Kimchi-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/kimchi-devel
_______________________________________________ Kimchi-devel mailing list Kimchi-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/kimchi-devel

On 06/08/2016 06:44 PM, Aline Manera wrote:
On 06/08/2016 06:41 PM, Rodrigo Trujillo wrote:
On 06/08/2016 04:16 PM, Aline Manera wrote:
Unless the idea to only have sample plugin enabled on test mode, this patch looks good for me.
Lets define 2 modes here: "test" mode and "runningWOKtestsuite" mode. I want only sample plugin enabled in the second.
I believe the solution that i proposed before can fix this.
I don; t agree to create an option to a server (ie, a command line tool) which will be used only for tests (tests that are not package into the rpm/deb)
Let's go back a bit and thinking about the real problem:
1. What do you need to do the tests? 2. Why having other plugins enabled among of Sample is a problem?
I did not proposed a "command line tool" ... I have proposed to add new command line options (like "--environment" ) similar to what Yum does with its plugins. (1) I test plugins manager functionalities Answered (2) in my last 1/8 email.
On 06/06/2016 04:13 PM, Rodrigo Trujillo wrote:
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)
_______________________________________________ Kimchi-devel mailing list Kimchi-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/kimchi-devel
_______________________________________________ Kimchi-devel mailing list Kimchi-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/kimchi-devel
_______________________________________________ Kimchi-devel mailing list Kimchi-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/kimchi-devel

On 06/08/2016 07:29 PM, Rodrigo Trujillo wrote:
On 06/08/2016 06:44 PM, Aline Manera wrote:
On 06/08/2016 06:41 PM, Rodrigo Trujillo wrote:
On 06/08/2016 04:16 PM, Aline Manera wrote:
Unless the idea to only have sample plugin enabled on test mode, this patch looks good for me.
Lets define 2 modes here: "test" mode and "runningWOKtestsuite" mode. I want only sample plugin enabled in the second.
I believe the solution that i proposed before can fix this.
I don; t agree to create an option to a server (ie, a command line tool) which will be used only for tests (tests that are not package into the rpm/deb)
Let's go back a bit and thinking about the real problem:
1. What do you need to do the tests? 2. Why having other plugins enabled among of Sample is a problem?
I did not proposed a "command line tool" ... I have proposed to add new command line options (like "--environment" ) similar to what Yum does with its plugins.
wokd is a command line tool. Why add a new option that only make sense to running unit tests?
(1) I test plugins manager functionalities
You can do that without relying on other plugins.
Answered (2) in my last 1/8 email.
I will reply that there so.
On 06/06/2016 04:13 PM, Rodrigo Trujillo wrote:
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)
_______________________________________________ Kimchi-devel mailing list Kimchi-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/kimchi-devel
_______________________________________________ Kimchi-devel mailing list Kimchi-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/kimchi-devel
_______________________________________________ Kimchi-devel mailing list Kimchi-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/kimchi-devel
_______________________________________________ Kimchi-devel mailing list Kimchi-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/kimchi-devel
participants (2)
-
Aline Manera
-
Rodrigo Trujillo