[Kimchi-devel] [PATCH 4/5] Move rollback_wrapper function to a common place

Aline Manera alinefm at linux.vnet.ibm.com
Wed Jan 7 19:04:48 UTC 2015


The rollback_wrapper function is used to avoid a NotFoundError when the
tests finishes correctly. Move it to a common place to allow reuse.

Signed-off-by: Aline Manera <alinefm at linux.vnet.ibm.com>
---
 tests/test_model.py | 25 ++++++++-----------------
 tests/utils.py      | 17 +++++++++++++++--
 2 files changed, 23 insertions(+), 19 deletions(-)

diff --git a/tests/test_model.py b/tests/test_model.py
index 5984906..2d818ae 100644
--- a/tests/test_model.py
+++ b/tests/test_model.py
@@ -2,7 +2,7 @@
 #
 # Project Kimchi
 #
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -964,10 +964,10 @@ class ModelTests(unittest.TestCase):
             params_1 = {'name': 'kimchi-vm1', 'template': '/templates/test'}
             params_2 = {'name': 'kimchi-vm2', 'template': '/templates/test'}
             inst.vms_create(params_1)
-            rollback.prependDefer(self._rollback_wrapper, inst.vm_delete,
+            rollback.prependDefer(utils.rollback_wrapper, inst.vm_delete,
                                   'kimchi-vm1')
             inst.vms_create(params_2)
-            rollback.prependDefer(self._rollback_wrapper, inst.vm_delete,
+            rollback.prependDefer(utils.rollback_wrapper, inst.vm_delete,
                                   'kimchi-vm2')
 
             vms = inst.vms_get_list()
@@ -978,7 +978,7 @@ class ModelTests(unittest.TestCase):
                            {"graphics": {"passwd": "123456"}})
 
             inst.vm_start('kimchi-vm1')
-            rollback.prependDefer(self._rollback_wrapper, inst.vm_poweroff,
+            rollback.prependDefer(utils.rollback_wrapper, inst.vm_poweroff,
                                   'kimchi-vm1')
 
             vm_info = inst.vm_lookup(u'kimchi-vm1')
@@ -1019,7 +1019,7 @@ class ModelTests(unittest.TestCase):
 
             params = {'name': u'пeω-∨м', 'cpus': 4, 'memory': 2048}
             inst.vm_update('kimchi-vm1', params)
-            rollback.prependDefer(self._rollback_wrapper, inst.vm_delete,
+            rollback.prependDefer(utils.rollback_wrapper, inst.vm_delete,
                                   u'пeω-∨м')
             self.assertEquals(info['uuid'], inst.vm_lookup(u'пeω-∨м')['uuid'])
             info = inst.vm_lookup(u'пeω-∨м')
@@ -1296,16 +1296,7 @@ class ModelTests(unittest.TestCase):
         inst.task_wait(taskid, timeout=10)
         self.assertEquals('finished', inst.task_lookup(taskid)['status'])
 
-    # This wrapper function is needed due to the new backend messaging in
-    # vm model. vm_poweroff and vm_delete raise exception if vm is not found.
-    # These functions are called after vm has been deleted if test finishes
-    # correctly, then NofFoundError exception is raised and rollback breaks
-    def _rollback_wrapper(self, func, vmname):
-        try:
-            func(vmname)
-        except NotFoundError:
-            # VM has been deleted already
-            return
+
 
     @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
     def test_delete_running_vm(self):
@@ -1318,11 +1309,11 @@ class ModelTests(unittest.TestCase):
 
             params = {'name': u'kīмсhī-∨м', 'template': u'/templates/test'}
             inst.vms_create(params)
-            rollback.prependDefer(self._rollback_wrapper, inst.vm_delete,
+            rollback.prependDefer(utils.rollback_wrapper, inst.vm_delete,
                                   u'kīмсhī-∨м')
 
             inst.vm_start(u'kīмсhī-∨м')
-            rollback.prependDefer(self._rollback_wrapper, inst.vm_poweroff,
+            rollback.prependDefer(utils.rollback_wrapper, inst.vm_poweroff,
                                   u'kīмсhī-∨м')
 
             inst.vm_delete(u'kīмсhī-∨м')
diff --git a/tests/utils.py b/tests/utils.py
index c692041..72078cc 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -1,7 +1,7 @@
 #
 # Project Kimchi
 #
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -38,7 +38,7 @@ import kimchi.mockmodel
 import kimchi.server
 from kimchi.config import config, paths
 from kimchi.auth import User, USER_NAME, USER_GROUPS, USER_ROLES, tabs
-from kimchi.exception import OperationFailed
+from kimchi.exception import NotFoundError, OperationFailed
 from kimchi.utils import kimchi_log
 
 _ports = {}
@@ -226,3 +226,16 @@ def wait_task(task_lookup, taskid, timeout=10):
             return
     kimchi_log.error("Timeout while process long-run task, "
                      "try to increase timeout value.")
+
+
+# The action functions in model backend raise NotFoundError exception if the
+# element is not found. But in some tests, these functions are called after
+# the element has been deleted if test finishes correctly, then NofFoundError
+# exception is raised and rollback breaks. To avoid it, this wrapper ignores
+# the NotFoundError.
+def rollback_wrapper(func, resource):
+    try:
+        func(resource)
+    except NotFoundError:
+        # VM has been deleted already
+        return
-- 
2.1.0




More information about the Kimchi-devel mailing list