From 6c300dad48a7e181ea7bb4b516c3ab61f041e701 Mon Sep 17 00:00:00 2001 From: Dileep Ranganathan Date: Fri, 25 May 2018 05:14:10 -0700 Subject: Fix bug in VIM fit constraint When the Multicloud returns empty list instead of None value the system was throwing error. If empty list is returned from multicloud the assumption is that there is no matching VIMs with specified capacity so ultimately would result in solution not found. Change-Id: Ie7164a7cbaa41d7278b7391b56dde78318bc4509 Issue-ID: OPTFRA-245 Signed-off-by: Dileep Ranganathan --- .../data/plugins/vim_controller/multicloud.py | 7 +++---- conductor/conductor/data/service.py | 2 +- .../conductor/tests/unit/data/candidate_list.json | 2 +- .../plugins/inventory_provider/test_multicloud.py | 2 +- conductor/conductor/tests/unit/data/test_service.py | 21 +++++++++++++-------- 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/conductor/conductor/data/plugins/vim_controller/multicloud.py b/conductor/conductor/data/plugins/vim_controller/multicloud.py index cdc6cde..8eec9fa 100644 --- a/conductor/conductor/data/plugins/vim_controller/multicloud.py +++ b/conductor/conductor/data/plugins/vim_controller/multicloud.py @@ -129,15 +129,14 @@ class MULTICLOUD(base.VimControllerBase): if body: vims = body.get("VIMs") - if vims: - return vims - else: + if vims is None: LOG.error(_LE( "Unable to get VIMs with cpu-{}, memory-{}, disk-{}") .format(data['vCPU'], data['Memory'], data['Storage'])) - return None + + return vims else: LOG.error(_LE("Unable to get VIMs from Multicloud with " "requirement {}").format(data)) diff --git a/conductor/conductor/data/service.py b/conductor/conductor/data/service.py index f4e3aac..e9d597b 100644 --- a/conductor/conductor/data/service.py +++ b/conductor/conductor/data/service.py @@ -518,7 +518,7 @@ class DataEndpoint(object): vim_request ) - if vims_result and len(vims_result) > 0: + if vims_result and len(vims_result) > 0 and vims_result[0] is not None: vims_set = set(vims_result[0]) for candidate in candidate_list: # perform this check only for cloud candidates diff --git a/conductor/conductor/tests/unit/data/candidate_list.json b/conductor/conductor/tests/unit/data/candidate_list.json index 789ab64..8a28622 100644 --- a/conductor/conductor/tests/unit/data/candidate_list.json +++ b/conductor/conductor/tests/unit/data/candidate_list.json @@ -39,7 +39,7 @@ "cloud_owner": "att-aic", "cloud_region_version": "1.1", "physical_location_id": "NYCNY55", - "vim-id": "att-aic_DLLSTX55" + "vim-id": "att-aic_NYCNY55" } ] } \ No newline at end of file diff --git a/conductor/conductor/tests/unit/data/plugins/inventory_provider/test_multicloud.py b/conductor/conductor/tests/unit/data/plugins/inventory_provider/test_multicloud.py index aacaab4..1f4013e 100644 --- a/conductor/conductor/tests/unit/data/plugins/inventory_provider/test_multicloud.py +++ b/conductor/conductor/tests/unit/data/plugins/inventory_provider/test_multicloud.py @@ -85,7 +85,7 @@ class TestMultiCloud(unittest.TestCase): response.text = {"VIMs": []} response.json.return_value = response.text rest_mock.return_value = response - self.assertEqual(None, self.mc_ep.check_vim_capacity(vim_request)) + self.assertEqual([], self.mc_ep.check_vim_capacity(vim_request)) response.text = {"VIMs": None} response.json.return_value = response.text rest_mock.return_value = response diff --git a/conductor/conductor/tests/unit/data/test_service.py b/conductor/conductor/tests/unit/data/test_service.py index 4b841de..01c2ab3 100644 --- a/conductor/conductor/tests/unit/data/test_service.py +++ b/conductor/conductor/tests/unit/data/test_service.py @@ -295,22 +295,27 @@ class TestDataEndpoint(unittest.TestCase): hpa_json["conductor_solver"]["constraints"][2].items()[0] vim_request = constraint_info['properties']['request'] ctxt = {} - args = {"candidate_list": candidate_list, + candidate_list_copy = list(copy.deepcopy(candidate_list)) + args = {"candidate_list": [candidate_list_copy[1]], "request": vim_request} - vim_mock.return_value = ['att-aic_DLLSTX55'] - self.assertEqual({'response': candidate_list, 'error': False}, + vim_mock.return_value = [['att-aic_NYCNY55']] + self.assertEqual({'response': [candidate_list[1]], 'error': False}, self.data_ep.get_candidates_with_vim_capacity(ctxt, args)) - vim_mock.return_value = ['att-aic_NYCNY33'] - self.assertEqual({'response': [candidate_list[0]], 'error': False}, + vim_mock.return_value = [] + self.assertEqual({'response': [candidate_list[1]], 'error': True}, self.data_ep.get_candidates_with_vim_capacity(ctxt, args)) - vim_mock.return_value = [] - self.assertEqual({'response': candidate_list, 'error': True}, + vim_mock.return_value = [None] + self.assertEqual({'response': [candidate_list[1]], 'error': True}, self.data_ep.get_candidates_with_vim_capacity(ctxt, args)) vim_mock.return_value = None - self.assertEqual({'response': candidate_list, 'error': True}, + self.assertEqual({'response': [candidate_list[1]], 'error': True}, + self.data_ep.get_candidates_with_vim_capacity(ctxt, + args)) + vim_mock.return_value = [[]] + self.assertEqual({'response': [], 'error': False}, self.data_ep.get_candidates_with_vim_capacity(ctxt, args)) -- cgit 1.2.3-korg