summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-05-09 19:33:00 +0000
committerGerrit Code Review <review@openstack.org>2013-05-09 19:33:00 +0000
commit495c0355a1be90e11a698d6cbca0261155cee3d3 (patch)
tree80b3f9836a532ee2c3bd2bd1f50330bfc7a8a742 /nova/tests
parentd36955852cb2442feecc479ae8dd999e4959ffc3 (diff)
parent4f9d45aa4f6a805eb5cdaddaf7cef1472e37755a (diff)
downloadnova-495c0355a1be90e11a698d6cbca0261155cee3d3.tar.gz
nova-495c0355a1be90e11a698d6cbca0261155cee3d3.tar.xz
nova-495c0355a1be90e11a698d6cbca0261155cee3d3.zip
Merge "xenapi: cleanup vdi when disk too big exception raised"
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/virt/xenapi/test_vm_utils.py106
1 files changed, 106 insertions, 0 deletions
diff --git a/nova/tests/virt/xenapi/test_vm_utils.py b/nova/tests/virt/xenapi/test_vm_utils.py
index bba704ed9..3e532a1c7 100644
--- a/nova/tests/virt/xenapi/test_vm_utils.py
+++ b/nova/tests/virt/xenapi/test_vm_utils.py
@@ -172,3 +172,109 @@ class XenAPIGetUUID(test.TestCase):
self.assertEquals('2f46f0f5-f14c-ef1b-1fac-9eeca0888a3f',
vm_utils.get_this_vm_uuid())
self.mox.VerifyAll()
+
+
+class FakeSession():
+ def call_xenapi(self, *args):
+ pass
+
+
+class FetchVhdImageTestCase(test.TestCase):
+ def _apply_stubouts(self):
+ self.mox.StubOutWithMock(vm_utils, '_make_uuid_stack')
+ self.mox.StubOutWithMock(vm_utils, 'get_sr_path')
+ self.mox.StubOutWithMock(vm_utils, '_image_uses_bittorrent')
+ self.mox.StubOutWithMock(vm_utils, '_add_bittorrent_params')
+ self.mox.StubOutWithMock(vm_utils, '_generate_glance_callback')
+ self.mox.StubOutWithMock(vm_utils,
+ '_fetch_using_dom0_plugin_with_retry')
+ self.mox.StubOutWithMock(vm_utils, 'safe_find_sr')
+ self.mox.StubOutWithMock(vm_utils, '_scan_sr')
+ self.mox.StubOutWithMock(vm_utils, '_check_vdi_size')
+ self.mox.StubOutWithMock(vm_utils, 'destroy_vdi')
+
+ def _common_params_setup(self, uses_bittorrent):
+ self.context = "context"
+ self.session = FakeSession()
+ self.instance = {"uuid": "uuid"}
+ self.image_id = "image_id"
+ self.uuid_stack = ["uuid_stack"]
+ self.sr_path = "sr_path"
+ self.params = {'image_id': self.image_id,
+ 'uuid_stack': self.uuid_stack, 'sr_path': self.sr_path}
+ self.vdis = {'root': {'uuid': 'vdi'}}
+
+ vm_utils._make_uuid_stack().AndReturn(self.uuid_stack)
+ vm_utils.get_sr_path(self.session).AndReturn(self.sr_path)
+ vm_utils._image_uses_bittorrent(self.context,
+ self.instance).AndReturn(uses_bittorrent)
+
+ def test_fetch_vhd_image_works_with_glance(self):
+ self._apply_stubouts()
+ self._common_params_setup(False)
+
+ vm_utils._generate_glance_callback(self.context).AndReturn("dummy")
+
+ vm_utils._fetch_using_dom0_plugin_with_retry(self.context,
+ self.session, self.image_id, "glance", self.params,
+ callback="dummy").AndReturn(self.vdis)
+
+ vm_utils.safe_find_sr(self.session).AndReturn("sr")
+ vm_utils._scan_sr(self.session, "sr")
+ vm_utils._check_vdi_size(self.context, self.session, self.instance,
+ "vdi")
+
+ self.mox.ReplayAll()
+
+ self.assertEqual("vdi", vm_utils._fetch_vhd_image(self.context,
+ self.session, self.instance, self.image_id)['root']['uuid'])
+
+ self.mox.VerifyAll()
+
+ def test_fetch_vhd_image_works_with_bittorrent(self):
+ self._apply_stubouts()
+ self._common_params_setup(True)
+
+ vm_utils._add_bittorrent_params(self.params)
+
+ vm_utils._fetch_using_dom0_plugin_with_retry(self.context,
+ self.session, self.image_id, "bittorrent", self.params,
+ callback=None).AndReturn(self.vdis)
+
+ vm_utils.safe_find_sr(self.session).AndReturn("sr")
+ vm_utils._scan_sr(self.session, "sr")
+ vm_utils._check_vdi_size(self.context, self.session, self.instance,
+ "vdi")
+
+ self.mox.ReplayAll()
+
+ self.assertEqual("vdi", vm_utils._fetch_vhd_image(self.context,
+ self.session, self.instance, self.image_id)['root']['uuid'])
+
+ self.mox.VerifyAll()
+
+ def test_fetch_vhd_image_cleans_up_vid_on_fail(self):
+ self._apply_stubouts()
+ self._common_params_setup(True)
+ self.mox.StubOutWithMock(self.session, 'call_xenapi')
+
+ vm_utils._add_bittorrent_params(self.params)
+
+ vm_utils._fetch_using_dom0_plugin_with_retry(self.context,
+ self.session, self.image_id, "bittorrent", self.params,
+ callback=None).AndReturn(self.vdis)
+
+ vm_utils.safe_find_sr(self.session).AndReturn("sr")
+ vm_utils._scan_sr(self.session, "sr")
+ vm_utils._check_vdi_size(self.context, self.session, self.instance,
+ "vdi").AndRaise(exception.ImageTooLarge)
+
+ self.session.call_xenapi("VDI.get_by_uuid", "vdi").AndReturn("ref")
+ vm_utils.destroy_vdi(self.session, "ref")
+
+ self.mox.ReplayAll()
+
+ self.assertRaises(exception.ImageTooLarge, vm_utils._fetch_vhd_image,
+ self.context, self.session, self.instance, self.image_id)
+
+ self.mox.VerifyAll()