Return complete response from flavors_client part-1

Currently compute flavors_client returns Response by removing
top key from Response.
For example-
return service_client.ResponseBody(resp, body['flavor'])

As service clients are in direction to move to Tempest-lib, all
service clients should return Response without any truncation.
One good example is Resource pagination links which are lost with current
way of return value. Resource pagination links are present in parallel
(not inside) to top key of Response.

This patch makes create/show/list flavor methods of compute flavors_client
to return complete Response body.

Implements: blueprint method-return-value-and-move-service-clients-to-lib

Change-Id: If9ef2db0c78ebfd668c262c2ea57e303c953b048
This commit is contained in:
ghanshyam
2015-08-18 15:46:42 +09:00
parent d4038b4f99
commit 19973bec18
15 changed files with 69 additions and 63 deletions

View File

@@ -69,7 +69,7 @@ class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
id=flavor_id,
ephemeral=self.ephemeral,
swap=self.swap,
rxtx_factor=self.rxtx)
rxtx_factor=self.rxtx)['flavor']
self.addCleanup(self.flavor_clean_up, flavor['id'])
self.assertEqual(flavor['name'], flavor_name)
self.assertEqual(flavor['vcpus'], self.vcpus)
@@ -82,7 +82,7 @@ class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
self.assertEqual(flavor['os-flavor-access:is_public'], True)
# Verify flavor is retrieved
flavor = self.client.show_flavor(flavor['id'])
flavor = self.client.show_flavor(flavor['id'])['flavor']
self.assertEqual(flavor['name'], flavor_name)
return flavor['id']
@@ -121,11 +121,11 @@ class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
id=new_flavor_id,
ephemeral=self.ephemeral,
swap=self.swap,
rxtx_factor=self.rxtx)
rxtx_factor=self.rxtx)['flavor']
self.addCleanup(self.flavor_clean_up, flavor['id'])
flag = False
# Verify flavor is retrieved
flavors = self.client.list_flavors(detail=True)
flavors = self.client.list_flavors(detail=True)['flavors']
for flavor in flavors:
if flavor['name'] == flavor_name:
flag = True
@@ -150,7 +150,7 @@ class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
flavor = self.client.create_flavor(name=flavor_name,
ram=self.ram, vcpus=self.vcpus,
disk=self.disk,
id=new_flavor_id)
id=new_flavor_id)['flavor']
self.addCleanup(self.flavor_clean_up, flavor['id'])
self.assertEqual(flavor['name'], flavor_name)
self.assertEqual(flavor['ram'], self.ram)
@@ -160,12 +160,12 @@ class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
verify_flavor_response_extension(flavor)
# Verify flavor is retrieved
flavor = self.client.show_flavor(new_flavor_id)
flavor = self.client.show_flavor(new_flavor_id)['flavor']
self.assertEqual(flavor['name'], flavor_name)
verify_flavor_response_extension(flavor)
# Check if flavor is present in list
flavors = self.user_client.list_flavors(detail=True)
flavors = self.user_client.list_flavors(detail=True)['flavors']
for flavor in flavors:
if flavor['name'] == flavor_name:
verify_flavor_response_extension(flavor)
@@ -186,11 +186,11 @@ class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
ram=self.ram, vcpus=self.vcpus,
disk=self.disk,
id=new_flavor_id,
is_public="False")
is_public="False")['flavor']
self.addCleanup(self.flavor_clean_up, flavor['id'])
# Verify flavor is retrieved
flag = False
flavors = self.client.list_flavors(detail=True)
flavors = self.client.list_flavors(detail=True)['flavors']
for flavor in flavors:
if flavor['name'] == flavor_name:
flag = True
@@ -198,7 +198,7 @@ class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
# Verify flavor is not retrieved with other user
flag = False
flavors = self.user_client.list_flavors(detail=True)
flavors = self.user_client.list_flavors(detail=True)['flavors']
for flavor in flavors:
if flavor['name'] == flavor_name:
flag = True
@@ -215,7 +215,7 @@ class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
ram=self.ram, vcpus=self.vcpus,
disk=self.disk,
id=new_flavor_id,
is_public="False")
is_public="False")['flavor']
self.addCleanup(self.flavor_clean_up, flavor['id'])
# Verify flavor is not used by other user
@@ -235,12 +235,12 @@ class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
ram=self.ram, vcpus=self.vcpus,
disk=self.disk,
id=new_flavor_id,
is_public="True")
is_public="True")['flavor']
self.addCleanup(self.flavor_clean_up, flavor['id'])
flag = False
self.new_client = self.flavors_client
# Verify flavor is retrieved with new user
flavors = self.new_client.list_flavors(detail=True)
flavors = self.new_client.list_flavors(detail=True)['flavors']
for flavor in flavors:
if flavor['name'] == flavor_name:
flag = True
@@ -258,7 +258,7 @@ class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
ram=self.ram, vcpus=self.vcpus,
disk=self.disk,
id=flavor_id_not_public,
is_public="False")
is_public="False")['flavor']
self.addCleanup(self.flavor_clean_up, flavor['id'])
# Create a public flavor
@@ -266,7 +266,7 @@ class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
ram=self.ram, vcpus=self.vcpus,
disk=self.disk,
id=flavor_id_public,
is_public="True")
is_public="True")['flavor']
self.addCleanup(self.flavor_clean_up, flavor['id'])
def _flavor_lookup(flavors, flavor_name):
@@ -278,7 +278,8 @@ class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
def _test_string_variations(variations, flavor_name):
for string in variations:
params = {'is_public': string}
flavors = self.client.list_flavors(detail=True, **params)
flavors = (self.client.list_flavors(detail=True, **params)
['flavors'])
flavor = _flavor_lookup(flavors, flavor_name)
self.assertIsNotNone(flavor)
@@ -297,7 +298,7 @@ class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
flavor = self.client.create_flavor(name=flavor_name,
ram=ram, vcpus=self.vcpus,
disk=self.disk,
id=new_flavor_id)
id=new_flavor_id)['flavor']
self.addCleanup(self.flavor_clean_up, flavor['id'])
self.assertEqual(flavor['name'], flavor_name)
self.assertEqual(flavor['vcpus'], self.vcpus)

