summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lcm/lcm/nf/biz/change_ext_conn.py18
-rw-r--r--lcm/lcm/nf/tests/test_change_ext_conn.py141
-rw-r--r--lcm/lcm/pub/vimapi/adaptor.py3
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):