Fix find for alphanumeic flavor id/name

Fixes LP bug #1089299

Change-Id: Ia9cc756b85096532acfc9ecacd1330de8a765fba
This commit is contained in:
Rohan Rhishikesh Kanade 2012-12-16 23:18:39 -08:00
parent 8d3650048a
commit 9937419888
5 changed files with 36 additions and 2 deletions

View File

@ -192,6 +192,13 @@ def find_resource(manager, name_or_id):
except (ValueError, exceptions.NotFound):
pass
# for str id which is not uuid (for Flavor search currently)
if getattr(manager, 'is_alphanum_id_allowed', False):
try:
return manager.get(name_or_id)
except exceptions.NotFound:
pass
try:
try:
return manager.find(human_id=name_or_id)

View File

@ -74,6 +74,7 @@ class FlavorManager(base.ManagerWithFind):
Manage :class:`Flavor` resources.
"""
resource_class = Flavor
is_alphanum_id_allowed = True
def list(self, detailed=True):
"""

View File

@ -506,7 +506,8 @@ class FakeHTTPClient(base_client.HTTPClient):
def get_flavors(self, **kw):
return (200, {'flavors': [
{'id': 1, 'name': '256 MB Server'},
{'id': 2, 'name': '512 MB Server'}
{'id': 2, 'name': '512 MB Server'},
{'id': 'aa1', 'name': '128 MB Server'}
]})
def get_flavors_detail(self, **kw):
@ -519,6 +520,10 @@ class FakeHTTPClient(base_client.HTTPClient):
'OS-FLV-EXT-DATA:ephemeral': 20,
'os-flavor-access:is_public': False,
'links': {}},
{'id': 'aa1', 'name': '128 MB Server', 'ram': 128, 'disk': 0,
'OS-FLV-EXT-DATA:ephemeral': 0,
'os-flavor-access:is_public': True,
'links': {}}
]})
def get_flavors_1(self, **kw):
@ -532,6 +537,10 @@ class FakeHTTPClient(base_client.HTTPClient):
return (200, {'flavor': {'id': 3, 'name': '256 MB Server',
'ram': 256, 'disk': 10}})
def get_flavors_aa1(self, **kw):
# Aplhanumeric flavor id are allowed.
return (200, {'flavor': self.get_flavors_detail()[1]['flavors'][2]})
def delete_flavors_flavordelete(self, **kw):
return (202, None)
@ -546,6 +555,10 @@ class FakeHTTPClient(base_client.HTTPClient):
return (200,
{'extra_specs': {"k2": "v2"}})
def get_flavors_aa1_os_extra_specs(self, **kw):
return (200,
{'extra_specs': {"k3": "v3"}})
def post_flavors_1_os_extra_specs(self, body, **kw):
assert body.keys() == ['extra_specs']
fakes.assert_has_keys(body['extra_specs'],

View File

@ -28,6 +28,15 @@ class FlavorsTest(utils.TestCase):
self.assertEqual(f.ephemeral, 10)
self.assertEqual(f.is_public, True)
def test_get_flavor_details_alphanum_id(self):
f = cs.flavors.get('aa1')
cs.assert_called('GET', '/flavors/aa1')
self.assertTrue(isinstance(f, flavors.Flavor))
self.assertEqual(f.ram, 128)
self.assertEqual(f.disk, 0)
self.assertEqual(f.ephemeral, 0)
self.assertEqual(f.is_public, True)
def test_get_flavor_details_diablo(self):
f = cs.flavors.get(3)
cs.assert_called('GET', '/flavors/3')

View File

@ -226,13 +226,17 @@ class ShellTest(utils.TestCase):
def test_flavor_list(self):
self.run_command('flavor-list')
self.assert_called('GET', '/flavors/2/os-extra_specs')
self.assert_called('GET', '/flavors/aa1/os-extra_specs')
self.assert_called_anytime('GET', '/flavors/detail')
def test_flavor_show(self):
self.run_command('flavor-show 1')
self.assert_called_anytime('GET', '/flavors/1')
def test_flavor_show_with_alphanum_id(self):
self.run_command('flavor-show aa1')
self.assert_called_anytime('GET', '/flavors/aa1')
def test_image_show(self):
self.run_command('image-show 1')
self.assert_called('GET', '/images/1')