Fix bug in VIM fit constraint 11/49211/1
authorDileep Ranganathan <dileep.ranganathan@intel.com>
Fri, 25 May 2018 12:14:10 +0000 (05:14 -0700)
committerDileep Ranganathan <dileep.ranganathan@intel.com>
Fri, 25 May 2018 12:14:10 +0000 (05:14 -0700)
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 <dileep.ranganathan@intel.com>
conductor/conductor/data/plugins/vim_controller/multicloud.py
conductor/conductor/data/service.py
conductor/conductor/tests/unit/data/candidate_list.json
conductor/conductor/tests/unit/data/plugins/inventory_provider/test_multicloud.py
conductor/conductor/tests/unit/data/test_service.py

index cdc6cde..8eec9fa 100644 (file)
@@ -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))
index f4e3aac..e9d597b 100644 (file)
@@ -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
index 789ab64..8a28622 100644 (file)
@@ -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
index aacaab4..1f4013e 100644 (file)
@@ -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
index 4b841de..01c2ab3 100644 (file)
@@ -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))