def test_fetch_vhd_image_works_with_bittorrent(self): cfg.CONF.import_opt('xenapi_torrent_base_url', 'nova.virt.xenapi.image.bittorrent') self.flags(xenapi_torrent_base_url='http://foo') self.mox.StubOutWithMock(vm_utils, '_image_uses_bittorrent') vm_utils._image_uses_bittorrent( self.context, self.instance).AndReturn(True) self._stub_bittorrent_download_vhd() self.mox.StubOutWithMock(vm_utils, 'safe_find_sr') vm_utils.safe_find_sr(self.session).AndReturn("sr") self.mox.StubOutWithMock(vm_utils, '_scan_sr') vm_utils._scan_sr(self.session, "sr") self.mox.StubOutWithMock(vm_utils, '_check_vdi_size') 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, 'image_id')['root']['uuid']) self.mox.VerifyAll()
def test_fetch_vhd_image_cleans_up_vdi_on_fail(self): self.mox.StubOutWithMock(vm_utils, '_image_uses_bittorrent') vm_utils._image_uses_bittorrent( self.context, self.instance).AndReturn(False) self._stub_glance_download_vhd() self.mox.StubOutWithMock(vm_utils, 'safe_find_sr') vm_utils.safe_find_sr(self.session).AndReturn("sr") self.mox.StubOutWithMock(vm_utils, '_scan_sr') vm_utils._scan_sr(self.session, "sr") self.mox.StubOutWithMock(vm_utils, '_check_vdi_size') vm_utils._check_vdi_size(self.context, self.session, self.instance, "vdi").AndRaise(exception.InstanceTypeDiskTooSmall) self.mox.StubOutWithMock(self.session, 'call_xenapi') self.session.call_xenapi("VDI.get_by_uuid", "vdi").AndReturn("ref") self.mox.StubOutWithMock(vm_utils, 'destroy_vdi') vm_utils.destroy_vdi(self.session, "ref") self.mox.ReplayAll() self.assertRaises(exception.InstanceTypeDiskTooSmall, vm_utils._fetch_vhd_image, self.context, self.session, self.instance, 'image_id') self.mox.VerifyAll()
def test_fallback_to_default_handler(self): cfg.CONF.import_opt('xenapi_torrent_base_url', 'nova.virt.xenapi.image.bittorrent') self.flags(xenapi_torrent_base_url='http://foo') self.mox.StubOutWithMock(vm_utils, '_image_uses_bittorrent') vm_utils._image_uses_bittorrent( self.context, self.instance).AndReturn(True) self._stub_bittorrent_download_vhd(raise_exc=RuntimeError) vm_utils._make_uuid_stack().AndReturn(["uuid_stack"]) vm_utils.get_sr_path(self.session).AndReturn('sr_path') self._stub_glance_download_vhd() self.mox.StubOutWithMock(vm_utils, 'safe_find_sr') vm_utils.safe_find_sr(self.session).AndReturn("sr") self.mox.StubOutWithMock(vm_utils, '_scan_sr') vm_utils._scan_sr(self.session, "sr") self.mox.StubOutWithMock(vm_utils, '_check_vdi_size') 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, 'image_id')['root']['uuid']) self.mox.VerifyAll()
def test_fetch_vhd_image_works_with_glance(self): self.mox.StubOutWithMock(vm_utils, '_image_uses_bittorrent') vm_utils._image_uses_bittorrent( self.context, self.instance).AndReturn(False) self.mox.StubOutWithMock( self.session, 'call_plugin_serialized_with_retry') self.session.call_plugin_serialized_with_retry( 'glance', 'download_vhd', 0, mox.IgnoreArg(), extra_headers={'X-Service-Catalog': '[]', 'X-Auth-Token': 'auth_token', 'X-Roles': '', 'X-Tenant-Id': None, 'X-User-Id': None, 'X-Identity-Status': 'Confirmed'}, image_id='image_id', uuid_stack=["uuid_stack"], sr_path='sr_path').AndReturn({'root': {'uuid': 'vdi'}}) self.mox.StubOutWithMock(vm_utils, 'safe_find_sr') vm_utils.safe_find_sr(self.session).AndReturn("sr") self.mox.StubOutWithMock(vm_utils, '_scan_sr') vm_utils._scan_sr(self.session, "sr") self.mox.StubOutWithMock(vm_utils, '_check_vdi_size') 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, 'image_id')['root']['uuid']) self.mox.VerifyAll()
def _setup_bittorrent(self): vm_utils._image_uses_bittorrent(self.context, self.instance).AndReturn(True) def _add_torrent_url(instance, image_id, params): params["torrent_url"] = "%s.torrent" % image_id vm_utils._add_torrent_url(self.instance, self.image_id, mox.IgnoreArg()).AndReturn(True) vm_utils._add_bittorrent_params(self.image_id, self.params) self.session.call_plugin_serialized_with_retry("bittorrent", "download_vhd", 0, None, **self.params).AndReturn( self.vdis )
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_default_handler_doesnt_fallback_to_itself(self): cfg.CONF.import_opt('xenapi_torrent_base_url', 'nova.virt.xenapi.image.bittorrent') self.flags(xenapi_torrent_base_url='http://foo') self.mox.StubOutWithMock(vm_utils, '_image_uses_bittorrent') vm_utils._image_uses_bittorrent( self.context, self.instance).AndReturn(False) self._stub_glance_download_vhd(raise_exc=RuntimeError) self.mox.ReplayAll() self.assertRaises(RuntimeError, vm_utils._fetch_vhd_image, self.context, self.session, self.instance, 'image_id') self.mox.VerifyAll()
def test_image_uses_bittorrent(self): sys_meta = {'image_bittorrent': True} instance = db.instance_create(self.context, {'system_metadata': sys_meta}) instance = db.instance_get_by_uuid(self.context, instance['uuid']) self.flags(xenapi_torrent_images='some') self.assertTrue(vm_utils._image_uses_bittorrent(self.context, instance))
def test_image_uses_bittorrent(self): sys_meta = {'image_bittorrent': True} instance = db.instance_create(self.context, {'system_metadata': sys_meta}) instance = db.instance_get_by_uuid(self.context, instance['uuid']) self.flags(xenapi_torrent_images='some') self.assertTrue(vm_utils._image_uses_bittorrent( self.context, instance))
def test_fetch_vhd_image_works_with_glance(self): self.mox.StubOutWithMock(vm_utils, '_image_uses_bittorrent') vm_utils._image_uses_bittorrent(self.context, self.instance).AndReturn(False) self.mox.StubOutWithMock(self.session, 'call_plugin_serialized_with_retry') self.session.call_plugin_serialized_with_retry( 'glance', 'download_vhd', 0, mox.IgnoreArg(), extra_headers={ 'X-Service-Catalog': '[]', 'X-Auth-Token': 'auth_token', 'X-Roles': '', 'X-Tenant-Id': None, 'X-User-Id': None, 'X-Identity-Status': 'Confirmed' }, image_id='image_id', uuid_stack=["uuid_stack"], sr_path='sr_path').AndReturn({'root': { 'uuid': 'vdi' }}) self.mox.StubOutWithMock(vm_utils, 'safe_find_sr') vm_utils.safe_find_sr(self.session).AndReturn("sr") self.mox.StubOutWithMock(vm_utils, '_scan_sr') vm_utils._scan_sr(self.session, "sr") self.mox.StubOutWithMock(vm_utils, '_check_vdi_size') 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, 'image_id')['root']['uuid']) self.mox.VerifyAll()
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): vm_utils._image_uses_bittorrent(self.context, self.instance).AndReturn(False) self.params["auth_token"] = "auth_token" self.session.call_plugin_serialized_with_retry( "glance", "download_vhd", 0, mox.IgnoreArg(), **self.params ).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_vdi_on_fail(self): self.mox.StubOutWithMock(vm_utils, '_image_uses_bittorrent') vm_utils._image_uses_bittorrent( self.context, self.instance).AndReturn(False) self.mox.StubOutWithMock( self.session, 'call_plugin_serialized_with_retry') self.session.call_plugin_serialized_with_retry( 'glance', 'download_vhd', 0, mox.IgnoreArg(), extra_headers={'X-Service-Catalog': '[]', 'X-Auth-Token': 'auth_token', 'X-Roles': '', 'X-Tenant-Id': None, 'X-User-Id': None, 'X-Identity-Status': 'Confirmed'}, image_id='image_id', uuid_stack=["uuid_stack"], sr_path='sr_path').AndReturn({'root': {'uuid': 'vdi'}}) self.mox.StubOutWithMock(vm_utils, 'safe_find_sr') vm_utils.safe_find_sr(self.session).AndReturn("sr") self.mox.StubOutWithMock(vm_utils, '_scan_sr') vm_utils._scan_sr(self.session, "sr") self.mox.StubOutWithMock(vm_utils, '_check_vdi_size') vm_utils._check_vdi_size(self.context, self.session, self.instance, "vdi").AndRaise(exception.InstanceTypeDiskTooSmall) self.mox.StubOutWithMock(self.session, 'call_xenapi') self.session.call_xenapi("VDI.get_by_uuid", "vdi").AndReturn("ref") self.mox.StubOutWithMock(vm_utils, 'destroy_vdi') vm_utils.destroy_vdi(self.session, "ref") self.mox.ReplayAll() self.assertRaises(exception.InstanceTypeDiskTooSmall, vm_utils._fetch_vhd_image, self.context, self.session, self.instance, 'image_id') self.mox.VerifyAll()
def test_fetch_vhd_image_cleans_up_vdi_on_fail(self): self.mox.StubOutWithMock(vm_utils, '_image_uses_bittorrent') vm_utils._image_uses_bittorrent( self.context, self.instance).AndReturn(False) self.mox.StubOutWithMock( self.session, 'call_plugin_serialized_with_retry') self.session.call_plugin_serialized_with_retry( 'glance', 'download_vhd', 0, mox.IgnoreArg(), extra_headers={'X-Service-Catalog': '[]', 'X-Auth-Token': 'auth_token', 'X-Roles': '', 'X-Tenant-Id': None, 'X-User-Id': None, 'X-Identity-Status': 'Confirmed'}, image_id='image_id', uuid_stack=["uuid_stack"], sr_path='sr_path').AndReturn({'root': {'uuid': 'vdi'}}) self.mox.StubOutWithMock(vm_utils, 'safe_find_sr') vm_utils.safe_find_sr(self.session).AndReturn("sr") self.mox.StubOutWithMock(vm_utils, '_scan_sr') vm_utils._scan_sr(self.session, "sr") self.mox.StubOutWithMock(vm_utils, '_check_vdi_size') vm_utils._check_vdi_size(self.context, self.session, self.instance, "vdi").AndRaise(exception.InstanceTypeDiskTooSmall) self.mox.StubOutWithMock(self.session, 'call_xenapi') self.session.call_xenapi("VDI.get_by_uuid", "vdi").AndReturn("ref") self.mox.StubOutWithMock(vm_utils, 'destroy_vdi') vm_utils.destroy_vdi(self.session, "ref") self.mox.ReplayAll() self.assertRaises(exception.InstanceTypeDiskTooSmall, vm_utils._fetch_vhd_image, self.context, self.session, self.instance, 'image_id') self.mox.VerifyAll()
def test_fetch_vhd_image_works_with_bittorrent(self): cfg.CONF.import_opt('xenapi_torrent_base_url', 'nova.virt.xenapi.image.bittorrent') self.flags(xenapi_torrent_base_url='http://foo') self.mox.StubOutWithMock(vm_utils, '_image_uses_bittorrent') vm_utils._image_uses_bittorrent( self.context, self.instance).AndReturn(True) self.mox.StubOutWithMock( self.session, 'call_plugin_serialized') self.session.call_plugin_serialized('bittorrent', 'download_vhd', image_id='image_id', uuid_stack=["uuid_stack"], sr_path='sr_path', torrent_download_stall_cutoff=600, torrent_listen_port_start=6881, torrent_listen_port_end=6891, torrent_max_last_accessed=86400, torrent_max_seeder_processes_per_host=1, torrent_seed_chance=1.0, torrent_seed_duration=3600, torrent_url='http://foo/image_id.torrent' ).AndReturn({'root': {'uuid': 'vdi'}}) self.mox.StubOutWithMock(vm_utils, 'safe_find_sr') vm_utils.safe_find_sr(self.session).AndReturn("sr") self.mox.StubOutWithMock(vm_utils, '_scan_sr') vm_utils._scan_sr(self.session, "sr") self.mox.StubOutWithMock(vm_utils, '_check_vdi_size') 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, 'image_id')['root']['uuid']) self.mox.VerifyAll()
def test_fetch_vhd_image_works_with_bittorrent(self): cfg.CONF.import_opt('xenapi_torrent_base_url', 'nova.virt.xenapi.image.bittorrent') self.flags(xenapi_torrent_base_url='http://foo') self.mox.StubOutWithMock(vm_utils, '_image_uses_bittorrent') vm_utils._image_uses_bittorrent( self.context, self.instance).AndReturn(True) self.mox.StubOutWithMock( self.session, 'call_plugin_serialized') self.session.call_plugin_serialized('bittorrent', 'download_vhd', image_id='image_id', uuid_stack=["uuid_stack"], sr_path='sr_path', torrent_download_stall_cutoff=600, torrent_listen_port_start=6881, torrent_listen_port_end=6891, torrent_max_last_accessed=86400, torrent_max_seeder_processes_per_host=1, torrent_seed_chance=1.0, torrent_seed_duration=3600, torrent_url='http://foo/image_id.torrent' ).AndReturn({'root': {'uuid': 'vdi'}}) self.mox.StubOutWithMock(vm_utils, 'safe_find_sr') vm_utils.safe_find_sr(self.session).AndReturn("sr") self.mox.StubOutWithMock(vm_utils, '_scan_sr') vm_utils._scan_sr(self.session, "sr") self.mox.StubOutWithMock(vm_utils, '_check_vdi_size') 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, 'image_id')['root']['uuid']) self.mox.VerifyAll()
def test_fetch_vhd_image_works_with_glance(self): vm_utils._image_uses_bittorrent(self.context, self.instance).AndReturn(False) self.params['auth_token'] = 'auth_token' self.session.call_plugin_serialized_with_retry( 'glance', 'download_vhd', 0, mox.IgnoreArg(), **self.params).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_glance(self): self.mox.StubOutWithMock(vm_utils, '_image_uses_bittorrent') vm_utils._image_uses_bittorrent( self.context, self.instance).AndReturn(False) self._stub_glance_download_vhd() self.mox.StubOutWithMock(vm_utils, 'safe_find_sr') vm_utils.safe_find_sr(self.session).AndReturn("sr") self.mox.StubOutWithMock(vm_utils, '_scan_sr') vm_utils._scan_sr(self.session, "sr") self.mox.StubOutWithMock(vm_utils, '_check_vdi_size') 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, 'image_id')['root']['uuid']) self.mox.VerifyAll()
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.bt_params = copy.copy(self.params) self.bt_params['torrent_url'] = "%s.torrent" % self.image_id 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) if uses_bittorrent: def set_url(instance, image_id, params): params['torrent_url'] = "%s.torrent" % image_id vm_utils._add_torrent_url(self.instance, self.image_id, self.params).WithSideEffects(set_url).AndReturn(True)
def test_image_uses_bittorrent(self): sys_meta = {"image_bittorrent": True} instance = db.instance_create(self.context, {"system_metadata": sys_meta}) instance = db.instance_get_by_uuid(self.context, instance["uuid"]) self.flags(xenapi_torrent_images="some") self.assertTrue(vm_utils._image_uses_bittorrent(self.context, instance))