[Kimchi-devel] [PATCH] [Kimchi 1/3] Fix test_image_based_template testcase.

pvital at linux.vnet.ibm.com pvital at linux.vnet.ibm.com
Tue Dec 15 12:11:52 UTC 2015


From: Paulo Vital <pvital at 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 at linux.vnet.ibm.com>
---
 tests/test_model.py | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/tests/test_model.py b/tests/test_model.py
index 762f0f8..4aa19bd 100644
--- a/tests/test_model.py
+++ b/tests/test_model.py
@@ -96,6 +96,16 @@ class ModelTests(unittest.TestCase):
 
         os.unlink(self.tmp_store)
 
+    def temporary_storagevolume_delete(inst, 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
+        try:
+            inst.storagevolume_delete(pool, vol)
+        except OperationFailed as e:
+            path = inst.storagevolume_lookup(pool, vol)['path']
+            os.remove(path)
+
     def test_vm_info(self):
         inst = model.Model('test:///default', self.tmp_store)
         vms = inst.vms_get_list()
@@ -250,19 +260,22 @@ class ModelTests(unittest.TestCase):
 
     @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
     def test_image_based_template(self):
+
         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, inst,
+                                  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"
-- 
2.5.0




More information about the Kimchi-devel mailing list