On 12/07/2015 11:52 AM, Aline Manera wrote:
On 05/12/2015 17:22, pvital(a)linux.vnet.ibm.com wrote:
> From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
>
> Libvirt of the Fedora 23 is not able to delete the storage volume in the
> testcase test_image_based_template when testing ModelTests. This happens
> because Libvirt is not able to unlink/rmdir returning an error (-1) and
> setting errno to ENOENT, causing the error:
>
> "cannot unlink file '/var/lib/libvirt/images/base-vol.img':
Success"
>
> This patch fixes the testcase by manually remove the volume file from the
> storage pool directory if the
> wok.plugins.kimchi.model.storagevolume_delete()
> was not capable to delete the volume.
>
> Signed-off-by: Paulo Vital <pvital(a)linux.vnet.ibm.com>
> ---
> tests/test_model.py | 18 +++++++++++++++---
> 1 file changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/tests/test_model.py b/tests/test_model.py
> index caacd91..0108015 100644
> --- a/tests/test_model.py
> +++ b/tests/test_model.py
> @@ -250,19 +250,31 @@ class ModelTests(unittest.TestCase):
>
> @unittest.skipUnless(utils.running_as_root(), 'Must be run as
> root')
> def test_image_based_template(self):
> +
> + def temporary_storagevolume_delete(pool, vol):
> + # Quick fix to passby the Libvirt error:
> + # "error: cannot unlink file '%(vol)': Success"
> + # in Fedora <= 23. The Libvirt fix will be present only
> on Fedora 24
Is there a Fedora issue for it? If so, could you add a reference for
that in this comment?
I don't think so. The issue was found and resolved by Libvirt community
during some tests related to snapshots operations.
> + try:
> + inst.storagevolume_delete(pool, vol)
> + except OperationFailed as e:
> + path = inst.storagevolume_lookup(pool, vol)['path']
> + os.remove(path)
> +
> inst = model.Model(objstore_loc=self.tmp_store)
>
> with RollbackContext() as rollback:
> + pool = 'default'
> vol = 'base-vol.img'
> params = {'name': vol,
> 'capacity': 1073741824, # 1 GiB
> 'allocation': 1048576, # 1 MiB
> 'format': 'qcow2'}
> - task_id = inst.storagevolumes_create('default',
> params)['id']
> - rollback.prependDefer(inst.storagevolume_delete,
> 'default', vol)
> + task_id = inst.storagevolumes_create(pool, params)['id']
> + rollback.prependDefer(temporary_storagevolume_delete,
> pool, vol)
> inst.task_wait(task_id)
> self.assertEquals('finished',
> inst.task_lookup(task_id)['status'])
> - vol_path = inst.storagevolume_lookup('default',
vol)['path']
> + vol_path = inst.storagevolume_lookup(pool, vol)['path']
>
> # Create template based on IMG file
> tmpl_name = "img-tmpl"