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

Aline Manera alinefm at linux.vnet.ibm.com
Wed Jun 8 21:44:50 UTC 2016



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




More information about the Kimchi-devel mailing list