From 0dd1bf3686a487f56a594a6a55ecaaafbe8793a7 Mon Sep 17 00:00:00 2001 From: yangyan Date: Mon, 8 Apr 2019 15:09:06 +0800 Subject: Add testcase for ns instantiate Change-Id: I9c12488703dac3ad96ab14109e3c19eec6d6f090 Signed-off-by: yangyan Issue-ID: VFC-1341 --- lcm/ns/biz/ns_instant.py | 33 +++---------- lcm/ns/tests/test_ns_instant.py | 73 +++++++++++++++++++++++++++-- lcm/ns/tests/test_sol_ns_instantiate_api.py | 8 ---- 3 files changed, 77 insertions(+), 37 deletions(-) diff --git a/lcm/ns/biz/ns_instant.py b/lcm/ns/biz/ns_instant.py index 706ff3f7..c16a21b1 100644 --- a/lcm/ns/biz/ns_instant.py +++ b/lcm/ns/biz/ns_instant.py @@ -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} diff --git a/lcm/ns/tests/test_ns_instant.py b/lcm/ns/tests/test_ns_instant.py index 9629da21..e5ad9cab 100644 --- a/lcm/ns/tests/test_ns_instant.py +++ b/lcm/ns/tests/test_ns_instant.py @@ -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) diff --git a/lcm/ns/tests/test_sol_ns_instantiate_api.py b/lcm/ns/tests/test_sol_ns_instantiate_api.py index 598124c6..bd2e0081 100644 --- a/lcm/ns/tests/test_sol_ns_instantiate_api.py +++ b/lcm/ns/tests/test_sol_ns_instantiate_api.py @@ -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') -- cgit 1.2.3-korg