From e20414f803957bd1793fdd690ace69cdc61ec701 Mon Sep 17 00:00:00 2001 From: Harsha Date: Thu, 17 Jul 2014 16:20:10 -0500 Subject: [PATCH] Bug fix - Nova boot (flavor id) + unit tests --- jumpgate/compute/drivers/sl/flavors.py | 18 +++++------- tests/jumpgate-tests/compute/test_flavors.py | 29 ++++++++++++++++++++ 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/jumpgate/compute/drivers/sl/flavors.py b/jumpgate/compute/drivers/sl/flavors.py index 7e9d2e6..c82648d 100644 --- a/jumpgate/compute/drivers/sl/flavors.py +++ b/jumpgate/compute/drivers/sl/flavors.py @@ -12,17 +12,13 @@ def __init__(self, app, flavors): self.flavors = flavors def on_get(self, req, resp, flavor_id, tenant_id=None): - try: - flavor_id = int(flavor_id) - except ValueError: - return error_handling.not_found(resp, 'Flavor could not be found') - - if flavor_id not in self.flavors: - return error_handling.not_found(resp, 'Flavor could not be found') - - flavor = get_flavor_details(self.app, req, self.flavors[flavor_id], - detail=True) - resp.body = {'flavor': flavor} + for flavor in self.flavors: + if str(flavor_id) == flavor['id']: + flavor = get_flavor_details(self.app, req, + flavor, detail=True) + resp.body = {'flavor': flavor} + return + return error_handling.not_found(resp, 'Flavor could not be found') class FlavorsV2(object): diff --git a/tests/jumpgate-tests/compute/test_flavors.py b/tests/jumpgate-tests/compute/test_flavors.py index ecc21f1..a5a3c22 100644 --- a/tests/jumpgate-tests/compute/test_flavors.py +++ b/tests/jumpgate-tests/compute/test_flavors.py @@ -236,3 +236,32 @@ def test_on_get_flavor_list_duplicate_flavors_invalid(self): def tearDown(self): flavor_list_loader.Flavors._flavors = None + + +class TestFlavorV2(unittest.TestCase): + def perform_flavor_detail(self, tenant_id, flavor_list, flavor_id): + env = get_client_env() + self.req = falcon.Request(env) + self.resp = falcon.Response() + self.app = mock.MagicMock() + instance = flavors.FlavorV2(app=self.app, flavors=flavor_list) + instance.on_get(self.req, self.resp, flavor_id, tenant_id) + + def test_on_get(self): + self.perform_flavor_detail(TENANT_ID, FLAVOR_LIST, 3) + self.assertEquals(list(self.resp.body.keys()), ['flavor']) + flavor_detail_keys = ['name', 'links', 'ram', + 'OS-FLV-DISABLED:disabled', 'vcpus', + 'OS-FLV-DISK-TYPE:disk_type', 'swap', + 'rxtx_factor', 'os-flavor-access:is_public', + 'OS-FLV-EXT-DATA:ephemeral', 'disk', 'id'] + self.assertEquals(set(self.resp.body['flavor'].keys()), + set(flavor_detail_keys)) + self.assertEquals(self.resp.status, '200 OK') + + def test_on_get_fail_flavor_not_found(self): + self.perform_flavor_detail(TENANT_ID, FLAVOR_LIST, 42) + self.assertEquals(self.resp.body, {'notFound': + {'message': 'Flavor could not ' + 'be found', 'code': '404'}}) + self.assertEquals(self.resp.status, 404)