diff options
-rw-r--r-- | lcm/ns/data/scalemapping.json | 8 | ||||
-rw-r--r-- | lcm/pub/tests/test_scaleaspect.py | 183 | ||||
-rw-r--r-- | lcm/pub/utils/scaleaspect.py | 25 |
3 files changed, 175 insertions, 41 deletions
diff --git a/lcm/ns/data/scalemapping.json b/lcm/ns/data/scalemapping.json index 7b6765dd..3391595e 100644 --- a/lcm/ns/data/scalemapping.json +++ b/lcm/ns/data/scalemapping.json @@ -9,13 +9,13 @@ "vnf_scale_info":[ { "vnfd_id":"nf_zte_cscf", - "vnf_scaleAspectId": "gpu", + "vnf_scaleAspectId": "gsu", "numberOfSteps": "1" }, { "vnfd_id":"nf_zte_hss", "vnf_scaleAspectId": "gpu", - "numberOfSteps": "1" + "numberOfSteps": "3" } ] }, @@ -25,12 +25,12 @@ { "vnfd_id":"nf_zte_cscf", "vnf_scaleAspectId": "mpu", - "numberOfSteps": "1" + "numberOfSteps": "2" }, { "vnfd_id":"nf_zte_hss", "vnf_scaleAspectId": "mpu", - "numberOfSteps": "1" + "numberOfSteps": "4" } ] } diff --git a/lcm/pub/tests/test_scaleaspect.py b/lcm/pub/tests/test_scaleaspect.py index 7cfe3be6..5bab9dab 100644 --- a/lcm/pub/tests/test_scaleaspect.py +++ b/lcm/pub/tests/test_scaleaspect.py @@ -4,6 +4,8 @@ from lcm.pub.utils.scaleaspect import get_nsdId from lcm.pub.utils.scaleaspect import get_scale_vnf_data_from_json from lcm.pub.utils.scaleaspect import get_scale_vnf_data_info_list from lcm.pub.utils.scaleaspect import set_scacle_vnf_instance_id +from lcm.pub.utils.scaleaspect import get_and_check_params +from lcm.pub.utils.scaleaspect import set_scaleVnfData_type from lcm.pub.database.models import NfInstModel from lcm.pub.database.models import NSInstModel from lcm.pub.msapi import catalog @@ -15,6 +17,35 @@ import mock class TestScaleAspect(TestCase): def setUp(self): + self.init_scaling_map_json() + self.initInstModel() + + self.init_scale_ns_data() + + self.vnf_scale_info_list = [ + { + "vnfd_id": "nf_zte_cscf", + "vnf_scaleAspectId": "mpu", + "numberOfSteps": "1" + }, + { + "vnfd_id": "nf_zte_hss", + "vnf_scaleAspectId": "gsu", + "numberOfSteps": "2" + } + ] + + def init_scale_ns_data(self): + self.ns_scale_aspect = "TIC_EDGE_IMS" + self.ns_scale_steps = "1" + self.ns_scale_direction = "SCALE_IN" + self.scaleNsData = { + "aspectId": self.ns_scale_aspect, + "numberOfSteps": self.ns_scale_steps, + "scalingDirection": self.ns_scale_direction + } + + def init_scaling_map_json(self): curdir_path = os.path.dirname( os.path.dirname( os.path.dirname( @@ -22,14 +53,6 @@ class TestScaleAspect(TestCase): filename = curdir_path + "/ns/data/scalemapping.json" self.scaling_map_json = get_json_data(filename) - self.initInstModel() - - self.scaleNsData = { - "aspectId": "TIC_EDGE_IMS", - "numberOfSteps": "1", - "scalingDirection": "UP" - } - def initInstModel(self): self.nsd_id = "23" self.ns_inst_id = "1" @@ -102,29 +125,91 @@ class TestScaleAspect(TestCase): '"description": "PGW VNFD description",' '"isShared":true,"vnfExtendType":"driver"}}') + def add_another_nf_instance(self): + # Create a third vnf instance + 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"}}') + def tearDown(self): NSInstModel().clean() NfInstModel().clean() + def test_get_and_check_params(self): + aspect, numberOfSteps, scale_type = get_and_check_params( + self.scaleNsData, "1") + self.assertEqual(aspect, self.ns_scale_aspect) + self.assertEqual(numberOfSteps, self.ns_scale_steps) + self.assertEqual(scale_type, self.ns_scale_direction) + def test_get_scale_vnf_data_from_json(self): vnf_data_package = get_scale_vnf_data_from_json( self.scaling_map_json, "23", "TIC_EDGE_IMS", "1") self.assertIsNotNone(vnf_data_package) self.assertEqual(2, vnf_data_package.__len__()) + self.assertIsNotNone(vnf_data_package) + self.assertEqual(2, vnf_data_package.__len__()) + self.assertEqual("nf_zte_cscf", vnf_data_package[0]["vnfd_id"]) + self.assertEqual("1", vnf_data_package[0]["numberOfSteps"]) + self.assertEqual("gsu", vnf_data_package[0]["vnf_scaleAspectId"]) + self.assertEqual("nf_zte_hss", vnf_data_package[1]["vnfd_id"]) + self.assertEqual("3", vnf_data_package[1]["numberOfSteps"]) + self.assertEqual("gpu", vnf_data_package[1]["vnf_scaleAspectId"]) - @mock.patch.object(catalog, 'get_scalingmap_json_package') - def test_get_scale_vnf_data_info_list( - self, mock_get_scalingmap_json_package): - mock_get_scalingmap_json_package.return_value = self.scaling_map_json - - scale_vnf_data = get_scale_vnf_data_info_list(self.scaleNsData, "1") - self.assertIsNotNone(scale_vnf_data) - self.assertEqual(2, scale_vnf_data.__len__()) + def test_get_scale_vnf_data_from_json_2(self): + vnf_data_package = get_scale_vnf_data_from_json( + self.scaling_map_json, "23", "TIC_EDGE_IMS", "2") + self.assertIsNotNone(vnf_data_package) + self.assertEqual(2, vnf_data_package.__len__()) + self.assertEqual("nf_zte_cscf", vnf_data_package[0]["vnfd_id"]) + self.assertEqual("2", vnf_data_package[0]["numberOfSteps"]) + self.assertEqual("mpu", vnf_data_package[0]["vnf_scaleAspectId"]) + self.assertEqual("nf_zte_hss", vnf_data_package[1]["vnfd_id"]) + self.assertEqual("4", vnf_data_package[1]["numberOfSteps"]) + self.assertEqual("mpu", vnf_data_package[1]["vnf_scaleAspectId"]) def test_set_scacle_vnf_instance_id(self): + result = set_scacle_vnf_instance_id(self.vnf_scale_info_list) + self.assertEqual(2, result.__len__()) + self.assertEqual(result[0]["numberOfSteps"], + self.vnf_scale_info_list[0]["numberOfSteps"]) + self.assertEqual( + result[0]["vnf_scaleAspectId"], + self.vnf_scale_info_list[0]["vnf_scaleAspectId"]) + self.assertEqual(result[1]["numberOfSteps"], + self.vnf_scale_info_list[1]["numberOfSteps"]) + self.assertEqual( + result[1]["vnf_scaleAspectId"], + self.vnf_scale_info_list[1]["vnf_scaleAspectId"]) + self.assertEqual("231", result[0]["vnfInstanceId"]) + self.assertEqual("232", result[1]["vnfInstanceId"]) + self.assertNotIn("vnfd_id", result[0]) + self.assertNotIn("vnfd_id", result[1]) + + def test_set_scacle_vnf_instance_id_2(self): vnf_scale_info_list = [ { - "vnfd_id": "nf_zte_cscf", + "vnfd_id": "error1", "vnf_scaleAspectId": "mpu", "numberOfSteps": "1" }, @@ -135,15 +220,67 @@ class TestScaleAspect(TestCase): } ] result = set_scacle_vnf_instance_id(vnf_scale_info_list) - self.assertEqual(result[0]["numberOfSteps"], vnf_scale_info_list[0]["numberOfSteps"]) - self.assertEqual(result[0]["vnf_scaleAspectId"], vnf_scale_info_list[0]["vnf_scaleAspectId"]) - self.assertEqual(result[1]["numberOfSteps"], vnf_scale_info_list[0]["numberOfSteps"]) - self.assertEqual(result[1]["vnf_scaleAspectId"], vnf_scale_info_list[0]["vnf_scaleAspectId"]) + self.assertEqual(1, result.__len__()) + self.assertEqual( + result[0]["numberOfSteps"], + vnf_scale_info_list[0]["numberOfSteps"]) + self.assertEqual( + result[0]["vnf_scaleAspectId"], + vnf_scale_info_list[0]["vnf_scaleAspectId"]) + self.assertEqual("232", result[0]["vnfInstanceId"]) + self.assertNotIn("vnfd_id", result[0]) + + def test_set_scacle_vnf_instance_id_3(self): + vnf_scale_info_list = [ + { + "vnfd_id": "error1", + "vnf_scaleAspectId": "mpu", + "numberOfSteps": "1" + }, + { + "vnfd_id": "error2", + "vnf_scaleAspectId": "gsu", + "numberOfSteps": "1" + } + ] + result = set_scacle_vnf_instance_id(vnf_scale_info_list) + self.assertEqual(0, result.__len__()) + + def test_set_scacle_vnf_instance_id_4(self): + self.add_another_nf_instance() + result = set_scacle_vnf_instance_id(self.vnf_scale_info_list) + self.assertEqual(3, result.__len__()) self.assertEqual("231", result[0]["vnfInstanceId"]) self.assertEqual("232", result[1]["vnfInstanceId"]) - self.assertNotIn("vnfd_id", result[0]) - self.assertNotIn("vnfd_id", result[1]) + self.assertEqual("233", result[2]["vnfInstanceId"]) + + def test_set_scaleVnfData_type(self): + vnf_scale_list = set_scacle_vnf_instance_id(self.vnf_scale_info_list) + result = set_scaleVnfData_type(vnf_scale_list, self.ns_scale_direction) + self.assertEqual(2, result.__len__()) + self.assertNotIn("scaleByStepData", result) + self.assertEqual( + self.ns_scale_direction, + result[0]["scaleByStepData"]["type"]) + self.assertEqual("mpu", result[0]["scaleByStepData"]["aspectId"]) + self.assertNotIn("vnf_scaleAspectId", result[0]["scaleByStepData"]) + self.assertEqual("1", result[0]["scaleByStepData"]["numberOfSteps"]) + self.assertEqual( + self.ns_scale_direction, + result[1]["scaleByStepData"]["type"]) + self.assertEqual("gsu", result[1]["scaleByStepData"]["aspectId"]) + self.assertNotIn("vnf_scaleAspectId", result[1]["scaleByStepData"]) + self.assertEqual("2", result[1]["scaleByStepData"]["numberOfSteps"]) def test_get_nsdId(self): nsd_id = get_nsdId("1") self.assertEqual("23", nsd_id) + + @mock.patch.object(catalog, 'get_scalingmap_json_package') + def test_get_scale_vnf_data_info_list( + self, mock_get_scalingmap_json_package): + mock_get_scalingmap_json_package.return_value = self.scaling_map_json + + scale_vnf_data = get_scale_vnf_data_info_list(self.scaleNsData, "1") + self.assertIsNotNone(scale_vnf_data) + self.assertEqual(2, scale_vnf_data.__len__()) diff --git a/lcm/pub/utils/scaleaspect.py b/lcm/pub/utils/scaleaspect.py index e642ab01..ff65f702 100644 --- a/lcm/pub/utils/scaleaspect.py +++ b/lcm/pub/utils/scaleaspect.py @@ -85,8 +85,12 @@ def get_vnf_instance_id_list(vnfd_id): nf_model_list = NfInstModel.objects.filter(**kwargs) vnf_instance_id_list = list() - for i in range(nf_model_list.__len__()): - vnf_instance_id_list.append(nf_model_list[i].nfinstid) + nf_model_len = nf_model_list.__len__() + if nf_model_len == 0: + logger.error("No VNF instances found(vnfd_id=%s)" % vnfd_id) + else: + for i in range(nf_model_len): + vnf_instance_id_list.append(nf_model_list[i].nfinstid) return vnf_instance_id_list @@ -111,10 +115,6 @@ def check_scale_list(vnf_scale_list, ns_instanceId, aspect, step): return vnf_scale_list -def get_vnfInstanceIdByName(name): - return name - - def get_scale_vnf_data_list(filename, ns_instanceId, aspect, step, scale_type): vnf_scale_list = get_vnf_scale_info(filename, ns_instanceId, aspect, step) @@ -123,9 +123,6 @@ def get_scale_vnf_data_list(filename, ns_instanceId, aspect, step, scale_type): logger.debug("scaleVnfDataList = %s" % scaleVnfDataList) return scaleVnfDataList - # return Response(data={'error': e.message},status=status.HTTP_204_NO_CONTENT) - # return Response(data={'success': 'success'},status=status.HTTP_200_OK) - # Get the nsd id according to the ns instance id. def get_nsdId(ns_instanceId): @@ -209,6 +206,7 @@ def get_scale_vnf_data_from_json(scalingmap_json, nsd_id, aspect, step): return vnf_scale_info_list + logger.error("get_scale_vnf_data_from_json method retuan null") return None @@ -219,10 +217,10 @@ def set_scacle_vnf_instance_id(vnf_scale_info_list): vnf_scale_info = vnf_scale_info_list[i] vnfd_id = vnf_scale_info["vnfd_id"] vnf_instance_id_list = get_vnf_instance_id_list(vnfd_id) - copy_vnf_scale_info = copy.deepcopy(vnf_scale_info) - copy_vnf_scale_info.pop("vnfd_id") index = 0 while index < vnf_instance_id_list.__len__(): + copy_vnf_scale_info = copy.deepcopy(vnf_scale_info) + copy_vnf_scale_info.pop("vnfd_id") copy_vnf_scale_info["vnfInstanceId"] = vnf_instance_id_list[index] index += 1 scale_vnf_data_info_list.append(copy_vnf_scale_info) @@ -238,9 +236,8 @@ def set_scaleVnfData_type(vnf_scale_list, scale_type): scaleVnfDataList = [] if vnf_scale_list is not None: for i in range(vnf_scale_list.__len__()): - scaleVnfData = scale_vnf_data_mapping - scaleVnfData["vnfInstanceId"] = get_vnfInstanceIdByName( - vnf_scale_list[i]["vnfInstanceId"]) + scaleVnfData = copy.deepcopy(scale_vnf_data_mapping) + scaleVnfData["vnfInstanceId"] = vnf_scale_list[i]["vnfInstanceId"] scaleVnfData["scaleByStepData"]["type"] = scale_type scaleVnfData["scaleByStepData"]["aspectId"] = vnf_scale_list[i]["vnf_scaleAspectId"] scaleVnfData["scaleByStepData"]["numberOfSteps"] = vnf_scale_list[i]["numberOfSteps"] |