[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