On 30/11/2015 01:29, Rodrigo Trujillo wrote:
> This patch fixes problems in test cases after change the way Kimchi
> updates the disks in the Templates. Now disks have the storagepool
> assigned in its data.
>
> Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo(a)linux.vnet.ibm.com>
> ---
> src/wok/plugins/kimchi/mockmodel.py | 5 ++-
> src/wok/plugins/kimchi/tests/test_model.py | 13 ++++++++
> src/wok/plugins/kimchi/tests/test_rest.py | 5 ++-
> src/wok/plugins/kimchi/tests/test_template.py | 44
> ++++++++++++++++++++++-----
> 4 files changed, 58 insertions(+), 9 deletions(-)
>
> diff --git a/src/wok/plugins/kimchi/mockmodel.py
> b/src/wok/plugins/kimchi/mockmodel.py
> index 9186f78..f31a297 100644
> --- a/src/wok/plugins/kimchi/mockmodel.py
> +++ b/src/wok/plugins/kimchi/mockmodel.py
> @@ -46,6 +46,7 @@ from wok.plugins.kimchi.model import storagevolumes
> from wok.plugins.kimchi.model.templates import LibvirtVMTemplate
> from wok.plugins.kimchi.model.users import PAMUsersModel
> from wok.plugins.kimchi.model.groups import PAMGroupsModel
> +from wok.plugins.kimchi.utils import pool_name_from_uri
> from wok.plugins.kimchi.vmtemplate import VMTemplate
>
>
> @@ -72,6 +73,7 @@ class MockModel(Model):
> # test:///default driver
> defaults = dict(osinfo.defaults)
> defaults.update(mockmodel_defaults)
> + defaults['disks'][0]['pool'] =
defaults['storagepool']
The former storagepool information should be removed as each volume
has its own pool information and the template.conf updated accordingly.
[[disk.0]]
# Disk size in GB
#size = 10
# Disk format
#format = qcow2
# Pool
pool = default
oh, I forgot to add this information.
But I would keep "storagepool" as a default pool, when "pool" is not
given.
Also, we may need to change Templates.conf organization.
Today is:
[storagepool]
[[disk.0]]
[[disk.1]]
[[disk.2]] ...
It would become:
[storagepool]
[disks]
[[disk.0]]
[[disk.1]]
[[disk.2]]
...
So, if pool is not passed inside disk.X, storagepool value is used
> osinfo.defaults = dict(defaults)
>
> self._mock_vgs = MockVolumeGroups()
> @@ -248,7 +250,8 @@ class MockModel(Model):
> def _probe_image(self, path):
> return ('unknown', 'unknown')
>
> - def _get_volume_path(self, pool, vol):
> + def _get_volume_path(self, pool_uri, vol):
> + pool = pool_name_from_uri(pool_uri)
> pool_info = self.storagepool_lookup(pool)
> if pool_info['type'] == 'scsi':
> return self._mock_storagevolumes.scsi_volumes[vol]['path']
> diff --git a/src/wok/plugins/kimchi/tests/test_model.py
> b/src/wok/plugins/kimchi/tests/test_model.py
> index 65d97f2..2d59594 100644
> --- a/src/wok/plugins/kimchi/tests/test_model.py
> +++ b/src/wok/plugins/kimchi/tests/test_model.py
> @@ -76,6 +76,16 @@ def tearDownModule():
> shutil.rmtree(TMP_DIR)
>
>
> +def _setDiskPoolDefault():
> + osinfo.defaults['disks'][0]['pool'] = \
> + '/plugins/kimchi/storagepools/default'
> +
> +
> +def _setDiskPoolDefaultTest():
> + osinfo.defaults['disks'][0]['pool'] = \
> + '/plugins/kimchi/storagepools/default-pool'
> +
> +
> class ModelTests(unittest.TestCase):
> def setUp(self):
> self.tmp_store = '/tmp/kimchi-store-test'
> @@ -1051,6 +1061,9 @@ class ModelTests(unittest.TestCase):
> 'arch': 'i686'
> }
>
> + _setDiskPoolDefaultTest()
> + rollback.prependDefer(_setDiskPoolDefault)
> +
> inst.templates_create(params)
> rollback.prependDefer(inst.template_delete, 'test')
>
> diff --git a/src/wok/plugins/kimchi/tests/test_rest.py
> b/src/wok/plugins/kimchi/tests/test_rest.py
> index 544f2e6..34348b8 100644
> --- a/src/wok/plugins/kimchi/tests/test_rest.py
> +++ b/src/wok/plugins/kimchi/tests/test_rest.py
> @@ -220,6 +220,8 @@ class RestTests(unittest.TestCase):
> vm = json.loads(
> self.request('/plugins/kimchi/vms/∨м-црdαtеd', req).read()
> )
> + # Memory was hot plugged
> + params['memory'] += 1024
> for key in params.keys():
> self.assertEquals(params[key], vm[key])
>
> @@ -935,7 +937,8 @@ class RestTests(unittest.TestCase):
> )
> lun_name = json.loads(resp.read())[0]['name']
>
> - tmpl_params['disks'] = [{'index': 0, 'volume':
lun_name}]
> + tmpl_params['disks'] = [{'index': 0, 'volume':
lun_name,
> + 'pool':
tmpl_params['storagepool']}]
> req = json.dumps(tmpl_params)
> resp = self.request('/plugins/kimchi/templates', req,
'POST')
> self.assertEquals(201, resp.status)
> diff --git a/src/wok/plugins/kimchi/tests/test_template.py
> b/src/wok/plugins/kimchi/tests/test_template.py
> index 3f026f3..3caad93 100644
> --- a/src/wok/plugins/kimchi/tests/test_template.py
> +++ b/src/wok/plugins/kimchi/tests/test_template.py
> @@ -25,7 +25,6 @@ from functools import partial
>
> from tests.utils import get_free_port, patch_auth, request, run_server
>
> -from wok.plugins.kimchi import osinfo
> from wok.plugins.kimchi.config import READONLY_POOL_TYPE
> from wok.plugins.kimchi.mockmodel import MockModel
>
> @@ -37,6 +36,8 @@ port = None
> ssl_port = None
> cherrypy_port = None
>
> +DEFAULT_POOL = u'/plugins/kimchi/storagepools/default-pool'
> +
>
> def setUpModule():
> global test_server, model, host, port, ssl_port, cherrypy_port
> @@ -89,9 +90,11 @@ class TemplateTests(unittest.TestCase):
> )
> self.assertEquals(sorted(tmpl.keys()), sorted(keys))
>
> - # Verify if default disk format was configured
> - default_disk_format = osinfo.defaults['disks'][0]['format']
> - self.assertEquals(tmpl['disks'][0]['format'],
> default_disk_format)
> + disk_keys = ['index', 'pool', 'size',
'format']
> + disk_pool_keys = ['name', 'type']
> + self.assertEquals(sorted(tmpl['disks'][0].keys()),
> sorted(disk_keys))
> + self.assertEquals(sorted(tmpl['disks'][0]['pool'].keys()),
> + sorted(disk_pool_keys))
>
> # Clone a template
> resp = self.request('/plugins/kimchi/templates/test/clone',
> '{}',
> @@ -212,13 +215,20 @@ class TemplateTests(unittest.TestCase):
> self.assertEquals(update_tmpl['cdrom'],
cdrom_data['cdrom'])
>
> # Update disks
> - disk_data = {'disks': [{'index': 0, 'size': 10,
'format':
> 'raw'},
> - {'index': 1, 'size': 20,
'format':
> 'raw'}]}
> + disk_data = {'disks': [{'index': 0, 'size': 10,
'format':
> 'raw',
> + 'pool': DEFAULT_POOL},
> + {'index': 1, 'size': 20,
'format':
> 'qcow2',
> + 'pool': DEFAULT_POOL}]}
> resp = self.request(new_tmpl_uri, json.dumps(disk_data),
> 'PUT')
> self.assertEquals(200, resp.status)
> resp = self.request(new_tmpl_uri)
> self.assertEquals(200, resp.status)
> updated_tmpl = json.loads(resp.read())
> + disk_data['disks'][0]['pool'] = {'name':
DEFAULT_POOL,
> + 'type': 'dir'}
> +
> + disk_data['disks'][1]['pool'] = {'name':
DEFAULT_POOL,
> + 'type': 'dir'}
> self.assertEquals(updated_tmpl['disks'],
disk_data['disks'])
>
> # For all supported types, edit the template and check if
> @@ -227,13 +237,15 @@ class TemplateTests(unittest.TestCase):
> 'qed', 'raw', 'vmdk', 'vpc']
> for disk_type in disk_types:
> disk_data = {'disks': [{'index': 0, 'format':
disk_type,
> - 'size': 10}]}
> + 'size': 10, 'pool':
DEFAULT_POOL}]}
> resp = self.request(new_tmpl_uri,
> json.dumps(disk_data), 'PUT')
> self.assertEquals(200, resp.status)
>
> resp = self.request(new_tmpl_uri)
> self.assertEquals(200, resp.status)
> updated_tmpl = json.loads(resp.read())
> + disk_data['disks'][0]['pool'] = {u'name':
DEFAULT_POOL,
> + u'type': u'dir'}
> self.assertEquals(updated_tmpl['disks'],
> disk_data['disks'])
>
> # Update folder
> @@ -348,6 +360,24 @@ class TemplateTests(unittest.TestCase):
> 'PUT')
> self.assertEquals(200, resp.status)
>
> + # Test disk template update with different pool
> + pool_uri =
> u'/plugins/kimchi/storagepools/kīмсhīUnitTestDirPool'
> + disk_data = {'disks': [{'size': 5, 'format':
'qcow2',
> + 'pool': pool_uri}]}
> + req = json.dumps(disk_data)
> + resp = self.request('/plugins/kimchi/templates/test', req,
> 'PUT')
> + self.assertEquals(200, resp.status)
> + del(disk_data['disks'][0]['pool'])
> + disk_data['disks'][0]['index'] = 0
> + disk_data['disks'][0]['pool'] = {u'name': pool_uri,
> + u'type': u'dir'}
> + tmpl = json.loads(
> + self.request('/plugins/kimchi/templates/test').read())
> + self.assertEquals(sorted(disk_data['disks'][0].keys()),
> + sorted(tmpl['disks'][0].keys()))
> + self.assertEquals(sorted(disk_data['disks'][0].values()),
> + sorted(tmpl['disks'][0].values()))
> +
> def test_tmpl_integrity(self):
> # Create a network and a pool for testing template integrity
> net = {'name': u'nat-network', 'connection':
'nat'}
_______________________________________________
Kimchi-devel mailing list
Kimchi-devel(a)ovirt.org
http://lists.ovirt.org/mailman/listinfo/kimchi-devel