update link to upper-constraints.txt
[optf/osdf.git] / test / test_PolicyCalls.py
index 0378dbd..1ca14dc 100644 (file)
@@ -1,5 +1,6 @@
 # -------------------------------------------------------------------------
 #   Copyright (c) 2017-2018 AT&T Intellectual Property
+#   Copyright (C) 2020 Wipro Limited.
 #
 #   Licensed under the Apache License, Version 2.0 (the "License");
 #   you may not use this file except in compliance with the License.
 import json
 import unittest
 
+from osdf.adapters.local_data import local_policies
 from osdf.config.base import osdf_config
 from osdf.adapters.policy import interface
-from osdf.utils.interfaces import RestClient
+from osdf.utils.interfaces import RestClient, json_from_file
 import yaml
 from mock import patch
-from osdf.optimizers.placementopt.conductor import translation
+from osdf.adapters.conductor import translation
+from osdf.operation.exceptions import BusinessException
 
 
 class TestPolicyCalls(unittest.TestCase):
-        
-    def test_get_subscriber_name(self):
-        req_json_obj = json.loads(open("./test/placement-tests/request_mso.json").read())
-        config_core = osdf_config.core
-        pmain = config_core['policy_info']['placement']
-        print(pmain)
-        subs_name = interface.get_subscriber_name(req_json_obj, pmain)
-        print("subscriber_name=", subs_name)
-        self.assertEquals(subs_name, "Avteet_Chayal")
-    
-    
-    def test_get_subscriber_name_null(self):
-        req_json_file = "./test/placement-tests/request_mso_subs_name_null.json"
-        req_json_obj = json.loads(open(req_json_file).read())
-        config_core = osdf_config.core
-        
-        pmain = config_core['policy_info']['placement']
-        print(pmain)
-        subs_name = interface.get_subscriber_name(req_json_obj, pmain)
-        print("subscriber_name=", subs_name)
-        self.assertEquals(subs_name, "DEFAULT")
-        
-    
-    def test_get_subscriber_name_blank(self):
-        req_json_file = "./test/placement-tests/request_mso_subs_name_blank.json"
-        req_json_obj = json.loads(open(req_json_file).read())
-        config_core = osdf_config.core
-        
-        pmain = config_core['policy_info']['placement']
-        print(pmain)
-        subs_name = interface.get_subscriber_name(req_json_obj, pmain)
-        print("subscriber_name=", subs_name)
-        self.assertEquals(subs_name, "DEFAULT")
-        
-    
-    def test_get_subscriber_name_default(self):
-        req_json_file = "./test/placement-tests/request_mso_subs_name_default.json"
-        req_json_obj = json.loads(open(req_json_file).read())
-        config_core = osdf_config.core
-        
-        pmain = config_core['policy_info']['placement']
-        print(pmain)
-        subs_name = interface.get_subscriber_name(req_json_obj, pmain)
-        print("subscriber_name=", subs_name)
-        self.assertEquals(subs_name, "DEFAULT")
-    
-    
-    def test_get_subscriber_name_none(self):
-        req_json_file = "./test/placement-tests/request_mso_subs_name_none.json"
-        req_json_obj = json.loads(open(req_json_file).read())
-        config_core = osdf_config.core
-        
-        pmain = config_core['policy_info']['placement']
-        print(pmain)
-        subs_name = interface.get_subscriber_name(req_json_obj, pmain)
-        print("subscriber_name=", subs_name)
-        self.assertEquals(subs_name, "DEFAULT")
-        
-    
+
+    def setUp(self):
+        main_dir = ""
+        parameter_data_file = main_dir + "test/placement-tests/request.json"
+        policy_data_path = main_dir + "test/policy-local-files/"
+        local_config_file = main_dir + "config/common_config.yaml"
+
+        valid_policies_list_file = policy_data_path + '/' + 'meta-valid-policies.txt'
+        valid_policies_files = local_policies.get_policy_names_from_file(valid_policies_list_file)
+
+        self.request_json = json_from_file(parameter_data_file)
+        self.policies = [json_from_file(policy_data_path + '/' + name) for name in valid_policies_files]
+
+    def tearDown(self):
+        pass
+
+    def get_req_resp(self, req_file, resp_file):
+        """Get request/response from files"""
+        req_json = json_from_file(req_file)
+        resp_json = json_from_file(resp_file)
+        return req_json, resp_json
+
+    def test_policy_api_call(self):
+        req_json, policy_response = self.get_req_resp("test/placement-tests/request.json",
+                                                      "test/placement-tests/policy_response.json")
+        with patch('osdf.adapters.policy.interface.policy_api_call', return_value=policy_response):
+            policy_list = interface.remote_api(req_json, osdf_config, service_type="placement")
+            self.assertIsNotNone(policy_list)
+
+    def test_policy_api_call2(self):
+        req_json, policy_response = self.get_req_resp("test/placement-tests/request.json",
+                                                      "test/placement-tests/policy_response2.json")
+        with patch('osdf.adapters.policy.interface.policy_api_call', return_value=policy_response):
+            policy_list = interface.remote_api(req_json, osdf_config, service_type="placement")
+            policy_type = [policy[list(policy.keys())[0]]['type'] for policy in policy_list]
+            #self.assertEqual(set(policy_type), {'hpaPolicy', 'SubscriberPolicy'})
+
+    def failure_policy_call(self, req_json_file, resp_json_file):
+        req_json, policy_response = self.get_req_resp(req_json_file, resp_json_file)
+        with patch('osdf.adapters.policy.interface.policy_api_call', return_value=policy_response):
+            self.assertRaises(BusinessException,
+                              lambda: interface.remote_api(req_json, osdf_config, service_type="placement"))
+
+    # def test_policy_api_call_failed_multi(self):
+    #     prefix = "./test/placement-tests"
+    #     fail_cases = [("request_error1.json", "policy_response.json"),
+    #                   ("request.json", "policy_response_error1.json"),
+    #                   ("request.json", "policy_response_error2.json")]
+    #     for req, resp in fail_cases:
+    #         self.failure_policy_call(prefix + "/" + req, prefix + "/" + resp)
+
     def test_get_by_scope(self):
         req_json_file = "./test/placement-tests/testScoperequest.json"
