X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=lcm%2Fns%2Ftests%2Ftest_ns_manual_scale.py;h=ceb7498e6232a4caccca7a52b60f695715ffcfb4;hb=8d3f334eecc54aa9a36839f81ea86cfd5a2f027c;hp=83bb169fa04f6608917b07193c3d69b418aa6e78;hpb=55065280b7ee7a85b5eeb73e1d5ce5aefa1d7356;p=vfc%2Fnfvo%2Flcm.git diff --git a/lcm/ns/tests/test_ns_manual_scale.py b/lcm/ns/tests/test_ns_manual_scale.py index 83bb169f..ceb7498e 100644 --- a/lcm/ns/tests/test_ns_manual_scale.py +++ b/lcm/ns/tests/test_ns_manual_scale.py @@ -13,30 +13,166 @@ # limitations under the License. import uuid - +import os import mock from django.test import Client from django.test import TestCase from rest_framework import status - from lcm.ns.const import NS_INST_STATUS from lcm.ns.ns_manual_scale import NSManualScaleService -from lcm.pub.database.models import NSInstModel +from lcm.pub.database.models import NSInstModel, JobModel, NfInstModel from lcm.pub.exceptions import NSLCMException from lcm.pub.utils import restcall -from lcm.pub.utils.jobutil import JobUtil, JOB_TYPE +from lcm.pub.utils.jobutil import JobUtil, JOB_TYPE, JOB_MODEL_STATUS +from lcm.pub.msapi import catalog +from lcm.pub.utils.scaleaspect import get_json_data + + +SCALING_JSON = { + "scale_options": [ + { + "nsd_id": "ns_ims", + "ns_scale_aspect": "TIC_CORE_IMS", + "ns_scale_info": [ + { + "step": "1", + "scale_list": [ + { + "vnfd_id": "zte_ims_cscf", + "vnf_scale_aspect": "mpu", + "numberOfSteps": "1" + }, + { + "vnfd_id": "zte_ims_hss", + "vnf_scale_aspect": "fpu", + "numberOfSteps": "3" + } + ] + }, + { + "step": "2", + "scale_list": [ + { + "vnfd_id": "zte_ims_cscf", + "vnf_scale_aspect": "mpu", + "numberOfSteps": "2" + }, + { + "vnfd_id": "zte_ims_hss", + "vnf_scale_aspect": "fpu", + "numberOfSteps": "6" + } + ] + } + ] + }, + { + "nsd_id": "ns_epc", + "ns_scale_aspect": "TIC_EDGE_EPC", + "ns_scale_info": [ + { + "step": "1", + "scale_list": [ + { + "vnfd_id": "zte_epc_spgw", + "vnf_scale_aspect": "gpu", + "numberOfSteps": "1" + }, + { + "vnfd_id": "zte_epc_tas", + "vnf_scale_aspect": "fpu", + "numberOfSteps": "2" + } + ] + }, + { + "step": "2", + "scale_list": [ + { + "vnfd_id": "zte_epc_spgw", + "vnf_scale_aspect": "mpu", + "numberOfSteps": "2" + }, + { + "vnfd_id": "zte_epc_tas", + "vnf_scale_aspect": "fpu", + "numberOfSteps": "4" + } + ] + } + ] + } + ] +} class TestNsManualScale(TestCase): def setUp(self): self.ns_inst_id = str(uuid.uuid4()) - self.job_id = JobUtil.create_job("NS", JOB_TYPE.MANUAL_SCALE_VNF, self.ns_inst_id) - + self.job_id = JobUtil.create_job( + "NS", JOB_TYPE.MANUAL_SCALE_VNF, self.ns_inst_id) + self.package_id = "7" self.client = Client() - NSInstModel(id=self.ns_inst_id, name="abc", nspackage_id="7", nsd_id="111").save() + NSInstModel( + id=self.ns_inst_id, + name="abc", + nspackage_id=self.package_id, + nsd_id="111").save() + + self.init_scaling_map_json() def tearDown(self): NSInstModel.objects.filter().delete() + JobModel.objects.filter().delete() + + def init_scaling_map_json(self): + curdir_path = os.path.dirname( + os.path.dirname( + os.path.dirname( + os.path.abspath(__file__)))) + filename = curdir_path + "/ns/data/scalemapping.json" + self.scaling_map_json = get_json_data(filename) + + def insert_new_ns(self): + ns_inst_id = str(uuid.uuid4()) + job_id = JobUtil.create_job( + "NS", JOB_TYPE.MANUAL_SCALE_VNF, self.ns_inst_id) + package_id = "23" + NSInstModel( + id=ns_inst_id, + name="abc", + nspackage_id=package_id, + nsd_id=package_id).save() + return ns_inst_id, job_id + + def insert_new_nf(self): + # Create a third vnf instance + self.nf_name = "name_1" + self.vnf_id = "1" + self.vnfm_inst_id = "1" + nf_inst_id = "233" + package_id = "nf_zte_hss" + nf_uuid = "ab34-3g5j-de13-ab85-ij93" + + NfInstModel.objects.create( + nfinstid=nf_inst_id, + nf_name=self.nf_name, + vnf_id=self.vnf_id, + vnfm_inst_id=self.vnfm_inst_id, + ns_inst_id=self.ns_inst_id, + max_cpu='14', + max_ram='12296', + max_hd='101', + max_shd="20", + max_net=10, + status='active', + mnfinstid=nf_uuid, + package_id=package_id, + vnfd_model='{"metadata": {"vnfdId": "1","vnfdName": "PGW001",' + '"vnfProvider": "zte","vnfdVersion": "V00001","vnfVersion": "V5.10.20",' + '"productType": "CN","vnfType": "PGW",' + '"description": "PGW VNFD description",' + '"isShared":true,"vnfExtendType":"driver"}}') @mock.patch.object(NSManualScaleService, 'run') def test_ns_manual_scale(self, mock_run): @@ -50,9 +186,82 @@ class TestNsManualScale(TestCase): }] }] } - response = self.client.post("/api/nslcm/v1/ns/%s/scale" % self.ns_inst_id, data=data) + response = self.client.post( + "/api/nslcm/v1/ns/%s/scale" % + self.ns_inst_id, data=data) self.failUnlessEqual(status.HTTP_202_ACCEPTED, response.status_code) + def test_ns_manual_scale_error_scaletype(self): + data = { + "scaleType": "SCALE_ERR", + "scaleNsData": [{ + "scaleNsByStepsData": [{ + "aspectId": "sss_zte", + "numberOfSteps": 1, + "scalingDirection": "0" + }] + }] + } + NSManualScaleService(self.ns_inst_id, data, self.job_id).run() + jobs = JobModel.objects.filter(jobid=self.job_id) + self.assertEqual(255, jobs[0].progress) + + def test_ns_manual_scale_error_nsd_id(self): + data = { + "scaleType": "SCALE_NS", + "scaleNsData": [{ + "scaleNsByStepsData": [{ + "aspectId": "sss_zte", + "numberOfSteps": 1, + "scalingDirection": "0" + }] + }] + } + NSManualScaleService(self.ns_inst_id, data, self.job_id).run() + jobs = JobModel.objects.filter(jobid=self.job_id) + self.assertEqual(255, jobs[0].progress) + + def test_ns_manual_scale_error_aspect(self): + data = { + "scaleType": "SCALE_NS", + "scaleNsData": [{ + "scaleNsByStepsData": [{ + "aspectId": "sss_zte", + "numberOfSteps": 1, + "scalingDirection": "0" + }] + }] + } + ns_inst_id, job_id = self.insert_new_ns() + job_id = JobUtil.create_job( + "NS", JOB_TYPE.MANUAL_SCALE_VNF, ns_inst_id) + NSManualScaleService(ns_inst_id, data, job_id).run() + jobs = JobModel.objects.filter(jobid=job_id) + self.assertEqual(255, jobs[0].progress) + + @mock.patch.object(catalog, 'get_scalingmap_json_package') + @mock.patch.object(NSManualScaleService, 'do_vnfs_scale') + def test_ns_manual_scale_success(self, mock_do_vnfs_scale, mock_get_scalingmap_json_package): + data = { + "scaleType": "SCALE_NS", + "scaleNsData": [{ + "scaleNsByStepsData": [{ + "aspectId": "TIC_EDGE_IMS", + "numberOfSteps": "1", + "scalingDirection": "0" + }] + }] + } + mock_get_scalingmap_json_package.return_value = self.scaling_map_json + mock_do_vnfs_scale.return_value = JOB_MODEL_STATUS.FINISHED + ns_inst_id, job_id = self.insert_new_ns() + job_id = JobUtil.create_job( + "NS", JOB_TYPE.MANUAL_SCALE_VNF, ns_inst_id) + self.insert_new_nf() + NSManualScaleService(ns_inst_id, data, job_id).run() + jobs = JobModel.objects.filter(jobid=job_id) + self.assertEqual(100, jobs[0].progress) + @mock.patch.object(restcall, 'call_req') def test_ns_manual_scale_thread(self, mock_call): data = { @@ -66,7 +275,10 @@ class TestNsManualScale(TestCase): }] } NSManualScaleService(self.ns_inst_id, data, self.job_id).run() - self.assertTrue(NSInstModel.objects.get(id=self.ns_inst_id).status, NS_INST_STATUS.ACTIVE) + self.assertTrue( + NSInstModel.objects.get( + id=self.ns_inst_id).status, + NS_INST_STATUS.ACTIVE) def test_swagger_ok(self): resp = self.client.get("/api/nslcm/v1/swagger.json", format='json') @@ -75,8 +287,12 @@ class TestNsManualScale(TestCase): @mock.patch.object(NSManualScaleService, 'start') def test_ns_manual_scale_empty_data(self, mock_start): mock_start.side_effect = NSLCMException("NS scale failed.") - response = self.client.post("/api/nslcm/v1/ns/%s/scale" % self.ns_inst_id, data={}) - self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) + response = self.client.post( + "/api/nslcm/v1/ns/%s/scale" % + self.ns_inst_id, data={}) + self.assertEqual( + response.status_code, + status.HTTP_500_INTERNAL_SERVER_ERROR) self.assertIn("error", response.data) @mock.patch.object(NSManualScaleService, 'start') @@ -93,5 +309,7 @@ class TestNsManualScale(TestCase): }] } response = self.client.post("/api/nslcm/v1/ns/11/scale", data=data) - self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) + self.assertEqual( + response.status_code, + status.HTTP_500_INTERNAL_SERVER_ERROR) self.assertIn("error", response.data)