View File

@@ -60,7 +60,7 @@ class FlavorsAccessTestJSON(base.BaseV2ComputeAdminTest):
ram=self.ram, vcpus=self.vcpus,
disk=self.disk,
id=new_flavor_id,
is_public='False')
is_public='False')['flavor']
self.addCleanup(self.client.delete_flavor, new_flavor['id'])
flavor_access = self.client.list_flavor_access(new_flavor_id)
self.assertEqual(len(flavor_access), 0, str(flavor_access))
@@ -74,7 +74,7 @@ class FlavorsAccessTestJSON(base.BaseV2ComputeAdminTest):
ram=self.ram, vcpus=self.vcpus,
disk=self.disk,
id=new_flavor_id,
is_public='False')
is_public='False')['flavor']
self.addCleanup(self.client.delete_flavor, new_flavor['id'])
# Add flavor access to a tenant.
resp_body = {
@@ -86,7 +86,7 @@ class FlavorsAccessTestJSON(base.BaseV2ComputeAdminTest):
self.assertIn(resp_body, add_body)
# The flavor is present in list.
flavors = self.flavors_client.list_flavors(detail=True)
flavors = self.flavors_client.list_flavors(detail=True)['flavors']
self.assertIn(new_flavor['id'], map(lambda x: x['id'], flavors))
# Remove flavor access from a tenant.
@@ -95,5 +95,5 @@ class FlavorsAccessTestJSON(base.BaseV2ComputeAdminTest):
self.assertNotIn(resp_body, remove_body)
# The flavor is not present in list.
flavors = self.flavors_client.list_flavors(detail=True)
flavors = self.flavors_client.list_flavors(detail=True)['flavors']
self.assertNotIn(new_flavor['id'], map(lambda x: x['id'], flavors))

View File

@@ -61,7 +61,7 @@ class FlavorsAccessNegativeTestJSON(base.BaseV2ComputeAdminTest):
ram=self.ram, vcpus=self.vcpus,
disk=self.disk,
id=new_flavor_id,
is_public='True')
is_public='True')['flavor']
self.addCleanup(self.client.delete_flavor, new_flavor['id'])
self.assertRaises(lib_exc.NotFound,
self.client.list_flavor_access,
@@ -77,7 +77,7 @@ class FlavorsAccessNegativeTestJSON(base.BaseV2ComputeAdminTest):
ram=self.ram, vcpus=self.vcpus,
disk=self.disk,
id=new_flavor_id,
is_public='False')
is_public='False')['flavor']
self.addCleanup(self.client.delete_flavor, new_flavor['id'])
self.assertRaises(lib_exc.Forbidden,
self.flavors_client.add_flavor_access,
@@ -94,7 +94,7 @@ class FlavorsAccessNegativeTestJSON(base.BaseV2ComputeAdminTest):
ram=self.ram, vcpus=self.vcpus,
disk=self.disk,
id=new_flavor_id,
is_public='False')
is_public='False')['flavor']
self.addCleanup(self.client.delete_flavor, new_flavor['id'])
# Add flavor access to a tenant.
self.client.add_flavor_access(new_flavor['id'], self.tenant_id)
@@ -115,7 +115,7 @@ class FlavorsAccessNegativeTestJSON(base.BaseV2ComputeAdminTest):
ram=self.ram, vcpus=self.vcpus,
disk=self.disk,
id=new_flavor_id,
is_public='False')
is_public='False')['flavor']
self.addCleanup(self.client.delete_flavor, new_flavor['id'])
# Add flavor access to a tenant.
@@ -140,7 +140,7 @@ class FlavorsAccessNegativeTestJSON(base.BaseV2ComputeAdminTest):
ram=self.ram, vcpus=self.vcpus,
disk=self.disk,
id=new_flavor_id,
is_public='False')
is_public='False')['flavor']
self.addCleanup(self.client.delete_flavor, new_flavor['id'])
# An exception should be raised when flavor access is not found

