Adding more unit tests and .coveragerc 39/34739/4
authorDileep Ranganathan <dileep.ranganathan@intel.com>
Thu, 8 Mar 2018 02:33:33 +0000 (18:33 -0800)
committerDileep Ranganathan <dileep.ranganathan@intel.com>
Fri, 9 Mar 2018 13:37:34 +0000 (05:37 -0800)
Added more unit tests for DataEndpoint class
Usage of pragma reverted

Change-Id: Id8d4ff76c3ca75a2538352b7eb29b87b1a598794
Issue-ID: OPTFRA-101
Signed-off-by: Dileep Ranganathan <dileep.ranganathan@intel.com>
conductor/.coveragerc [new file with mode: 0644]
conductor/conductor/tests/unit/data/constraints.json
conductor/conductor/tests/unit/data/test_service.py

diff --git a/conductor/.coveragerc b/conductor/.coveragerc
new file mode 100644 (file)
index 0000000..10eba38
--- /dev/null
@@ -0,0 +1,21 @@
+# .coveragerc to control coverage.py
+[report]
+# Regexes for lines to exclude from consideration
+exclude_lines =
+    # Have to re-enable the standard pragma
+    pragma: no cover
+
+    # Don't complain about missing debug-only code:
+    def __repr__
+    def main()
+    if self\.debug
+
+    # Don't complain if tests don't hit defensive assertion code:
+    raise AssertionError
+    raise NotImplementedError
+
+    # Don't complain if non-runnable code isn't run:
+    if 0:
+    if __name__ == .__main__.:
+
+ignore_errors = True
index f7e9250..3b26a3a 100644 (file)
       "cloud_owner": "att-aic",
       "cloud_region_version": "1.1",
       "physical_location_id": "SFOCA55"
+    },
+    {
+      "candidate_id": "instance-1",
+      "candidate_type": "service",
+      "inventory_type": "service",
+      "inventory_provider": "aai",
+      "host_id": "vnf_333",
+      "cost": "100",
+      "location_id": "SFOCA55",
+      "location_type": "azure",
+      "latitude": "32.897480",
+      "longitude": "-97.040443",
+      "city": "San Francisco",
+      "state": "CA",
+      "country": "USA",
+      "region": "US",
+      "complex_name": "sfo_one",
+      "cloud_owner": "att-aic",
+      "cloud_region_version": "1.1",
+      "physical_location_id": "SFOCA55"
     }
   ],
   "constraint_type": "instance_fit",
@@ -71,6 +91,7 @@
   "properties": {
     "evaluate": {
       "network_roles": "",
+      "replication_role": "candidate-role1",
       "complex_name": {
         "any": [
           "dalls_one"
         "all": [
           "US"
         ]
+      },
+      "cloud-region": {
+        "cloud-requests": [
+          "NYCNY55",
+          "DLLSTX55"
+        ],
+        "service-requests": [
+          "DLLSTX55"
+        ]
       }
     }
+  },
+  "resolved_candidate": {
+    "candidate_id": "instance-2",
+    "candidate_type": "service",
+    "inventory_type": "service",
+    "inventory_provider": "aai",
+    "host_id": "vnf_333",
+    "cost": "100",
+    "location_id": "SFOCA55",
+    "location_type": "azure",
+    "latitude": "32.897480",
+    "longitude": "-97.040443",
+    "city": "San Francisco",
+    "state": "CA",
+    "country": "USA",
+    "region": "US",
+    "complex_name": "sfo_one",
+    "cloud_owner": "att-aic",
+    "cloud_region_version": "1.1",
+    "physical_location_id": "SFOCA55"
   }
 }
\ No newline at end of file
index e2fba3e..89f1833 100644 (file)
@@ -104,7 +104,7 @@ class TestDataEndpoint(unittest.TestCase):
         value_attrib = 'complex_name'
         value = req_json['properties']['evaluate'][value_attrib]
         candidate_list = req_json['candidate_list']
-        self.assertEqual(2, len(self.data_ep.get_candidate_discard_set(value,
+        self.assertEqual(3, len(self.data_ep.get_candidate_discard_set(value,
                                                                        candidate_list,
                                                                        value_attrib)))
         value_attrib = 'region'
@@ -113,6 +113,44 @@ class TestDataEndpoint(unittest.TestCase):
                                                                        candidate_list,
                                                                        value_attrib)))
 
