Full response for v1 ImageClient methods

Provide the entire response object, not just the images, for the
tempest v1 glance client's create_image, update_image and list_images
methods. This is all the work necessary to implement the blueprint
referenced below on this client as the remaining methods already
return the full response.

partially implements: blueprint method-return-value-and-move-service-clients-to-lib
Change-Id: Ia52bfde7cef1420c0c7d94288154fe4b6d54cd5f
This commit is contained in:
John Warren
2015-07-31 15:51:02 -04:00
parent e2e29841e8
commit 6620725926
9 changed files with 48 additions and 21 deletions

View File

@@ -48,7 +48,7 @@ class ImagesMetadataTestJSON(base.BaseV2ComputeTest):
body = cls.glance_client.create_image(name=name, body = cls.glance_client.create_image(name=name,
container_format='bare', container_format='bare',
disk_format='raw', disk_format='raw',
is_public=False) is_public=False)['image']
cls.image_id = body['id'] cls.image_id = body['id']
cls.images.append(cls.image_id) cls.images.append(cls.image_id)
image_file = six.StringIO(('*' * 1024)) image_file = six.StringIO(('*' * 1024))

View File

@@ -54,7 +54,7 @@ class ListImageFiltersTestJSON(base.BaseV2ComputeTest):
body = cls.glance_client.create_image(name=name, body = cls.glance_client.create_image(name=name,
container_format='bare', container_format='bare',
disk_format='raw', disk_format='raw',
is_public=False) is_public=False)['image']
image_id = body['id'] image_id = body['id']
cls.images.append(image_id) cls.images.append(image_id)
# Wait 1 second between creation and upload to ensure a delta # Wait 1 second between creation and upload to ensure a delta

View File

@@ -323,7 +323,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest):
properties=properties, properties=properties,
status='active', status='active',
sort_key='created_at', sort_key='created_at',
sort_dir='asc') sort_dir='asc')['images']
self.assertEqual(2, len(image_list)) self.assertEqual(2, len(image_list))
self.assertEqual((backup1, backup2), self.assertEqual((backup1, backup2),
(image_list[0]['name'], image_list[1]['name'])) (image_list[0]['name'], image_list[1]['name']))
@@ -347,7 +347,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest):
properties=properties, properties=properties,
status='active', status='active',
sort_key='created_at', sort_key='created_at',
sort_dir='asc') sort_dir='asc')['images']
self.assertEqual(2, len(image_list), self.assertEqual(2, len(image_list),
'Unexpected number of images for ' 'Unexpected number of images for '
'v2:test_create_backup; was the oldest backup not ' 'v2:test_create_backup; was the oldest backup not '

View File

@@ -70,10 +70,11 @@ class AuthorizationTestJSON(base.BaseV2ComputeTest):
body = cls.glance_client.create_image(name=name, body = cls.glance_client.create_image(name=name,
container_format='bare', container_format='bare',
disk_format='raw', disk_format='raw',
is_public=False) is_public=False)['image']
image_id = body['id'] image_id = body['id']
image_file = six.StringIO(('*' * 1024)) 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.glance_client.wait_for_image_status(image_id, 'active')
cls.image = cls.images_client.show_image(image_id) cls.image = cls.images_client.show_image(image_id)

View File

@@ -90,6 +90,26 @@ class BaseV1ImageTest(BaseImageTest):
super(BaseV1ImageTest, cls).setup_clients() super(BaseV1ImageTest, cls).setup_clients()
cls.client = cls.os.image_client 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): class BaseV1ImageMembersTest(BaseV1ImageTest):

View File

@@ -45,7 +45,7 @@ class CreateRegisterImagesTest(base.BaseV1ImageTest):
# Now try uploading an image file # Now try uploading an image file
image_file = moves.cStringIO(data_utils.random_bytes()) 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.assertIn('size', body)
self.assertEqual(1024, body.get('size')) self.assertEqual(1024, body.get('size'))
@@ -168,14 +168,14 @@ class ListImagesTest(base.BaseV1ImageTest):
@test.idempotent_id('246178ab-3b33-4212-9a4b-a7fe8261794d') @test.idempotent_id('246178ab-3b33-4212-9a4b-a7fe8261794d')
def test_index_no_params(self): def test_index_no_params(self):
# Simple test to see all fixture images returned # 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) image_list = map(lambda x: x['id'], images_list)
for image_id in self.created_images: for image_id in self.created_images:
self.assertIn(image_id, image_list) self.assertIn(image_id, image_list)
@test.idempotent_id('f1755589-63d6-4468-b098-589820eb4031') @test.idempotent_id('f1755589-63d6-4468-b098-589820eb4031')
def test_index_disk_format(self): 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: for image in images_list:
self.assertEqual(image['disk_format'], 'ami') self.assertEqual(image['disk_format'], 'ami')
result_set = set(map(lambda x: x['id'], images_list)) 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') @test.idempotent_id('2143655d-96d9-4bec-9188-8674206b4b3b')
def test_index_container_format(self): 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: for image in images_list:
self.assertEqual(image['container_format'], 'bare') self.assertEqual(image['container_format'], 'bare')
result_set = set(map(lambda x: x['id'], images_list)) 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') @test.idempotent_id('feb32ac6-22bb-4a16-afd8-9454bb714b14')
def test_index_max_size(self): 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: for image in images_list:
self.assertTrue(image['size'] <= 42) self.assertTrue(image['size'] <= 42)
result_set = set(map(lambda x: x['id'], images_list)) 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') @test.idempotent_id('6ffc16d0-4cbf-4401-95c8-4ac63eac34d8')
def test_index_min_size(self): 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: for image in images_list:
self.assertTrue(image['size'] >= 142) self.assertTrue(image['size'] >= 142)
result_set = set(map(lambda x: x['id'], images_list)) 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, images_list = self.client.list_images(detail=True,
status='active', status='active',
sort_key='size', sort_key='size',
sort_dir='desc') sort_dir='desc')['images']
top_size = images_list[0]['size'] # We have non-zero sized images top_size = images_list[0]['size'] # We have non-zero sized images
for image in images_list: for image in images_list:
size = image['size'] size = image['size']
@@ -226,7 +227,7 @@ class ListImagesTest(base.BaseV1ImageTest):
def test_index_name(self): def test_index_name(self):
images_list = self.client.list_images( images_list = self.client.list_images(
detail=True, detail=True,
name='New Remote Image dup') name='New Remote Image dup')['images']
result_set = set(map(lambda x: x['id'], images_list)) result_set = set(map(lambda x: x['id'], images_list))
for image in images_list: for image in images_list:
self.assertEqual(image['name'], 'New Remote Image dup') self.assertEqual(image['name'], 'New Remote Image dup')
@@ -272,7 +273,7 @@ class UpdateImageMetaTest(base.BaseV1ImageTest):
self.assertEqual(metadata['properties'], {'key1': 'value1'}) self.assertEqual(metadata['properties'], {'key1': 'value1'})
metadata['properties'].update(req_metadata) metadata['properties'].update(req_metadata)
metadata = self.client.update_image( 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) resp_metadata = self.client.get_image_meta(self.image_id)
expected = {'key1': 'alt1', 'key2': 'value2'} expected = {'key1': 'alt1', 'key2': 'value2'}

