summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lcm/lcm/nf/tests/test_scale_vnf.py2
-rw-r--r--lcm/lcm/nf/tests/test_scale_vnf_to_level.py260
-rw-r--r--lcm/requirements.txt2
3 files changed, 259 insertions, 5 deletions
diff --git a/lcm/lcm/nf/tests/test_scale_vnf.py b/lcm/lcm/nf/tests/test_scale_vnf.py
index 6c27fcd5..43614034 100644
--- a/lcm/lcm/nf/tests/test_scale_vnf.py
+++ b/lcm/lcm/nf/tests/test_scale_vnf.py
@@ -193,7 +193,6 @@ class TestNfScale(TestCase):
).run()
NfInstModel.objects.filter(nfinstid=self.nf_inst_id).delete()
- # print([job.descp for job in JobStatusModel.objects.filter(jobid=self.job_id)])
self.assert_job_result(
self.job_id,
100,
@@ -327,7 +326,6 @@ class TestNfScale(TestCase):
).run()
NfInstModel.objects.filter(nfinstid=self.nf_inst_id).delete()
- print([job.descp for job in JobStatusModel.objects.filter(jobid=self.job_id)])
self.assert_job_result(
self.job_id,
100,
diff --git a/lcm/lcm/nf/tests/test_scale_vnf_to_level.py b/lcm/lcm/nf/tests/test_scale_vnf_to_level.py
index 0c06694a..173f539d 100644
--- a/lcm/lcm/nf/tests/test_scale_vnf_to_level.py
+++ b/lcm/lcm/nf/tests/test_scale_vnf_to_level.py
@@ -11,11 +11,18 @@
# 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 . import const
+from lcm.pub.database.models import NfInstModel, JobStatusModel, StorageInstModel, NetworkInstModel, \
+ SubNetworkInstModel, PortInstModel, FlavourInstModel, VmInstModel, VNFCInstModel
+from lcm.pub.utils import restcall
+from lcm.pub.vimapi import api
+from lcm.pub.utils.jobutil import JobUtil
+from lcm.nf.biz.scale_vnf_to_level import ScaleVnfToLevel
class TestNfScaleToLevel(TestCase):
@@ -39,6 +46,14 @@ class TestNfScaleToLevel(TestCase):
def tearDown(self):
NfInstModel.objects.filter(nfinstid='98765').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_scale_vnf_to_level_not_found(self):
url = "/api/vnflcm/v1/vnf_instances/12/scale_to_level"
response = self.client.post(url,
@@ -70,3 +85,244 @@ class TestNfScaleToLevel(TestCase):
format='json')
NfInstModel.objects.filter(nfinstid='678').delete()
self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
+
+ @mock.patch.object(restcall, 'call_req')
+ @mock.patch.object(api, 'call')
+ def test_scale_out_vnf_success(self, mock_call, mock_call_req):
+ self.nf_inst_id = '6789'
+ 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
+ )
+ 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.c8_data_list_image,
+ const.c9_data_create_vm,
+ const.c10_data_get_vm
+ ]
+
+ self.job_id = JobUtil.create_job('NF', 'SCALE', self.nf_inst_id)
+ JobUtil.add_job_status(self.job_id, 0, "VNF_SCALE_READY", )
+
+ ScaleVnfToLevel(
+ {"instantiationLevelId": "instantiation_level_2"},
+ nf_inst_id=self.nf_inst_id,
+ job_id=self.job_id
+ ).run()
+
+ NfInstModel.objects.filter(nfinstid=self.nf_inst_id).delete()
+ self.assert_job_result(
+ self.job_id,
+ 100,
+ 'Scale Vnf success.'
+ )
+
+ @mock.patch.object(restcall, 'call_req')
+ @mock.patch.object(api, 'call')
+ def test_scale_to_inlevel_vnf_success(self, mock_call, mock_call_req):
+ self.nf_inst_id = '6789'
+ 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.c8_data_list_image,
+ const.c9_data_create_vm,
+ const.c10_data_get_vm
+ ]
+
+ self.job_id = JobUtil.create_job('NF', 'SCALE', self.nf_inst_id)
+ JobUtil.add_job_status(self.job_id, 0, "VNF_SCALE_READY", )
+
+ ScaleVnfToLevel(
+ {"scaleInfo": {"aspectId": "sunshine_aspect",
+ "scaleLevel": 0}},
+ nf_inst_id=self.nf_inst_id,
+ job_id=self.job_id
+ ).run()
+
+ NfInstModel.objects.filter(nfinstid=self.nf_inst_id).delete()
+ self.assert_job_result(
+ self.job_id,
+ 100,
+ 'Scale Vnf success.'
+ )
diff --git a/lcm/requirements.txt b/lcm/requirements.txt
index fdd274be..b844db36 100644
--- a/lcm/requirements.txt
+++ b/lcm/requirements.txt
@@ -20,7 +20,7 @@ mock==3.0.5
unittest_xml_reporting==1.12.0
# for auto-swagger
-drf-yasg>=1.2.2
+drf-yasg==1.16.0
flex>=6.11.1
swagger-spec-validator>=2.1.0