def test_web_download_revert_with_failure_without_path(self, mock_store_api): result = failure.Failure.from_exception( glance.common.exception.ImportTaskError()) web_download_task = web_download._WebDownload( self.task.task_id, self.task_type, self.task_repo, self.image_id, self.uri) web_download_task.revert(result) mock_store_api.delete_from_backend.assert_not_called()
def test_web_download_failed(self): web_download_task = web_download._WebDownload( self.task.task_id, self.task_type, self.task_repo, self.image_id, self.uri) with mock.patch.object(script_utils, "get_image_data_iter") as mock_iter: mock_iter.side_effect = glance.common.exception.NotFound self.assertRaises(glance.common.exception.NotFound, web_download_task.execute)
def test_web_download(self, mock_add): web_download_task = web_download._WebDownload( self.task.task_id, self.task_type, self.task_repo, self.image_id, self.uri) with mock.patch.object(script_utils, 'get_image_data_iter') as mock_iter: mock_iter.return_value = b"dddd" web_download_task.execute() mock_add.assert_called_once_with(self.image_id, b"dddd", 0)
def test_web_download_with_invalid_content_length(self, mock_add): web_download_task = web_download._WebDownload( self.task.task_id, self.task_type, self.task_repo, self.image_id, self.uri) with mock.patch.object(script_utils, 'get_image_data_iter') as mock_iter: mock_iter.return_value.headers = {'content-length': "not_valid"} mock_add.return_value = ["path", 4] self.assertEqual(web_download_task.execute(), "path") mock_add.assert_called_once_with(self.image_id, mock_iter.return_value, 0)
def test_web_download_delete_fails_on_revert(self, mock_store_api): result = failure.Failure.from_exception( glance.common.exception.ImportTaskError()) mock_store_api.delete_from_backend.side_effect = Exception web_download_task = web_download._WebDownload( self.task.task_id, self.task_type, self.task_repo, self.image_id, self.uri) web_download_task._path = "/path/to_downloaded_data" # this will verify that revert does not break because of failure # while deleting data in staging area web_download_task.revert(result)
def test_web_download_fails_when_data_size_different(self, mock_add): web_download_task = web_download._WebDownload( self.task.task_id, self.task_type, self.task_repo, self.image_id, self.uri) with mock.patch.object(script_utils, 'get_image_data_iter') as mock_iter: mock_iter.return_value.headers = {'content-length': '4'} mock_add.return_value = ["path", 3] self.assertRaises( glance.common.exception.ImportTaskError, web_download_task.execute)
def test_web_download_revert_with_failure_with_path(self, mock_store_api): result = failure.Failure.from_exception( glance.common.exception.ImportTaskError()) web_download_task = web_download._WebDownload(self.task.task_id, self.task_type, self.uri, self.action_wrapper, ['foo']) web_download_task._path = "/path/to_downloaded_data" web_download_task.revert(result) mock_store_api.delete_from_backend.assert_called_once_with( "/path/to_downloaded_data")
def test_web_download(self, mock_add): web_download_task = web_download._WebDownload(self.task.task_id, self.task_type, self.uri, self.action_wrapper, ['foo']) with mock.patch.object(script_utils, 'get_image_data_iter') as mock_iter: mock_add.return_value = ["path", 4] mock_iter.return_value.headers = {} self.assertEqual(web_download_task.execute(), "path") mock_add.assert_called_once_with(self.image_id, mock_iter.return_value, 0)
def test_web_download_revert_without_failure_multi_store( self, mock_store_api): enabled_backends = {'fast': 'file', 'cheap': 'file'} self.config(enabled_backends=enabled_backends) web_download_task = web_download._WebDownload(self.task.task_id, self.task_type, self.uri, self.action_wrapper, ['foo']) web_download_task._path = "/path/to_downloaded_data" web_download_task.revert("/path/to_downloaded_data") mock_store_api.delete.assert_called_once_with( "/path/to_downloaded_data", None)
def test_web_download_revert_with_failure(self, mock_store_api, mock_add): web_download_task = web_download._WebDownload( self.task.task_id, self.task_type, self.task_repo, self.image_id, self.uri) with mock.patch.object(script_utils, 'get_image_data_iter') as mock_iter: mock_iter.return_value.headers = {'content-length': '4'} mock_add.return_value = "/path/to_downloaded_data", 3 self.assertRaises( glance.common.exception.ImportTaskError, web_download_task.execute) web_download_task.revert(None) mock_store_api.delete_from_backend.assert_called_once_with( "/path/to_downloaded_data")
def test_web_download_revert_with_failure_without_path( self, mock_store_api): image = self.image_repo.get.return_value image.status = 'importing' image.extra_properties['os_glance_importing_to_stores'] = 'foo' image.extra_properties['os_glance_failed_import'] = '' result = failure.Failure.from_exception( glance.common.exception.ImportTaskError()) web_download_task = web_download._WebDownload(self.task.task_id, self.task_type, self.uri, self.action_wrapper, ['foo']) web_download_task.revert(result) mock_store_api.delete_from_backend.assert_not_called() # NOTE(danms): Since we told revert that we were the problem, # we should have updated the image status and moved the stores # to the failed list. self.image_repo.save.assert_called_once_with(image, 'importing') self.assertEqual('queued', image.status) self.assertEqual( '', image.extra_properties['os_glance_importing_to_stores']) self.assertEqual('foo', image.extra_properties['os_glance_failed_import'])
def test_web_download_revert_with_failure(self, mock_store_api, mock_add): image = self.image_repo.get.return_value image.extra_properties['os_glance_importing_to_stores'] = 'foo' image.extra_properties['os_glance_failed_import'] = '' web_download_task = web_download._WebDownload(self.task.task_id, self.task_type, self.uri, self.action_wrapper, ['foo']) with mock.patch.object(script_utils, 'get_image_data_iter') as mock_iter: mock_iter.return_value.headers = {'content-length': '4'} mock_add.return_value = "/path/to_downloaded_data", 3 self.assertRaises(glance.common.exception.ImportTaskError, web_download_task.execute) web_download_task.revert(None) mock_store_api.delete_from_backend.assert_called_once_with( "/path/to_downloaded_data") # NOTE(danms): Since we told revert that we were not at fault, # we should not have updated the image. self.image_repo.save.assert_not_called() self.assertEqual( 'foo', image.extra_properties['os_glance_importing_to_stores']) self.assertEqual('', image.extra_properties['os_glance_failed_import'])