View File

@@ -85,6 +85,11 @@ class BaseTelemetryTest(tempest.test.BaseTestCase):
body = client.create_image( body = client.create_image(
data_utils.rand_name('image'), container_format='bare', data_utils.rand_name('image'), container_format='bare',
disk_format='raw', visibility='private') 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']) cls.image_ids.append(body['id'])
return body return body

View File

@@ -342,7 +342,7 @@ class ScenarioTest(tempest.test.BaseTestCase):
'is_public': 'False', 'is_public': 'False',
} }
params['properties'] = properties 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.addCleanup(self.image_client.delete_image, image['id'])
self.assertEqual("queued", image['status']) self.assertEqual("queued", image['status'])
self.image_client.update_image(image['id'], data=image_file) self.image_client.update_image(image['id'], data=image_file)

View File

@@ -130,7 +130,7 @@ class ImageClient(service_client.ServiceClient):
self._error_checker('POST', '/v1/images', headers, data, resp, self._error_checker('POST', '/v1/images', headers, data, resp,
body_iter) body_iter)
body = json.loads(''.join([c for c in 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): def _update_with_data(self, image_id, headers, data):
url = '/v1/images/%s' % image_id url = '/v1/images/%s' % image_id
@@ -139,7 +139,7 @@ class ImageClient(service_client.ServiceClient):
self._error_checker('PUT', url, headers, data, self._error_checker('PUT', url, headers, data,
resp, body_iter) resp, body_iter)
body = json.loads(''.join([c for c in 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 @property
def http(self): def http(self):
@@ -169,7 +169,7 @@ class ImageClient(service_client.ServiceClient):
resp, body = self.post('v1/images', None, headers) resp, body = self.post('v1/images', None, headers)
self.expected_success(201, resp.status) self.expected_success(201, resp.status)
body = json.loads(body) 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, def update_image(self, image_id, name=None, container_format=None,
data=None, properties=None): data=None, properties=None):
@@ -193,7 +193,7 @@ class ImageClient(service_client.ServiceClient):
resp, body = self.put(url, data, headers) resp, body = self.put(url, data, headers)
self.expected_success(200, resp.status) self.expected_success(200, resp.status)
body = json.loads(body) body = json.loads(body)
return service_client.ResponseBody(resp, body['image']) return service_client.ResponseBody(resp, body)
def delete_image(self, image_id): def delete_image(self, image_id):
url = 'v1/images/%s' % image_id url = 'v1/images/%s' % image_id
@@ -223,7 +223,7 @@ class ImageClient(service_client.ServiceClient):
resp, body = self.get(url) resp, body = self.get(url)
self.expected_success(200, resp.status) self.expected_success(200, resp.status)
body = json.loads(body) body = json.loads(body)
return service_client.ResponseBodyList(resp, body['images']) return service_client.ResponseBody(resp, body)
def get_image_meta(self, image_id): def get_image_meta(self, image_id):
url = 'v1/images/%s' % image_id url = 'v1/images/%s' % image_id