[Kimchi-devel] [PATCH v2][Wok 8/8] Add Plugins Manager test cases
Rodrigo Trujillo
rodrigo.trujillo at linux.vnet.ibm.com
Wed Jun 8 22:29:36 UTC 2016
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 at 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()
>>>>
>>>>
>>>> - at 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 at ovirt.org
>>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>>
>>
>> _______________________________________________
>> Kimchi-devel mailing list
>> Kimchi-devel at ovirt.org
>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>
>
> _______________________________________________
> Kimchi-devel mailing list
> Kimchi-devel at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>
More information about the Kimchi-devel
mailing list