Add testcase for ns instantiate 78/84478/1
authoryangyan <yangyanyj@chinamobile.com>
Mon, 8 Apr 2019 07:09:06 +0000 (15:09 +0800)
committeryangyan <yangyanyj@chinamobile.com>
Mon, 8 Apr 2019 07:12:39 +0000 (15:12 +0800)
Change-Id: I9c12488703dac3ad96ab14109e3c19eec6d6f090
Signed-off-by: yangyan <yangyanyj@chinamobile.com>
Issue-ID: VFC-1341

lcm/ns/biz/ns_instant.py
lcm/ns/tests/test_ns_instant.py
lcm/ns/tests/test_sol_ns_instantiate_api.py

index 706ff3f..c16a21b 100644 (file)
@@ -64,15 +64,6 @@ class InstantNSService(object):
             ns_inst = NSInstModel.objects.get(id=self.ns_inst_id)
             vim_id = {}
 
-            # input_parameters = []
-            # if 'additionalParamForNs' in self.req_data:
-            #     for key, val in self.req_data['additionalParamForNs'].items():
-            #         input_parameters.append({"key": key, "value": val})
-            #     if 'location' in self.req_data['additionalParamForNs']:
-            #         vim_id = self.req_data['additionalParamForNs']['location']
-            #     params_json = json.JSONEncoder().encode(self.req_data["additionalParamForNs"])
-            # else:
-            #     params_json = json.JSONEncoder().encode({})
             input_parameters = []
             if 'additionalParamForNs' in self.req_data:
                 for key, val in self.req_data['additionalParamForNs'].items():
@@ -82,7 +73,6 @@ class InstantNSService(object):
                     cloud_owner = self.req_data['additionalParamForNs']['location'].split('_')[0]
                     cloud_regionid = self.req_data["additionalParamForNs"]["location"].split('_')[1]
                     vim_id = {"cloud_owner": cloud_owner, "cloud_regionid": cloud_regionid}
-                    logger.info('vim_id::::::::::::%s', type(vim_id))
                 params_json = json.JSONEncoder().encode(self.req_data["additionalParamForNs"])
             else:
                 params_json = json.JSONEncoder().encode({})
@@ -230,23 +220,16 @@ class InstantNSService(object):
         run_ns_instantiate(plan_input, occ_id)
         return dict(data={'jobId': job_id}, status=status.HTTP_200_OK, occ_id=occ_id)
 
-    # @staticmethod
-    # def get_vnf_vim_id(vim_id, location_constraints, vnfdid):
-    #     for location in location_constraints:
-    #         if "vnfProfileId" in location and vnfdid == location["vnfProfileId"]:
-    #             return location["locationConstraints"]["vimId"]
-    #     if vim_id:
-    #         return vim_id
-    #     raise NSLCMException("No Vim info is found for vnf(%s)." % vnfdid)
     @staticmethod
     def get_vnf_vim_id(vim_id, location_constraints, vnfdid):
         for location in location_constraints:
             if "vnfProfileId" in location and vnfdid == location["vnfProfileId"]:
-                if 'vimId' in location['locationConstraints']:
+                # if 'vimId' in location['locationConstraints']:
+                if len(location['locationConstraints']) == 1:
                     cloud_owner = location['locationConstraints']["vimId"].split('_')[0]
                     cloud_regionid = location['locationConstraints']["vimId"].split('_')[1]
                     vim_id = {"cloud_owner": cloud_owner, "cloud_regionid": cloud_regionid}
-                else:
+                elif len(location['locationConstraints']) == 2:
                     cloud_owner = location['locationConstraints']["cloudOwner"]
                     cloud_regionid = location['locationConstraints']["cloudRegionId"]
                     vim_id = {"cloud_owner": cloud_owner, "cloud_regionid": cloud_regionid}
@@ -266,19 +249,17 @@ class InstantNSService(object):
                 for depend in vnf["dependencies"]:
                     vl_vnf[depend["vl_id"]] = vnf['properties']['id']
         vnf_vim = {}
-        # for location in location_constraints:
-        #     if "vnfProfileId" in location:
-        #         vnfd_id = location["vnfProfileId"]
-        #         vnf_vim[vnfd_id] = location["locationConstraints"]["vimId"]
+
         for location in location_constraints:
             if "vnfProfileId" in location:
                 vnfd_id = location["vnfProfileId"]
-                if 'vimId' in location["locationConstraints"]:
+                # if 'vimId' in location["locationConstraints"]:
+                if len(location['locationConstraints']) == 1:
                     cloud_owner = location["locationConstraints"]["vimId"].split('_')[0]
                     cloud_regionid = location["locationConstraints"]["vimId"].split('_')[1]
                     vim_id = {"cloud_owner": cloud_owner, "cloud_regionid": cloud_regionid}
                     vnf_vim[vnfd_id] = vim_id
-                else:
+                elif len(location['locationConstraints']) == 2:
                     cloud_owner = location["locationConstraints"]["cloudOwner"]
                     cloud_regionid = location["locationConstraints"]["cloudRegionId"]
                     vim_id = {"cloud_owner": cloud_owner, "cloud_regionid": cloud_regionid}
