[Kimchi-devel] [PATCH v2][Wok 8/8] Add Plugins Manager test cases
Aline Manera
alinefm at linux.vnet.ibm.com
Wed Jun 8 23:13:34 UTC 2016
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 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
>>
>
> _______________________________________________
> 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