View File

@@ -55,7 +55,8 @@ class FlavorsExtraSpecsTestJSON(base.BaseV2ComputeAdminTest):
disk=disk,
id=cls.new_flavor_id,
ephemeral=ephemeral,
swap=swap, rxtx_factor=rxtx)
swap=swap,
rxtx_factor=rxtx)['flavor']
@classmethod
def resource_cleanup(cls):

View File

@@ -58,7 +58,8 @@ class FlavorsExtraSpecsNegativeTestJSON(base.BaseV2ComputeAdminTest):
disk=disk,
id=cls.new_flavor_id,
ephemeral=ephemeral,
swap=swap, rxtx_factor=rxtx)
swap=swap,
rxtx_factor=rxtx)['flavor']
@classmethod
def resource_cleanup(cls):

View File

@@ -75,7 +75,8 @@ class ServersAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
disk = 10
flavor_ref = self.flavors_client.create_flavor(name=flavor_name,
ram=ram, vcpus=vcpus,
disk=disk, id=flavor_id)
disk=disk,
id=flavor_id)['flavor']
self.addCleanup(self.flavors_client.delete_flavor, flavor_id)
self.assertRaises((lib_exc.Forbidden, lib_exc.OverLimit),
self.client.resize,
@@ -97,7 +98,8 @@ class ServersAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
disk = 10
flavor_ref = self.flavors_client.create_flavor(name=flavor_name,
ram=ram, vcpus=vcpus,
disk=disk, id=flavor_id)
disk=disk,
id=flavor_id)['flavor']
self.addCleanup(self.flavors_client.delete_flavor, flavor_id)
self.assertRaises((lib_exc.Forbidden, lib_exc.OverLimit),
self.client.resize,

View File

@@ -32,8 +32,8 @@ class FlavorsV2TestJSON(base.BaseComputeTest):
@test.idempotent_id('e36c0eaa-dff5-4082-ad1f-3f9a80aa3f59')
def test_list_flavors(self):
# List of all flavors should contain the expected flavor
flavors = self.client.list_flavors()
flavor = self.client.show_flavor(self.flavor_ref)
flavors = self.client.list_flavors()['flavors']
flavor = self.client.show_flavor(self.flavor_ref)['flavor']
flavor_min_detail = {'id': flavor['id'], 'links': flavor['links'],
'name': flavor['name']}
self.assertIn(flavor_min_detail, flavors)
@@ -41,89 +41,89 @@ class FlavorsV2TestJSON(base.BaseComputeTest):
@test.idempotent_id('6e85fde4-b3cd-4137-ab72-ed5f418e8c24')
def test_list_flavors_with_detail(self):
# Detailed list of all flavors should contain the expected flavor
flavors = self.client.list_flavors(detail=True)
flavor = self.client.show_flavor(self.flavor_ref)
flavors = self.client.list_flavors(detail=True)['flavors']
flavor = self.client.show_flavor(self.flavor_ref)['flavor']
self.assertIn(flavor, flavors)
@test.attr(type='smoke')
@test.idempotent_id('1f12046b-753d-40d2-abb6-d8eb8b30cb2f')
def test_get_flavor(self):
# The expected flavor details should be returned
flavor = self.client.show_flavor(self.flavor_ref)
flavor = self.client.show_flavor(self.flavor_ref)['flavor']
self.assertEqual(self.flavor_ref, flavor['id'])
@test.idempotent_id('8d7691b3-6ed4-411a-abc9-2839a765adab')
def test_list_flavors_limit_results(self):
# Only the expected number of flavors should be returned
params = {'limit': 1}
flavors = self.client.list_flavors(**params)
flavors = self.client.list_flavors(**params)['flavors']
self.assertEqual(1, len(flavors))
@test.idempotent_id('b26f6327-2886-467a-82be-cef7a27709cb')
def test_list_flavors_detailed_limit_results(self):
# Only the expected number of flavors (detailed) should be returned
params = {'limit': 1}
flavors = self.client.list_flavors(detail=True, **params)
flavors = self.client.list_flavors(detail=True, **params)['flavors']
self.assertEqual(1, len(flavors))
@test.idempotent_id('e800f879-9828-4bd0-8eae-4f17189951fb')
def test_list_flavors_using_marker(self):
# The list of flavors should start from the provided marker
flavor = self.client.show_flavor(self.flavor_ref)
flavor = self.client.show_flavor(self.flavor_ref)['flavor']
flavor_id = flavor['id']
params = {'marker': flavor_id}
flavors = self.client.list_flavors(**params)
flavors = self.client.list_flavors(**params)['flavors']
self.assertFalse(any([i for i in flavors if i['id'] == flavor_id]),
'The list of flavors did not start after the marker.')
@test.idempotent_id('6db2f0c0-ddee-4162-9c84-0703d3dd1107')
def test_list_flavors_detailed_using_marker(self):
# The list of flavors should start from the provided marker
flavor = self.client.show_flavor(self.flavor_ref)
flavor = self.client.show_flavor(self.flavor_ref)['flavor']
flavor_id = flavor['id']
params = {'marker': flavor_id}
flavors = self.client.list_flavors(detail=True, **params)
flavors = self.client.list_flavors(detail=True, **params)['flavors']
self.assertFalse(any([i for i in flavors if i['id'] == flavor_id]),
'The list of flavors did not start after the marker.')
@test.idempotent_id('3df2743e-3034-4e57-a4cb-b6527f6eac79')
def test_list_flavors_detailed_filter_by_min_disk(self):
# The detailed list of flavors should be filtered by disk space
flavor = self.client.show_flavor(self.flavor_ref)
flavor = self.client.show_flavor(self.flavor_ref)['flavor']
flavor_id = flavor['id']
params = {self._min_disk: flavor['disk'] + 1}
flavors = self.client.list_flavors(detail=True, **params)
flavors = self.client.list_flavors(detail=True, **params)['flavors']
self.assertFalse(any([i for i in flavors if i['id'] == flavor_id]))
@test.idempotent_id('09fe7509-b4ee-4b34-bf8b-39532dc47292')
def test_list_flavors_detailed_filter_by_min_ram(self):
# The detailed list of flavors should be filtered by RAM
flavor = self.client.show_flavor(self.flavor_ref)
flavor = self.client.show_flavor(self.flavor_ref)['flavor']
flavor_id = flavor['id']
params = {self._min_ram: flavor['ram'] + 1}
flavors = self.client.list_flavors(detail=True, **params)
flavors = self.client.list_flavors(detail=True, **params)['flavors']
self.assertFalse(any([i for i in flavors if i['id'] == flavor_id]))
@test.idempotent_id('10645a4d-96f5-443f-831b-730711e11dd4')
def test_list_flavors_filter_by_min_disk(self):
# The list of flavors should be filtered by disk space
flavor = self.client.show_flavor(self.flavor_ref)
flavor = self.client.show_flavor(self.flavor_ref)['flavor']
flavor_id = flavor['id']
params = {self._min_disk: flavor['disk'] + 1}
flavors = self.client.list_flavors(**params)
flavors = self.client.list_flavors(**params)['flavors']
self.assertFalse(any([i for i in flavors if i['id'] == flavor_id]))
@test.idempotent_id('935cf550-e7c8-4da6-8002-00f92d5edfaa')
def test_list_flavors_filter_by_min_ram(self):
# The list of flavors should be filtered by RAM
flavor = self.client.show_flavor(self.flavor_ref)
flavor = self.client.show_flavor(self.flavor_ref)['flavor']
flavor_id = flavor['id']
params = {self._min_ram: flavor['ram'] + 1}
flavors = self.client.list_flavors(**params)
flavors = self.client.list_flavors(**params)['flavors']
self.assertFalse(any([i for i in flavors if i['id'] == flavor_id]))

View File

@@ -71,7 +71,7 @@ class ImagesOneServerTestJSON(base.BaseV2ComputeTest):
cls.server_id = server['id']
def _get_default_flavor_disk_size(self, flavor_id):
flavor = self.flavors_client.show_flavor(flavor_id)
flavor = self.flavors_client.show_flavor(flavor_id)['flavor']
return flavor['disk']
@test.idempotent_id('3731d080-d4c5-4872-b41a-64d0d0021314')

View File

@@ -117,7 +117,7 @@ class ServersTestJSON(base.BaseV2ComputeTest):
def test_verify_created_server_vcpus(self):
# Verify that the number of vcpus reported by the instance matches
# the amount stated by the flavor
flavor = self.flavors_client.show_flavor(self.flavor_ref)
flavor = self.flavors_client.show_flavor(self.flavor_ref)['flavor']
linux_client = remote_client.RemoteClient(
self.get_server_ip(self.server),
self.ssh_user,
@@ -275,7 +275,7 @@ class ServersWithSpecificFlavorTestJSON(base.BaseV2ComputeAdminTest):
create_flavor(name=flavor_with_eph_disk_name,
ram=ram, vcpus=vcpus, disk=disk,
id=flavor_with_eph_disk_id,
ephemeral=1))
ephemeral=1))['flavor']
self.addCleanup(flavor_clean_up, flavor['id'])
return flavor['id']
@@ -292,7 +292,7 @@ class ServersWithSpecificFlavorTestJSON(base.BaseV2ComputeAdminTest):
flavor = (self.flavor_client.
create_flavor(name=flavor_no_eph_disk_name,
ram=ram, vcpus=vcpus, disk=disk,
id=flavor_no_eph_disk_id))
id=flavor_no_eph_disk_id))['flavor']
self.addCleanup(flavor_clean_up, flavor['id'])
return flavor['id']