-        allPolicies = "./test/placement-tests/scopePolicies.json"
+        all_policies = "./test/placement-tests/policy_response.json"
         req_json_obj = json.loads(open(req_json_file).read())
-        req_json_obj2 = json.loads(open(allPolicies).read())
-        config_core = osdf_config.core
-        yamlFile = "./test/placement-tests/test_by_scope.yaml"
-        
-        with open(yamlFile) as yamlFile2:
-            policyConfigFile = yaml.load(yamlFile2)
-            with patch('osdf.adapters.policy.interface.get_subscriber_role', return_value=('FFA Homing', [])) as mock_open:
-                with patch('osdf.utils.interfaces.RestClient.request', return_value = req_json_obj2):
-                    policiesList = interface.get_by_scope(RestClient, req_json_obj, policyConfigFile, 'placement')
-                    print(policiesList)
-                    #catches Exception if policiesList is null
-                    self.assertTrue(policiesList, 'is null')
-                    self.assertRaises(Exception)
-    
+        req_json_obj2 = json.loads(open(all_policies).read())
+        yaml_file = "./test/placement-tests/test_by_scope.yaml"
+
+        with open(yaml_file) as yaml_file2:
+            policy_config_file = yaml.load(yaml_file2)
+            with patch('osdf.utils.interfaces.RestClient.request', return_value=req_json_obj2):
+                policies_list = interface.get_by_scope(RestClient, req_json_obj, policy_config_file, 'placement')
+                self.assertFalse(policies_list)
+                self.assertRaises(Exception)
+
     def test_gen_demands(self):
-        actionsList = []
-        genDemandslist = []
-        req_json = "./test/placement-tests/testScoperequest.json"
-        policiesList = "./test/placement-tests/vnfGroupPolicies.txt"
-        fh = json.loads(open(policiesList).read())
-        #print(fh)
+        actions_list, gen_demands_list = [], []
+        req_json = "./test/placement-tests/request.json"
         req_json = json.loads(open(req_json).read())
-        config_core = osdf_config.core
-        service_type = req_json['placementInfo'].get('serviceType', None)
-        # service_type = data_mapping.get_request_service_type(req_json_file)
-        genDemands = translation.gen_demands(req_json['placementInfo']['demandInfo'], fh)
-        #print(genDemands)
-        #print(req_json_file['placementInfo']['demandInfo']['placementDemand'][0])
-        for action in req_json['placementInfo']['demandInfo']['placementDemand']:
-            #print(action['resourceModuleName'])
-            actionsList.append(action['resourceModuleName'])
-        for key2,value in genDemands.items():
-            #print(key2)
-            genDemandslist.append(key2)
-        #genDemandslist.remove('Primary IP_Mux_Demux updated_1 0')
-        #catches Exception if lists are not equal
-        self.assertListEqual(genDemandslist, actionsList, 'generated demands are not equal to the passed input [placementDemand][resourceModuleName] list')
-           
+        # need to run this only on vnf policies
+        vnf_policies = [x for x in self.policies if x[list(x.keys())[0]]["type"] ==
+                        "onap.policies.optimization.resource.VnfPolicy"]
+        gen_demands = translation.gen_demands(req_json['placementInfo']['placementDemands'], vnf_policies)
+
+        for action in req_json['placementInfo']['placementDemands']:
+            actions_list.append(action['resourceModuleName'])
+        for key2,value in gen_demands.items():
+            gen_demands_list.append(key2)
+        self.assertListEqual(gen_demands_list, actions_list, 'generated demands are not equal to the passed input'
+                             '[placementDemand][resourceModuleName] list')
+
+    def test_local_policy_location(self):
+        req_json = json_from_file("./test/placement-tests/request.json")
+        return interface.local_policies_location(req_json, osdf_config, service_type="placement")
+
+
 if __name__ == '__main__':
     unittest.main()