From 47da3250da90bb960b310dc85f60e850979fe3fe Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Tue, 21 Feb 2012 12:06:44 -0800 Subject: [PATCH] Alter output format of volume types resources * volumes types lists now fit in with the rest of our API * Fixes bug 934435 Change-Id: Ia67318be363230fcb2819c0df976b44f19dd0876 --- nova/api/openstack/compute/contrib/volumetypes.py | 6 +++--- nova/api/openstack/volume/types.py | 6 +++--- .../compute/contrib/test_volume_types.py | 15 +++++++++------ nova/tests/api/openstack/volume/test_types.py | 15 +++++++++------ 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/nova/api/openstack/compute/contrib/volumetypes.py b/nova/api/openstack/compute/contrib/volumetypes.py index af68b3adb28..d0d0575fd7b 100644 --- a/nova/api/openstack/compute/contrib/volumetypes.py +++ b/nova/api/openstack/compute/contrib/volumetypes.py @@ -47,8 +47,8 @@ def construct(self): class VolumeTypesTemplate(xmlutil.TemplateBuilder): def construct(self): root = xmlutil.TemplateElement('volume_types') - sel = lambda obj, do_raise=False: obj.values() - elem = xmlutil.SubTemplateElement(root, 'volume_type', selector=sel) + elem = xmlutil.SubTemplateElement(root, 'volume_type', + selector='volume_types') make_voltype(elem) return xmlutil.MasterTemplate(root, 1) @@ -61,7 +61,7 @@ def index(self, req): """ Returns the list of volume types """ context = req.environ['nova.context'] authorize(context) - return volume_types.get_all_types(context) + return {'volume_types': volume_types.get_all_types(context).values()} @wsgi.serializers(xml=VolumeTypeTemplate) def create(self, req, body): diff --git a/nova/api/openstack/volume/types.py b/nova/api/openstack/volume/types.py index 97fb52497ea..80875e06fb1 100644 --- a/nova/api/openstack/volume/types.py +++ b/nova/api/openstack/volume/types.py @@ -42,8 +42,8 @@ def construct(self): class VolumeTypesTemplate(xmlutil.TemplateBuilder): def construct(self): root = xmlutil.TemplateElement('volume_types') - sel = lambda obj, do_raise=False: obj.values() - elem = xmlutil.SubTemplateElement(root, 'volume_type', selector=sel) + elem = xmlutil.SubTemplateElement(root, 'volume_type', + selector='volume_types') make_voltype(elem) return xmlutil.MasterTemplate(root, 1) @@ -55,7 +55,7 @@ class VolumeTypesController(object): def index(self, req): """ Returns the list of volume types """ context = req.environ['nova.context'] - return volume_types.get_all_types(context) + return {'volume_types': volume_types.get_all_types(context).values()} @wsgi.serializers(xml=VolumeTypeTemplate) def show(self, req, id): diff --git a/nova/tests/api/openstack/compute/contrib/test_volume_types.py b/nova/tests/api/openstack/compute/contrib/test_volume_types.py index 84328768423..b8581b99dcc 100644 --- a/nova/tests/api/openstack/compute/contrib/test_volume_types.py +++ b/nova/tests/api/openstack/compute/contrib/test_volume_types.py @@ -87,10 +87,13 @@ def test_volume_types_index(self): req = fakes.HTTPRequest.blank('/v2/fake/os-volume-types') res_dict = self.controller.index(req) - self.assertEqual(3, len(res_dict)) - for name in ['vol_type_1', 'vol_type_2', 'vol_type_3']: - self.assertEqual(name, res_dict[name]['name']) - self.assertEqual('value1', res_dict[name]['extra_specs']['key1']) + self.assertEqual(3, len(res_dict['volume_types'])) + + expected_names = ['vol_type_1', 'vol_type_2', 'vol_type_3'] + actual_names = map(lambda e: e['name'], res_dict['volume_types']) + self.assertEqual(set(actual_names), set(expected_names)) + for entry in res_dict['volume_types']: + self.assertEqual('value1', entry['extra_specs']['key1']) def test_volume_types_index_no_data(self): self.stubs.Set(volume_types, 'get_all_types', @@ -99,7 +102,7 @@ def test_volume_types_index_no_data(self): req = fakes.HTTPRequest.blank('/v2/fake/os-volume-types') res_dict = self.controller.index(req) - self.assertEqual(0, len(res_dict)) + self.assertEqual(0, len(res_dict['volume_types'])) def test_volume_types_show(self): self.stubs.Set(volume_types, 'get_volume_type', @@ -183,7 +186,7 @@ def test_index_serializer(self): # Just getting some input data vtypes = return_volume_types_get_all_types(None) - text = serializer.serialize(vtypes) + text = serializer.serialize({'volume_types': vtypes.values()}) print text tree = etree.fromstring(text) diff --git a/nova/tests/api/openstack/volume/test_types.py b/nova/tests/api/openstack/volume/test_types.py index 8178a989e4b..e16d853e5de 100644 --- a/nova/tests/api/openstack/volume/test_types.py +++ b/nova/tests/api/openstack/volume/test_types.py @@ -87,10 +87,13 @@ def test_volume_types_index(self): req = fakes.HTTPRequest.blank('/v2/123/os-volume-types') res_dict = self.controller.index(req) - self.assertEqual(3, len(res_dict)) - for name in ['vol_type_1', 'vol_type_2', 'vol_type_3']: - self.assertEqual(name, res_dict[name]['name']) - self.assertEqual('value1', res_dict[name]['extra_specs']['key1']) + self.assertEqual(3, len(res_dict['volume_types'])) + + expected_names = ['vol_type_1', 'vol_type_2', 'vol_type_3'] + actual_names = map(lambda e: e['name'], res_dict['volume_types']) + self.assertEqual(set(actual_names), set(expected_names)) + for entry in res_dict['volume_types']: + self.assertEqual('value1', entry['extra_specs']['key1']) def test_volume_types_index_no_data(self): self.stubs.Set(volume_types, 'get_all_types', @@ -99,7 +102,7 @@ def test_volume_types_index_no_data(self): req = fakes.HTTPRequest.blank('/v2/123/os-volume-types') res_dict = self.controller.index(req) - self.assertEqual(0, len(res_dict)) + self.assertEqual(0, len(res_dict['volume_types'])) def test_volume_types_show(self): self.stubs.Set(volume_types, 'get_volume_type', @@ -140,7 +143,7 @@ def test_index_serializer(self): # Just getting some input data vtypes = return_volume_types_get_all_types(None) - text = serializer.serialize(vtypes) + text = serializer.serialize({'volume_types': vtypes.values()}) print text tree = etree.fromstring(text)