'Test fetching streamOptimized disk image.'

@mock.patch('oslo_vmware.rw_handles.ImageReadHandle')
@mock.patch('oslo_vmware.rw_handles.VmdkWriteHandle')
def test_fetch_image_stream_optimized(self, mock_write_class, mock_read_class):

    session = mock.MagicMock()
    with test.nested(mock.patch.object(images.IMAGE_API, 'get'), mock.patch.object(images.IMAGE_API, 'download'), mock.patch.object(images, 'image_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_image_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
        images.fetch_image_stream_optimized(context, instance, session, 'fake-vm', 'fake-datastore', vm_folder_ref, res_pool_ref)
        mock_image_transfer.assert_called_once_with(mock_read_handle, mock_write_handle)
        mock_call_method.assert_called_once_with(session.vim, 'UnregisterVM', mock.sentinel.vm_ref)
        mock_get_vmdk_info.assert_called_once_with(session, mock.sentinel.vm_ref, 'fake-vm')