View File

@@ -58,7 +58,8 @@ class DatabaseFlavorsTest(base.BaseDatabaseTest):
@test.services('compute')
def test_compare_db_flavors_with_os(self):
db_flavors = self.client.list_db_flavors()
os_flavors = self.os_flavors_client.list_flavors(detail=True)
os_flavors = (self.os_flavors_client.list_flavors(detail=True)
['flavors'])
self.assertEqual(len(os_flavors), len(db_flavors),
"OS flavors %s do not match DB flavors %s" %
(os_flavors, db_flavors))

View File

@@ -731,7 +731,7 @@ class FlavorService(BaseService):
def list(self):
client = self.client
flavors = client.list_flavors({"is_public": None})
flavors = client.list_flavors({"is_public": None})['flavors']
if not self.is_save_state:
# recreate list removing saved flavors
flavors = [flavor for flavor in flavors if flavor['id']

View File

@@ -840,7 +840,7 @@ def _get_server_by_name(client, name):
def _get_flavor_by_name(client, name):
body = client.flavors.list_flavors()
body = client.flavors.list_flavors()['flavors']
for flavor in body:
if name == flavor['name']:
return flavor

View File

@@ -101,7 +101,7 @@ class BaremetalBasicOps(manager.BaremetalScenarioTest):
def get_flavor_ephemeral_size(self):
"""Returns size of the ephemeral partition in GiB."""
f_id = self.instance['flavor']['id']
flavor = self.flavors_client.show_flavor(f_id)
flavor = self.flavors_client.show_flavor(f_id)['flavor']
ephemeral = flavor.get('OS-FLV-EXT-DATA:ephemeral')
if not ephemeral or ephemeral == 'N/A':
return None

View File

@@ -65,7 +65,7 @@ class ImageUtils(object):
def is_flavor_enough(self, flavor_id, image_id):
_image = self.images_client.show_image(image_id)
_flavor = self.flavors_client.show_flavor(flavor_id)
_flavor = self.flavors_client.show_flavor(flavor_id)['flavor']
return self._is_flavor_enough(_flavor, _image)
@@ -148,7 +148,7 @@ class InputScenarioUtils(object):
"""
if not hasattr(self, '_scenario_flavors'):
try:
flavors = self.flavors_client.list_flavors()
flavors = self.flavors_client.list_flavors()['flavors']
self._scenario_flavors = [
(self._normalize_name(f['name']), dict(flavor_ref=f['id']))
for f in flavors if re.search(self.flavor_pattern,

View File

@@ -39,13 +39,13 @@ class FlavorsClient(service_client.ServiceClient):
resp, body = self.get(url)
body = json.loads(body)
self.validate_response(_schema, resp, body)
return service_client.ResponseBodyList(resp, body['flavors'])
return service_client.ResponseBody(resp, body)
def show_flavor(self, flavor_id):
resp, body = self.get("flavors/%s" % flavor_id)
body = json.loads(body)
self.validate_response(schema.create_get_flavor_details, resp, body)
return service_client.ResponseBody(resp, body['flavor'])
return service_client.ResponseBody(resp, body)
def create_flavor(self, **kwargs):
"""Creates a new flavor or instance type.
@@ -64,7 +64,7 @@ class FlavorsClient(service_client.ServiceClient):
body = json.loads(body)
self.validate_response(schema.create_get_flavor_details, resp, body)
return service_client.ResponseBody(resp, body['flavor'])
return service_client.ResponseBody(resp, body)
def delete_flavor(self, flavor_id):
"""Deletes the given flavor."""
@@ -76,7 +76,7 @@ class FlavorsClient(service_client.ServiceClient):
# Did not use show_flavor(id) for verification as it gives
# 200 ok even for deleted id. LP #981263
# we can remove the loop here and use get by ID when bug gets sortedout
flavors = self.list_flavors(detail=True)
flavors = self.list_flavors(detail=True)['flavors']
for flavor in flavors:
if flavor['id'] == id:
return False