index 9629da2..e5ad9ca 100644 (file)
@@ -158,15 +158,16 @@ class TestNsInstant(TestCase):
         mock_call_req.side_effect = [ret for i in range(1, 20)]
         data = {
             "additionalParamForNs": {
-                "sdnControllerId": "2"
+                "sdnControllerId": "2",
+                "location": "CPE-DC_Region"
             },
             "locationConstraints": [{
                 "vnfProfileId": "zte_ran_cucp_0001",
-                "locationConstraints": {"vimId": '{"cloud_owner": "VCPE", "cloud_regionid": "RegionOne"}'}
+                "locationConstraints": {}
             },
                 {
                     "vnfProfileId": "zte_ran_cuup_0001",
-                    "locationConstraints": {"vimId": '{"cloud_owner": "VCPE", "cloud_regionid": "RegionOne"}'}
+                    "locationConstraints": {}
             }
             ],
             "addpnfData": [{
@@ -179,3 +180,69 @@ class TestNsInstant(TestCase):
         # response = self.client.post("/api/nslcm/v1/ns/1/instantiate", data=data, format='json')
         ack = InstantNSService(1, data).do_biz()
         self.assertEqual(ack['status'], status.HTTP_200_OK)
+
+    @mock.patch.object(restcall, 'call_req')
+    @mock.patch('lcm.pub.msapi.sdc_run_catalog.parse_nsd', MagicMock(return_value=nsd))
+    @mock.patch('lcm.pub.msapi.extsys.select_vnfm', MagicMock(return_value=vnfminfo))
+    def test_ns_instantiate_with_vimid_1(self, mock_call_req):
+        config.WORKFLOW_OPTION = "grapflow"
+        NSInstModel(id="1", name="test_ns", nspackage_id="1", status="created").save()
+        ret = [0, json.JSONEncoder().encode({'jobId': "1", "responseDescriptor": {"progress": 100}}), '200']
+        mock_call_req.side_effect = [ret for i in range(1, 20)]
+        data = {
+            "additionalParamForNs": {
+                "sdnControllerId": "2"
+            },
+            "locationConstraints": [{
+                "vnfProfileId": "zte_ran_cucp_0001",
+                "locationConstraints": {
+                    "cloudOwner": "CPE-DC",
+                    "cloudRegionId": "RegionOne"}
+            },
+                {
+                    "vnfProfileId": "zte_ran_cuup_0001",
+                    "locationConstraints": {
+                        "cloudOwner": "CPE-DC",
+                        "cloudRegionId": "RegionOne"}
+            }
+            ],
+            "addpnfData": [{
+                "pnfId": 1,
+                "pnfName": "test_pnf",
+                "pnfdId": "zte_ran_du_0001",
+                "pnfProfileId": "du"
+            }]
+        }
+        ack = InstantNSService(1, data).do_biz()
+        self.assertEqual(ack['status'], status.HTTP_200_OK)
+
+    @mock.patch.object(restcall, 'call_req')
+    @mock.patch('lcm.pub.msapi.sdc_run_catalog.parse_nsd', MagicMock(return_value=nsd))
+    @mock.patch('lcm.pub.msapi.extsys.select_vnfm', MagicMock(return_value=vnfminfo))
+    def test_ns_instantiate_with_different_vimid_2(self, mock_call_req):
+        config.WORKFLOW_OPTION = "grapflow"
+        NSInstModel(id="1", name="test_ns", nspackage_id="1", status="created").save()
+        ret = [0, json.JSONEncoder().encode({'jobId': "1", "responseDescriptor": {"progress": 100}}), '200']
+        mock_call_req.side_effect = [ret for i in range(1, 20)]
+        data = {
+            "additionalParamForNs": {
+                "sdnControllerId": "2"
+            },
+            "locationConstraints": [{
+                "vnfProfileId": "zte_ran_cucp_0001",
+                "locationConstraints": {"vimId": "CPE-DC_RegionOne"}
+            },
+                {
+                    "vnfProfileId": "zte_ran_cuup_0001",
+                    "locationConstraints": {"vimId": "CPE-DC_RegionOne"}
+            }
+            ],
+            "addpnfData": [{
+                "pnfId": 1,
+                "pnfName": "test_pnf",
+                "pnfdId": "zte_ran_du_0001",
+                "pnfProfileId": "du"
+            }]
+        }
+        ack = InstantNSService(1, data).do_biz()
+        self.assertEqual(ack['status'], status.HTTP_200_OK)
index 598124c..bd2e008 100644 (file)
@@ -373,14 +373,6 @@ class TestInstantiateNsApi(TestCase):
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
     def test_method_not_allowed(self):
-        # response = self.client.put(self.url % '1', data=self.req_data, format='json')
-        # self.failUnlessEqual(status.HTTP_405_METHOD_NOT_ALLOWED, response.status_code)
-        # response = self.client.patch(self.url % '1', data=self.req_data, format='json')
-        # self.failUnlessEqual(status.HTTP_405_METHOD_NOT_ALLOWED, response.status_code)
-        # response = self.client.delete(self.url % '1', data=self.req_data, format='json')
-        # self.failUnlessEqual(status.HTTP_405_METHOD_NOT_ALLOWED, response.status_code)
-        # response = self.client.get(self.url % '1', data=self.req_data, format='json')
-        # self.failUnlessEqual(status.HTTP_405_METHOD_NOT_ALLOWED, response.status_code)
         response = self.client.put(self.url % self.nsInstanceId, data=self.req_data, format='json')
         self.failUnlessEqual(status.HTTP_405_METHOD_NOT_ALLOWED, response.status_code)
         response = self.client.patch(self.url % self.nsInstanceId, data=self.req_data, format='json')