[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