diff options
| author | Jenkins <jenkins@review.openstack.org> | 2013-05-09 19:33:00 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2013-05-09 19:33:00 +0000 |
| commit | 495c0355a1be90e11a698d6cbca0261155cee3d3 (patch) | |
| tree | 80b3f9836a532ee2c3bd2bd1f50330bfc7a8a742 /nova/tests | |
| parent | d36955852cb2442feecc479ae8dd999e4959ffc3 (diff) | |
| parent | 4f9d45aa4f6a805eb5cdaddaf7cef1472e37755a (diff) | |
| download | nova-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.py | 106 |
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() |
