diff --git a/tempest/api/compute/images/test_image_metadata.py b/tempest/api/compute/images/test_image_metadata.py index ab82d91568..d16c020ddd 100644 --- a/tempest/api/compute/images/test_image_metadata.py +++ b/tempest/api/compute/images/test_image_metadata.py @@ -48,7 +48,7 @@ class ImagesMetadataTestJSON(base.BaseV2ComputeTest): body = cls.glance_client.create_image(name=name, container_format='bare', disk_format='raw', - is_public=False) + is_public=False)['image'] cls.image_id = body['id'] cls.images.append(cls.image_id) image_file = six.StringIO(('*' * 1024)) diff --git a/tempest/api/compute/images/test_list_image_filters.py b/tempest/api/compute/images/test_list_image_filters.py index 2c0ce5917d..247a57bc96 100644 --- a/tempest/api/compute/images/test_list_image_filters.py +++ b/tempest/api/compute/images/test_list_image_filters.py @@ -54,7 +54,7 @@ class ListImageFiltersTestJSON(base.BaseV2ComputeTest): body = cls.glance_client.create_image(name=name, container_format='bare', disk_format='raw', - is_public=False) + is_public=False)['image'] image_id = body['id'] cls.images.append(image_id) # Wait 1 second between creation and upload to ensure a delta diff --git a/tempest/api/compute/servers/test_server_actions.py b/tempest/api/compute/servers/test_server_actions.py index 234f7e10e3..a20f7f5786 100644 --- a/tempest/api/compute/servers/test_server_actions.py +++ b/tempest/api/compute/servers/test_server_actions.py @@ -323,7 +323,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest): properties=properties, status='active', sort_key='created_at', - sort_dir='asc') + sort_dir='asc')['images'] self.assertEqual(2, len(image_list)) self.assertEqual((backup1, backup2), (image_list[0]['name'], image_list[1]['name'])) @@ -347,7 +347,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest): properties=properties, status='active', sort_key='created_at', - sort_dir='asc') + sort_dir='asc')['images'] self.assertEqual(2, len(image_list), 'Unexpected number of images for ' 'v2:test_create_backup; was the oldest backup not ' diff --git a/tempest/api/compute/test_authorization.py b/tempest/api/compute/test_authorization.py index e7111b080a..b542d7f2a0 100644 --- a/tempest/api/compute/test_authorization.py +++ b/tempest/api/compute/test_authorization.py @@ -70,10 +70,11 @@ class AuthorizationTestJSON(base.BaseV2ComputeTest): body = cls.glance_client.create_image(name=name, container_format='bare', disk_format='raw', - is_public=False) + is_public=False)['image'] image_id = body['id'] image_file = six.StringIO(('*' * 1024)) - body = cls.glance_client.update_image(image_id, data=image_file) + body = cls.glance_client.update_image(image_id, + data=image_file)['image'] cls.glance_client.wait_for_image_status(image_id, 'active') cls.image = cls.images_client.show_image(image_id) diff --git a/tempest/api/image/base.py b/tempest/api/image/base.py index 87013dbaad..457231091d 100644 --- a/tempest/api/image/base.py +++ b/tempest/api/image/base.py @@ -90,6 +90,26 @@ class BaseV1ImageTest(BaseImageTest): super(BaseV1ImageTest, cls).setup_clients() cls.client = cls.os.image_client + # TODO(jswarren) Remove this method once the v2 client also returns the + # full response object, not just the ['image'] value. At that + # point BaseImageTest.create_image will need to retrieve the + # ['image'] value. + @classmethod + def create_image(cls, **kwargs): + """Wrapper that returns a test image.""" + name = data_utils.rand_name(cls.__name__ + "-instance") + + if 'name' in kwargs: + name = kwargs.pop('name') + + container_format = kwargs.pop('container_format') + disk_format = kwargs.pop('disk_format') + + image = cls.client.create_image(name, container_format, + disk_format, **kwargs)['image'] + cls.created_images.append(image['id']) + return image + class BaseV1ImageMembersTest(BaseV1ImageTest): diff --git a/tempest/api/image/v1/test_images.py b/tempest/api/image/v1/test_images.py index 8beed3224e..7739d16029 100644 --- a/tempest/api/image/v1/test_images.py +++ b/tempest/api/image/v1/test_images.py @@ -45,7 +45,7 @@ class CreateRegisterImagesTest(base.BaseV1ImageTest): # Now try uploading an image file image_file = moves.cStringIO(data_utils.random_bytes()) - body = self.client.update_image(image_id, data=image_file) + body = self.client.update_image(image_id, data=image_file)['image'] self.assertIn('size', body) self.assertEqual(1024, body.get('size')) @@ -168,14 +168,14 @@ class ListImagesTest(base.BaseV1ImageTest): @test.idempotent_id('246178ab-3b33-4212-9a4b-a7fe8261794d') def test_index_no_params(self): # Simple test to see all fixture images returned - images_list = self.client.list_images() + images_list = self.client.list_images()['images'] image_list = map(lambda x: x['id'], images_list) for image_id in self.created_images: self.assertIn(image_id, image_list) @test.idempotent_id('f1755589-63d6-4468-b098-589820eb4031') def test_index_disk_format(self): - images_list = self.client.list_images(disk_format='ami') + images_list = self.client.list_images(disk_format='ami')['images'] for image in images_list: self.assertEqual(image['disk_format'], 'ami') result_set = set(map(lambda x: x['id'], images_list)) @@ -184,7 +184,8 @@ class ListImagesTest(base.BaseV1ImageTest): @test.idempotent_id('2143655d-96d9-4bec-9188-8674206b4b3b') def test_index_container_format(self): - images_list = self.client.list_images(container_format='bare') + images_list = (self.client.list_images(container_format='bare') + ['images']) for image in images_list: self.assertEqual(image['container_format'], 'bare') result_set = set(map(lambda x: x['id'], images_list)) @@ -193,7 +194,7 @@ class ListImagesTest(base.BaseV1ImageTest): @test.idempotent_id('feb32ac6-22bb-4a16-afd8-9454bb714b14') def test_index_max_size(self): - images_list = self.client.list_images(size_max=42) + images_list = self.client.list_images(size_max=42)['images'] for image in images_list: self.assertTrue(image['size'] <= 42) result_set = set(map(lambda x: x['id'], images_list)) @@ -202,7 +203,7 @@ class ListImagesTest(base.BaseV1ImageTest): @test.idempotent_id('6ffc16d0-4cbf-4401-95c8-4ac63eac34d8') def test_index_min_size(self): - images_list = self.client.list_images(size_min=142) + images_list = self.client.list_images(size_min=142)['images'] for image in images_list: self.assertTrue(image['size'] >= 142) result_set = set(map(lambda x: x['id'], images_list)) @@ -214,7 +215,7 @@ class ListImagesTest(base.BaseV1ImageTest): images_list = self.client.list_images(detail=True, status='active', sort_key='size', - sort_dir='desc') + sort_dir='desc')['images'] top_size = images_list[0]['size'] # We have non-zero sized images for image in images_list: size = image['size'] @@ -226,7 +227,7 @@ class ListImagesTest(base.BaseV1ImageTest): def test_index_name(self): images_list = self.client.list_images( detail=True, - name='New Remote Image dup') + name='New Remote Image dup')['images'] result_set = set(map(lambda x: x['id'], images_list)) for image in images_list: self.assertEqual(image['name'], 'New Remote Image dup') @@ -272,7 +273,7 @@ class UpdateImageMetaTest(base.BaseV1ImageTest): self.assertEqual(metadata['properties'], {'key1': 'value1'}) metadata['properties'].update(req_metadata) metadata = self.client.update_image( - self.image_id, properties=metadata['properties']) + self.image_id, properties=metadata['properties'])['image'] resp_metadata = self.client.get_image_meta(self.image_id) expected = {'key1': 'alt1', 'key2': 'value2'} diff --git a/tempest/api/telemetry/base.py b/tempest/api/telemetry/base.py index 0f9b7dd08e..5d1784f997 100644 --- a/tempest/api/telemetry/base.py +++ b/tempest/api/telemetry/base.py @@ -85,6 +85,11 @@ class BaseTelemetryTest(tempest.test.BaseTestCase): body = client.create_image( data_utils.rand_name('image'), container_format='bare', disk_format='raw', visibility='private') + # TODO(jswarren) Move ['image'] up to initial body value assignment + # once both v1 and v2 glance clients include the full response + # object. + if 'image' in body: + body = body['image'] cls.image_ids.append(body['id']) return body diff --git a/tempest/scenario/manager.py b/tempest/scenario/manager.py index 89b08421b2..27f145b604 100644 --- a/tempest/scenario/manager.py +++ b/tempest/scenario/manager.py @@ -342,7 +342,7 @@ class ScenarioTest(tempest.test.BaseTestCase): 'is_public': 'False', } params['properties'] = properties - image = self.image_client.create_image(**params) + image = self.image_client.create_image(**params)['image'] self.addCleanup(self.image_client.delete_image, image['id']) self.assertEqual("queued", image['status']) self.image_client.update_image(image['id'], data=image_file) diff --git a/tempest/services/image/v1/json/image_client.py b/tempest/services/image/v1/json/image_client.py index a07612adac..d97da36481 100644 --- a/tempest/services/image/v1/json/image_client.py +++ b/tempest/services/image/v1/json/image_client.py @@ -130,7 +130,7 @@ class ImageClient(service_client.ServiceClient): self._error_checker('POST', '/v1/images', headers, data, resp, body_iter) body = json.loads(''.join([c for c in body_iter])) - return service_client.ResponseBody(resp, body['image']) + return service_client.ResponseBody(resp, body) def _update_with_data(self, image_id, headers, data): url = '/v1/images/%s' % image_id @@ -139,7 +139,7 @@ class ImageClient(service_client.ServiceClient): self._error_checker('PUT', url, headers, data, resp, body_iter) body = json.loads(''.join([c for c in body_iter])) - return service_client.ResponseBody(resp, body['image']) + return service_client.ResponseBody(resp, body) @property def http(self): @@ -169,7 +169,7 @@ class ImageClient(service_client.ServiceClient): resp, body = self.post('v1/images', None, headers) self.expected_success(201, resp.status) body = json.loads(body) - return service_client.ResponseBody(resp, body['image']) + return service_client.ResponseBody(resp, body) def update_image(self, image_id, name=None, container_format=None, data=None, properties=None): @@ -193,7 +193,7 @@ class ImageClient(service_client.ServiceClient): resp, body = self.put(url, data, headers) self.expected_success(200, resp.status) body = json.loads(body) - return service_client.ResponseBody(resp, body['image']) + return service_client.ResponseBody(resp, body) def delete_image(self, image_id): url = 'v1/images/%s' % image_id @@ -223,7 +223,7 @@ class ImageClient(service_client.ServiceClient): resp, body = self.get(url) self.expected_success(200, resp.status) body = json.loads(body) - return service_client.ResponseBodyList(resp, body['images']) + return service_client.ResponseBody(resp, body) def get_image_meta(self, image_id): url = 'v1/images/%s' % image_id