def test_fetch_image_ova(self, mock_unlink, mock_tar_open, mock_write_class, mock_read_class): session = mock.MagicMock() ovf_descriptor = None ovf_path = os.path.join(os.path.dirname(__file__), 'ovf.xml') with open(ovf_path) as f: ovf_descriptor = f.read() with contextlib.nested( mock.patch.object(images.IMAGE_API, 'get'), mock.patch.object(images.IMAGE_API, 'download'), mock.patch.object(images, 'start_transfer'), mock.patch.object(images, '_build_shadow_vm_config_spec'), mock.patch.object( session, '_call_method')) as (mock_image_api_get, mock_image_api_download, mock_start_transfer, mock_build_shadow_vm_config_spec, mock_call_method): image_data = {'id': 'fake-id', 'disk_format': 'vmdk', 'size': 512} instance = mock.MagicMock() instance.image_ref = image_data['id'] mock_image_api_get.return_value = image_data vm_folder_ref = mock.MagicMock() res_pool_ref = mock.MagicMock() context = mock.MagicMock() mock_read_handle = mock.MagicMock() mock_read_class.return_value = mock_read_handle mock_write_handle = mock.MagicMock() mock_write_class.return_value = mock_write_handle mock_write_handle.get_imported_vm.return_value = \ mock.sentinel.vm_ref mock_ovf = mock.MagicMock() mock_ovf.name = 'dsl.ovf' mock_vmdk = mock.MagicMock() mock_vmdk.name = "Damn_Small_Linux-disk1.vmdk" def fake_extract(name): if name == mock_ovf.name: m = mock.MagicMock() m.read.return_value = ovf_descriptor return m elif name == mock_vmdk.name: return mock_read_handle mock_tar = mock.MagicMock() mock_tar.__iter__ = mock.Mock( return_value=iter([mock_ovf, mock_vmdk])) mock_tar.extractfile = fake_extract mock_tar_open.return_value.__enter__.return_value = mock_tar images.fetch_image_ova(context, instance, session, 'fake-vm', 'fake-datastore', vm_folder_ref, res_pool_ref) mock_start_transfer.assert_called_once_with( context, mock_read_handle, 512, write_file_handle=mock_write_handle) mock_call_method.assert_called_once_with(session.vim, "UnregisterVM", mock.sentinel.vm_ref) mock_unlink.assert_called_once_with(mock.ANY)
def test_fetch_image_ova(self, mock_tar_open, mock_write_class, mock_read_class): session = mock.MagicMock() ovf_descriptor = None ovf_path = os.path.join(os.path.dirname(__file__), 'ovf.xml') with open(ovf_path) as f: ovf_descriptor = f.read() with test.nested( mock.patch.object(images.IMAGE_API, 'get'), mock.patch.object(images.IMAGE_API, 'download'), mock.patch.object(images, 'start_transfer'), mock.patch.object(images, '_build_shadow_vm_config_spec'), mock.patch.object(session, '_call_method'), mock.patch.object(vm_util, 'get_vmdk_info') ) as (mock_image_api_get, mock_image_api_download, mock_start_transfer, mock_build_shadow_vm_config_spec, mock_call_method, mock_get_vmdk_info): image_data = {'id': 'fake-id', 'disk_format': 'vmdk', 'size': 512} instance = mock.MagicMock() instance.image_ref = image_data['id'] mock_image_api_get.return_value = image_data vm_folder_ref = mock.MagicMock() res_pool_ref = mock.MagicMock() context = mock.MagicMock() mock_read_handle = mock.MagicMock() mock_read_class.return_value = mock_read_handle mock_write_handle = mock.MagicMock() mock_write_class.return_value = mock_write_handle mock_write_handle.get_imported_vm.return_value = \ mock.sentinel.vm_ref mock_ovf = mock.MagicMock() mock_ovf.name = 'dsl.ovf' mock_vmdk = mock.MagicMock() mock_vmdk.name = "Damn_Small_Linux-disk1.vmdk" def fake_extract(name): if name == mock_ovf: m = mock.MagicMock() m.read.return_value = ovf_descriptor return m elif name == mock_vmdk: return mock_read_handle mock_tar = mock.MagicMock() mock_tar.__iter__ = mock.Mock(return_value = iter([mock_ovf, mock_vmdk])) mock_tar.extractfile = fake_extract mock_tar_open.return_value.__enter__.return_value = mock_tar images.fetch_image_ova( context, instance, session, 'fake-vm', 'fake-datastore', vm_folder_ref, res_pool_ref) mock_tar_open.assert_called_once_with(mode='r|', fileobj=mock_read_handle) mock_start_transfer.assert_called_once_with(context, mock_read_handle, 512, write_file_handle=mock_write_handle) mock_get_vmdk_info.assert_called_once_with( session, mock.sentinel.vm_ref, 'fake-vm') mock_call_method.assert_called_once_with( session.vim, "UnregisterVM", mock.sentinel.vm_ref)