Negative test for web-download import

This adds a negative test for the web-download image import method,
which provides a URL that could not possibly work (hopefully). This
tests that we handle the situation properly and report that store as
failed in the API.

Related-Bug: #1914826
Change-Id: Id559f1fc1428c5e4bc17171c3ea3542aafc6e001
This commit is contained in:
Dan Smith 2021-02-05 13:08:24 -08:00
parent 271f8201d4
commit 8552ac7d41
1 changed files with 62 additions and 0 deletions

View File

@ -14,6 +14,8 @@
# License for the specific language governing permissions and limitations
# under the License.
import time
from tempest.api.image import base
from tempest import config
from tempest.lib.common.utils import data_utils
@ -156,3 +158,63 @@ class ImagesNegativeTest(base.BaseV2ImageTest):
container_format='bare',
disk_format='raw',
os_glance_foo='bar')
class ImportImagesNegativeTest(base.BaseV2ImageTest):
"""Here we test the import operations for image"""
@classmethod
def skip_checks(cls):
super(ImportImagesNegativeTest, cls).skip_checks()
if not CONF.image_feature_enabled.import_image:
skip_msg = (
"%s skipped as image import is not available" % cls.__name__)
raise cls.skipException(skip_msg)
@classmethod
def resource_setup(cls):
super(ImportImagesNegativeTest, cls).resource_setup()
cls.available_import_methods = cls.client.info_import()[
'import-methods']['value']
if not cls.available_import_methods:
raise cls.skipException('Server does not support '
'any import method')
cls.available_stores = cls.get_available_stores()
if not len(cls.available_stores) > 0:
raise cls.skipException(
'No stores configured %s' % cls.available_stores)
@decorators.attr(type=['negative'])
@decorators.idempotent_id('c52f6a77-f522-4411-8dbe-9d14f2b1ba6b')
def test_image_web_download_import_with_bad_url(self):
"""Test 'web-download' import functionalities
Make sure that web-download with invalid URL fails properly.
"""
if 'web-download' not in self.available_import_methods:
raise self.skipException('Server does not support '
'web-download import method')
image = self.client.create_image(name='test',
container_format='bare',
disk_format='raw')
# Now try to get image details
body = self.client.show_image(image['id'])
self.assertEqual(image['id'], body['id'])
self.assertEqual('queued', body['status'])
stores = self.get_available_stores()
# import image from web to backend
image_uri = 'http://does-not.exist/no/possible/way'
self.client.image_import(image['id'], method='web-download',
image_uri=image_uri,
stores=[stores[0]['id']])
start_time = int(time.time())
while int(time.time()) - start_time < self.client.build_timeout:
body = self.client.show_image(image['id'])
if body.get('os_glance_failed_import'):
# Store ended up in failed list, which is good
return
time.sleep(self.client.build_interval)
self.fail('Image never reported failed store')