+    def test_get_candidate_discard_set_by_cloud_region(self):
+        req_json_file = './conductor/tests/unit/data/constraints.json'
+        req_json = yaml.safe_load(open(req_json_file).read())
+        value_attrib = 'location_id'
+        value = req_json['properties']['evaluate']['cloud-region']
+        candidate_list = req_json['candidate_list']
+        self.assertEqual(2, len(
+            self.data_ep.get_candidate_discard_set_by_cloud_region(value,
+                                                                   candidate_list,
+                                                                   value_attrib)))
+
+    @mock.patch.object(service.LOG, 'error')
+    @mock.patch.object(service.LOG, 'debug')
+    @mock.patch.object(service.LOG, 'info')
+    @mock.patch.object(stevedore.ExtensionManager, 'map_method')
+    @mock.patch.object(stevedore.ExtensionManager, 'names')
+    def test_get_inventory_group_candidates(self, ext2_mock, ext1_mock,
+                                            info_mock, debug_mock, error_mock):
+        ext1_mock.return_value = None
+        req_json_file = './conductor/tests/unit/data/constraints.json'
+        req_json = yaml.safe_load(open(req_json_file).read())
+        self.assertEqual({'response': [], 'error': True},
+                         self.data_ep.get_inventory_group_candidates(None,
+                                                                     arg=req_json))
+        ext1_mock.return_value = [None]
+        self.assertEqual({'response': [], 'error': True},
+                         self.data_ep.get_inventory_group_candidates(None,
+                                                                     arg=req_json))
+        pairs = [['instance-1', 'instance-2']]
+        ext1_mock.return_value = [pairs]
+        ext2_mock.return_value = ['aai']
+        candidate_list = req_json['candidate_list']
+        expected_candidate_list = [c for c in candidate_list
+                                   if c["candidate_id"] == 'instance-1']
+        self.assertEqual({'response': expected_candidate_list, 'error': False},
+                         self.data_ep.get_inventory_group_candidates(None,
+                                                                     arg=req_json))
+
     @mock.patch.object(service.LOG, 'error')
     @mock.patch.object(service.LOG, 'debug')
     @mock.patch.object(service.LOG, 'info')
@@ -123,20 +161,43 @@ class TestDataEndpoint(unittest.TestCase):
         req_json_file = './conductor/tests/unit/data/constraints.json'
         req_json = yaml.safe_load(open(req_json_file).read())
         candidate_list = req_json['candidate_list']
-        ext_mock1.return_value = [candidate_list]
-        ext_mock2.return_value = [None]
+        ext_mock1.side_effect = ip_ext_sideeffect
+        ext_mock2.return_value = ['aai']
         self.maxDiff = None
         expected_response = {'response': [candidate_list[0]], 'error': False}
         self.assertEqual(expected_response,
                          self.data_ep.get_candidates_by_attributes(None,
                                                                    req_json))
+        req_json['properties']['evaluate']['network_roles'] = {"all": []}
+        expected_response = {'response': [candidate_list[0]], 'error': False}
+        self.assertEqual(expected_response,
+                         self.data_ep.get_candidates_by_attributes(None,
+                                                                   req_json))
+        req_json['properties']['evaluate']['network_roles'] = {"any": []}
+        expected_response = {'response': [candidate_list[0]], 'error': False}
+        self.assertEqual(expected_response,
+                         self.data_ep.get_candidates_by_attributes(None,
+                                                                   req_json))
+        req_json['properties']['evaluate']['network_roles'] = {
+            "all": ['role-1']}
+        expected_response = {'response': [], 'error': False}
+        self.assertEqual(expected_response,
+                         self.data_ep.get_candidates_by_attributes(None,
+                                                                   req_json))
+        req_json['properties']['evaluate']['network_roles'] = {
+            "all": ['role-2']}
+        expected_response = {'response': [], 'error': False}
+        self.assertEqual(expected_response,
+                         self.data_ep.get_candidates_by_attributes(None,
+                                                                   req_json))
 
     @mock.patch.object(service.LOG, 'error')
     @mock.patch.object(service.LOG, 'debug')
     @mock.patch.object(service.LOG, 'info')
     @mock.patch.object(log_util, 'getTransactionId')
     @mock.patch.object(stevedore.ExtensionManager, 'map_method')
-    def test_reslove_demands(self, ext_mock, logutil_mock, info_mock, debug_mock,
+    def test_reslove_demands(self, ext_mock, logutil_mock, info_mock,
+                             debug_mock,
                              error_mock):
         req_json_file = './conductor/tests/unit/data/demands.json'
         req_json = yaml.safe_load(open(req_json_file).read())
@@ -158,5 +219,18 @@ class TestDataEndpoint(unittest.TestCase):
                          self.data_ep.resolve_demands(ctxt, req_json))
 
 
+def ip_ext_sideeffect(*args, **kwargs):
+    req_json_file = './conductor/tests/unit/data/constraints.json'
+    req_json = yaml.safe_load(open(req_json_file).read())
+    candidate_list = req_json['candidate_list']
+    if args[0] == 'check_network_roles':
+        if kwargs['network_role_id'] == 'role-1':
+            return None
+        else:
+            return ['DLLSTX55']
+    elif args[0] == 'check_candidate_role':
+        return ['candidate-role0']
+
+
 if __name__ == "__main__":
     unittest.main()