improve code coverage rate (change ext conn) after vfclcm upgraded from python2... 78/92078/1
authorhongyuzhao <zhao.hongyu@zte.com.cn>
Fri, 26 Jul 2019 07:43:56 +0000 (15:43 +0800)
committerhongyuzhao <zhao.hongyu@zte.com.cn>
Fri, 26 Jul 2019 07:54:08 +0000 (15:54 +0800)
Change-Id: Ibde361e523bfa070a3ddd79a6143ae565400c07f
Issue-ID: VFC-1429
Signed-off-by: hongyuzhao <zhao.hongyu@zte.com.cn>:wq
lcm/lcm/nf/biz/change_ext_conn.py
lcm/lcm/nf/tests/test_change_ext_conn.py
lcm/lcm/pub/vimapi/adaptor.py

index b423a2e..4cc63a1 100644 (file)
@@ -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":
index 2fafc24..794970f 100644 (file)
 # 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.'
+        )
index bce3138..5c8386b 100644 (file)
@@ -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):