diff options
-rw-r--r-- | lcm/lcm/nf/biz/change_ext_conn.py | 18 | ||||
-rw-r--r-- | lcm/lcm/nf/tests/test_change_ext_conn.py | 141 | ||||
-rw-r--r-- | lcm/lcm/pub/vimapi/adaptor.py | 3 |
3 files changed, 157 insertions, 5 deletions
diff --git a/lcm/lcm/nf/biz/change_ext_conn.py b/lcm/lcm/nf/biz/change_ext_conn.py index b423a2ec..4cc63a11 100644 --- a/lcm/lcm/nf/biz/change_ext_conn.py +++ b/lcm/lcm/nf/biz/change_ext_conn.py @@ -167,7 +167,21 @@ class ChangeExtConn(Thread): "location_info": { "vimid": vim_id, "tenant": tenant - } + }, + # TODO need confirm + "protocol_data": [ + { + "address_data": { + "l3_address_data": { + "fixed_ip_address": + {"ip_address_assignment": True, + "floating_ip_activated": True, + "ip_address_type": "IPV4", + "number_of_ip_address": 1} + }, + }, + }, + ], }, "vl_id": network_id, "vdu_id": vdu_id, @@ -254,7 +268,7 @@ class ChangeExtConn(Thread): def do_create_port_notify(self, res_type, ret): self.port_id = ignore_case_get(ret, "id") - port_save("", self.nf_inst_id, ret) + port_save(self.job_id, self.nf_inst_id, ret) def do_notify_op(self, operation_type, status, resid): if operation_type == "delete": diff --git a/lcm/lcm/nf/tests/test_change_ext_conn.py b/lcm/lcm/nf/tests/test_change_ext_conn.py index 2fafc24c..794970fd 100644 --- a/lcm/lcm/nf/tests/test_change_ext_conn.py +++ b/lcm/lcm/nf/tests/test_change_ext_conn.py @@ -11,15 +11,21 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +import json import mock from django.test import TestCase from rest_framework import status from rest_framework.test import APIClient -from lcm.pub.database.models import NfInstModel +from lcm.pub.database.models import NfInstModel, JobStatusModel, StorageInstModel, NetworkInstModel, \ + SubNetworkInstModel, PortInstModel, FlavourInstModel, VmInstModel, VNFCInstModel from lcm.pub.exceptions import NFLCMException +from lcm.pub.utils import restcall +from lcm.pub.vimapi import api from lcm.pub.utils.jobutil import JobUtil +from lcm.nf.biz.change_ext_conn import ChangeExtConn +from . import const class TestChangeExtConn(TestCase): @@ -73,7 +79,7 @@ class TestChangeExtConn(TestCase): "vimType": "openstack", "vimId": "tecs_RegionOne", "accessInfo": { - "tenant": "admin" + "tenant": "chinamobile" } }], "additionalParams": { @@ -85,6 +91,14 @@ class TestChangeExtConn(TestCase): NfInstModel.objects.filter(nfinstid='12345').delete() NfInstModel.objects.filter(nfinstid='123').delete() + def assert_job_result(self, job_id, job_progress, job_detail): + jobs = JobStatusModel.objects.filter( + jobid=job_id, + progress=job_progress, + descp=job_detail + ) + self.assertEqual(1, len(jobs)) + def test_change_ext_conn_not_found(self): url = "/api/vnflcm/v1/vnf_instances/12/change_ext_conn" response = self.client.post(url, @@ -116,3 +130,126 @@ class TestChangeExtConn(TestCase): self.assertEqual( status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code) + + @mock.patch.object(restcall, 'call_req') + @mock.patch.object(api, 'call') + def test_change_ext_conn_sucess(self, mock_call, mock_call_req): + self.nf_inst_id = '12345' + res_cache = {"volume": {}, "flavor": {}, "port": {}} + res_cache["port"]["ext_cp"] = "port1" + NfInstModel(nfinstid=self.nf_inst_id, + nf_name='VNF1', + nf_desc="VNF DESC", + vnfdid="1", + netype="XGW", + vendor="ZTE", + vnfSoftwareVersion="V1", + version="V1", + package_id="2", + status='INSTANTIATED', + vnfd_model=json.dumps(const.vnfd_for_scale), + vimInfo=json.dumps({}), + resInfo=json.dumps(res_cache)).save() + StorageInstModel.objects.create( + storageid="1", + vimid="1", + resourceid="11", + insttype=0, + instid=self.nf_inst_id, + is_predefined=1 + ) + NetworkInstModel.objects.create( + networkid='1', + vimid='1', + resourceid='1', + name='pnet_network', + is_predefined=1, + tenant='admin', + insttype=0, + instid=self.nf_inst_id + ) + SubNetworkInstModel.objects.create( + subnetworkid='1', + vimid='1', + resourceid='1', + networkid='1', + is_predefined=1, + name='sub_pnet', + tenant='admin', + insttype=0, + instid=self.nf_inst_id + ) + PortInstModel.objects.create( + portid='1', + networkid='1', + subnetworkid='1', + vimid='1', + resourceid='1', + is_predefined=1, + name='ext_cp', + tenant='admin', + insttype=0, + instid=self.nf_inst_id + ) + FlavourInstModel.objects.create( + flavourid="1", + vimid="1", + resourceid="11", + instid=self.nf_inst_id, + is_predefined=1, + name="Flavor_sunshine" + ) + VmInstModel.objects.create( + vmid="1", + vimid="1", + resourceid="11", + insttype=0, + instid=self.nf_inst_id, + vmname="test_01", + is_predefined=1, + operationalstate=1 + ) + VmInstModel.objects.create( + vmid="2", + vimid="1", + resourceid="22", + insttype=0, + instid=self.nf_inst_id, + vmname="test_02", + is_predefined=1, + operationalstate=1 + ) + VNFCInstModel.objects.create( + vnfcinstanceid="1", + instid=self.nf_inst_id, + vmid="1" + ) + VNFCInstModel.objects.create( + vnfcinstanceid="2", + instid=self.nf_inst_id, + vmid="2" + ) + r1_apply_grant_result = [ + 0, + json.JSONEncoder().encode(const.instantiate_grant_result), + '200' + ] + mock_call_req.side_effect = [ + r1_apply_grant_result, + ] + mock_call.side_effect = [ + const.c1_data_get_tenant_id, + const.c7_data_create_flavor, + const.c6_data_create_port + ] + self.job_id = JobUtil.create_job('NF', 'VNF_CHANGE_EXT_CONN', self.nf_inst_id) + JobUtil.add_job_status(self.job_id, 0, "VNF_'VNF_CHANGE_EXT_CONN'_READY") + + ChangeExtConn(self.req_data, self.nf_inst_id, self.job_id,).run() + + print([{job.progress: job.descp} for job in JobStatusModel.objects.filter(jobid=self.job_id)]) + self.assert_job_result( + self.job_id, + 100, + 'Change ext conn success.' + ) diff --git a/lcm/lcm/pub/vimapi/adaptor.py b/lcm/lcm/pub/vimapi/adaptor.py index bce31384..5c8386bd 100644 --- a/lcm/lcm/pub/vimapi/adaptor.py +++ b/lcm/lcm/pub/vimapi/adaptor.py @@ -265,6 +265,7 @@ def create_port(vim_cache, res_cache, data, port, do_notify, res_type): set_opt_val(param, "subnetId", subnet_id) set_opt_val(param, "macAddress", ignore_case_get(port["properties"], "mac_address")) ip_address = [] + logger.debug("port['properties']:%s" % port["properties"]) for one_protocol_data in port["properties"]["protocol_data"]: l3_address_data = one_protocol_data["address_data"]["l3_address_data"] # l3 is not 13 fixed_ip_address = ignore_case_get(l3_address_data, "fixed_ip_address") @@ -525,7 +526,7 @@ def create_port_of_vm(vim_cache, res_cache, data, port, do_notify, res_type): } ret = api.create_vm_port(vim_id, tenant_id, vm_id, param) ret["nodeId"] = port["cp_id"] - do_notify(res_type, ret) + do_notify("create", res_type, ret) def delete_port_of_vm(vim_cache, res_cache, data, port, do_notify, res_type): |