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

Rodrigo Trujillo rodrigo.trujillo at linux.vnet.ibm.com
Wed Jun 8 21:41:32 UTC 2016



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.

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




More information about the Kimchi-devel mailing list