summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMate Lakat <mate.lakat@citrix.com>2012-10-29 13:04:07 +0000
committerMate Lakat <mate.lakat@citrix.com>2012-10-31 09:13:35 +0000
commit24746d90afda76a43a04d5fead577f1fdd401444 (patch)
tree6c156e475c546b9aab1f818277bc0b07c01c76c4
parenta94328f07257e8e21d1d54ffd47dc46bfbb3cd8d (diff)
downloadnova-24746d90afda76a43a04d5fead577f1fdd401444.tar.gz
nova-24746d90afda76a43a04d5fead577f1fdd401444.tar.xz
nova-24746d90afda76a43a04d5fead577f1fdd401444.zip
refactor: extract method vm_ref_or_raise
Related to bp xenapi-volume-drivers Imporve the code by extract method, and testing. Change-Id: I8caca173266890bd99a360671e7af86759b89201
-rw-r--r--nova/tests/xenapi/test_vm_utils.py56
-rw-r--r--nova/virt/xenapi/vm_utils.py7
-rw-r--r--nova/virt/xenapi/volumeops.py14
3 files changed, 69 insertions, 8 deletions
diff --git a/nova/tests/xenapi/test_vm_utils.py b/nova/tests/xenapi/test_vm_utils.py
index e7992d54f..c78d42fd3 100644
--- a/nova/tests/xenapi/test_vm_utils.py
+++ b/nova/tests/xenapi/test_vm_utils.py
@@ -1,9 +1,11 @@
+import mox
from nova import exception
from nova.tests.xenapi import stubs
from nova.virt.xenapi import driver as xenapi_conn
from nova.virt.xenapi import fake
from nova.virt.xenapi import vm_utils
from nova.virt.xenapi import volume_utils
+import unittest
class GetInstanceForVdisForSrTestCase(stubs.XenAPITestBase):
@@ -81,3 +83,57 @@ class GetInstanceForVdisForSrTestCase(stubs.XenAPITestBase):
self.assertRaises(exception.NovaException,
vm_utils.get_vdis_for_boot_from_vol,
driver._session, dev_params)
+
+
+class VMRefOrRaiseVMFoundTestCase(unittest.TestCase):
+
+ def test_lookup_call(self):
+ mock = mox.Mox()
+ mock.StubOutWithMock(vm_utils, 'lookup')
+
+ vm_utils.lookup('session', 'somename').AndReturn('ignored')
+
+ mock.ReplayAll()
+ vm_utils.vm_ref_or_raise('session', 'somename')
+ mock.VerifyAll()
+
+ def test_return_value(self):
+ mock = mox.Mox()
+ mock.StubOutWithMock(vm_utils, 'lookup')
+
+ vm_utils.lookup(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn('vmref')
+
+ mock.ReplayAll()
+ self.assertEquals(
+ 'vmref', vm_utils.vm_ref_or_raise('session', 'somename'))
+ mock.VerifyAll()
+
+
+class VMRefOrRaiseVMNotFoundTestCase(unittest.TestCase):
+
+ def test_exception_raised(self):
+ mock = mox.Mox()
+ mock.StubOutWithMock(vm_utils, 'lookup')
+
+ vm_utils.lookup('session', 'somename').AndReturn(None)
+
+ mock.ReplayAll()
+ self.assertRaises(
+ exception.InstanceNotFound,
+ lambda: vm_utils.vm_ref_or_raise('session', 'somename')
+ )
+ mock.VerifyAll()
+
+ def test_exception_msg_contains_vm_name(self):
+ mock = mox.Mox()
+ mock.StubOutWithMock(vm_utils, 'lookup')
+
+ vm_utils.lookup('session', 'somename').AndReturn(None)
+
+ mock.ReplayAll()
+ try:
+ vm_utils.vm_ref_or_raise('session', 'somename')
+ except exception.InstanceNotFound as e:
+ self.assertTrue(
+ 'somename' in str(e))
+ mock.VerifyAll()
diff --git a/nova/virt/xenapi/vm_utils.py b/nova/virt/xenapi/vm_utils.py
index b08dd1387..4879a857d 100644
--- a/nova/virt/xenapi/vm_utils.py
+++ b/nova/virt/xenapi/vm_utils.py
@@ -2221,3 +2221,10 @@ def move_disks(session, instance, disk_info):
root_vdi_ref = session.call_xenapi('VDI.get_by_uuid', root_uuid)
return {'uuid': root_uuid, 'ref': root_vdi_ref}
+
+
+def vm_ref_or_raise(session, instance_name):
+ vm_ref = lookup(session, instance_name)
+ if vm_ref is None:
+ raise exception.InstanceNotFound(instance_id=instance_name)
+ return vm_ref
diff --git a/nova/virt/xenapi/volumeops.py b/nova/virt/xenapi/volumeops.py
index 16da85b9d..c44e38f92 100644
--- a/nova/virt/xenapi/volumeops.py
+++ b/nova/virt/xenapi/volumeops.py
@@ -107,10 +107,9 @@ class VolumeOps(object):
def attach_volume(self, connection_info, instance_name, mountpoint):
"""Attach volume storage to VM instance"""
- # Before we start, check that the VM exists
- vm_ref = vm_utils.lookup(self._session, instance_name)
- if vm_ref is None:
- raise exception.InstanceNotFound(instance_id=instance_name)
+
+ vm_ref = vm_utils.vm_ref_or_raise(self._session, instance_name)
+
# NOTE: No Resource Pool concept so far
LOG.debug(_("Attach_volume: %(connection_info)s, %(instance_name)s,"
" %(mountpoint)s") % locals())
@@ -196,10 +195,9 @@ class VolumeOps(object):
def detach_volume(self, connection_info, instance_name, mountpoint):
"""Detach volume storage to VM instance"""
- # Before we start, check that the VM exists
- vm_ref = vm_utils.lookup(self._session, instance_name)
- if vm_ref is None:
- raise exception.InstanceNotFound(instance_id=instance_name)
+
+ vm_ref = vm_utils.vm_ref_or_raise(self._session, instance_name)
+
# Detach VBD from VM
LOG.debug(_("Detach_volume: %(instance_name)s, %(mountpoint)s")
% locals())