[Kimchi-devel] [PATCH] [Kimchi 3/3] fix 2 test_vm_lifecycle testcase

Aline Manera alinefm at linux.vnet.ibm.com
Wed Dec 16 14:13:43 UTC 2015


On 15/12/2015 10:11, pvital at linux.vnet.ibm.com wrote:
> From: Paulo Vital <pvital at linux.vnet.ibm.com>
>
> The vmsnapshot_revert() updates the name in the VM XML to the previous VM name
> (kimchi-vm), but the domain name used by libvirt to lookup this VM/domain, is
> the updated name (kimchi-vm-new) as proved here:
> https://paste.fedoraproject.org/296617/49064913/. In addition, if libvirtd is
> restarted, the name displayed in the  'virsh list --all' command is the updated
> name.
>
> This patch changed the name of the VM used to test the lifecycle.
>
> Signed-off-by: Paulo Vital <pvital at linux.vnet.ibm.com>
> ---
>   tests/test_model.py | 42 +++++++++++++++++++++++++-----------------
>   1 file changed, 25 insertions(+), 17 deletions(-)
>
> diff --git a/tests/test_model.py b/tests/test_model.py
> index ff63182..aebd787 100644
> --- a/tests/test_model.py
> +++ b/tests/test_model.py
> @@ -157,7 +157,7 @@ class ModelTests(unittest.TestCase):
>               params = {'name': 'kimchi-vm',
>                         'template': '/plugins/kimchi/templates/test'}
>               task = inst.vms_create(params)
> -            rollback.prependDefer(inst.vm_delete, 'kimchi-vm')
> +            rollback.prependDefer(inst.vm_delete, 'kimchi-vm-new')
>               inst.task_wait(task['id'], 10)
>               task = inst.task_lookup(task['id'])
>               self.assertEquals('finished', task['status'])
> @@ -204,7 +204,7 @@ class ModelTests(unittest.TestCase):
>               task = inst.vmsnapshots_create(u'kimchi-vm')
>               snap_name = task['target_uri'].split('/')[-1]
>               rollback.prependDefer(inst.vmsnapshot_delete,
> -                                  u'kimchi-vm', snap_name)
> +                                  u'kimchi-vm-new', snap_name)
>               inst.task_wait(task['id'])
>               task = inst.task_lookup(task['id'])
>               self.assertEquals('finished', task['status'])
> @@ -227,34 +227,42 @@ class ModelTests(unittest.TestCase):

>               result = inst.vmsnapshot_revert(u'kimchi-vm-new', params['name'])
>               self.assertEquals(result, [u'kimchi-vm', snap['name']])

Usually we don't know when reverting a snapshot will lead on a VM name 
update.

For that, the revert() function returns a list which contains the new VM 
name:

     def revert(self, vm_name, name):
try:
             vir_dom = VMModel.get_vm(vm_name, self.conn)
             vir_snap = self.get_vmsnapshot(vm_name, name)
             vir_dom.revertToSnapshot(vir_snap, 0)

             # get vm name recorded in the snapshot and return new uri 
params
             vm_new_name = xpath_get_text(vir_snap.getXMLDesc(0),
'domain/name')[0]
*            return [vm_new_name, name] *
         except libvirt.libvirtError, e:
             raise OperationFailed('KCHSNAP0009E', {'name': name,
                                                    'vm': vm_name,
                                                    'err': e.message})


I strongly recommend to get the 'result' value and use the expected name 
in the operations below.

That way we make sure the flow is also working when doing it via UI.

> -            vm = inst.vm_lookup(u'kimchi-vm')
> +            # The vmsnapshot_revert() updates the name in the VM XML to the
> +            # previous VM name (kimchi-vm), but the domain name used by libvirt
> +            # to lookup this VM/domain, is the updated name (kimchi-vm-new) as
> +            # proved here: https://paste.fedoraproject.org/296617/49064913/.

What do we need to do that to have libvirt working in the real VM name 
after reverting the snapshot?

> +            # In addition, if libvirtd is restarted, the name displayed in the
> +            # 'virsh list --all' cmd is the updated name.

So the conclusion is "Reverting a snapshot WILL NEVER update the vm 
name". Is that correct?

What is the actual Kimchi behavior while performing those action via UI?

> +            vm = inst.vm_lookup(u'kimchi-vm-new')
>               self.assertEquals(vm['state'], snap['state'])
>
> -            current_snap = inst.currentvmsnapshot_lookup(u'kimchi-vm')
> +            current_snap = inst.currentvmsnapshot_lookup(u'kimchi-vm-new')
>               self.assertEquals(params['name'], current_snap['name'])
>
>               self.assertRaises(NotFoundError, inst.vmsnapshot_delete,
> -                              u'kimchi-vm', u'foobar')
> +                              u'kimchi-vm-new', u'foobar')
>
>               # suspend and resume the VM
> -            info = inst.vm_lookup(u'kimchi-vm')
> +            info = inst.vm_lookup(u'kimchi-vm-new')
>               self.assertEquals(info['state'], 'shutoff')
> -            self.assertRaises(InvalidOperation, inst.vm_suspend, u'kimchi-vm')
> -            inst.vm_start(u'kimchi-vm')
> -            info = inst.vm_lookup(u'kimchi-vm')
> +            self.assertRaises(InvalidOperation, inst.vm_suspend,
> +                              u'kimchi-vm-new')
> +            inst.vm_start(u'kimchi-vm-new')
> +            info = inst.vm_lookup(u'kimchi-vm-new')
>               self.assertEquals(info['state'], 'running')
> -            inst.vm_suspend(u'kimchi-vm')
> -            info = inst.vm_lookup(u'kimchi-vm')
> +            inst.vm_suspend(u'kimchi-vm-new')
> +            info = inst.vm_lookup(u'kimchi-vm-new')
>               self.assertEquals(info['state'], 'paused')
> -            self.assertRaises(InvalidParameter, inst.vm_update, u'kimchi-vm',
> -                              {'name': 'foo'})
> -            inst.vm_resume(u'kimchi-vm')
> -            info = inst.vm_lookup(u'kimchi-vm')
> +            self.assertRaises(InvalidParameter, inst.vm_update,
> +                              u'kimchi-vm-new', {'name': 'foo'})
> +            inst.vm_resume(u'kimchi-vm-new')
> +            info = inst.vm_lookup(u'kimchi-vm-new')
>               self.assertEquals(info['state'], 'running')
> -            self.assertRaises(InvalidOperation, inst.vm_resume, u'kimchi-vm')
> +            self.assertRaises(InvalidOperation, inst.vm_resume,
> +                              u'kimchi-vm-new')
>               # leave the VM suspended to make sure a paused VM can be
>               # deleted correctly
> -            inst.vm_suspend(u'kimchi-vm')
> +            inst.vm_suspend(u'kimchi-vm-new')
>
>           vms = inst.vms_get_list()
>           self.assertFalse('kimchi-vm' in vms)

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ovirt.org/pipermail/kimchi-devel/attachments/20151216/bf7fde3a/attachment.html>


More information about the Kimchi-devel mailing list