diff options
| author | John Garbutt <john@johngarbutt.com> | 2013-05-09 09:48:04 +0100 |
|---|---|---|
| committer | John Garbutt <john@johngarbutt.com> | 2013-05-09 16:15:47 +0100 |
| commit | 4f9d45aa4f6a805eb5cdaddaf7cef1472e37755a (patch) | |
| tree | 9c75b15842389d3dbe7f020740781e68e22a6abc /nova/tests | |
| parent | 33b966771b672996a7b0d9608f1f7b8684cc459f (diff) | |
xenapi: cleanup vdi when disk too big exception raised
In addition add some unit tests to that area of the code.
fixes bug 1015423
Change-Id: If33cbb395bc39cbb6e8b2ecbd2d6ad3a26b6b301
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() |
