refactor file name
[vfc/nfvo/lcm.git] / lcm / ns / tests / test_scaleaspect.py
index f32d22d..df41be9 100644 (file)
 # Copyright 2016-2018 ZTE Corporation.
 #
-# Licensed under the Apache License, Version 2.0 (the "License");
+# Licensed under the Apache License, Version 2.0 (the 'License');
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
 #         http://www.apache.org/licenses/LICENSE-2.0
 #
 # Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
+# distributed under the License is distributed on an 'AS IS' BASIS,
 # 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 mock
+import os
 
 from django.test import TestCase
-from lcm.ns.scaleaspect import get_json_data
-from lcm.pub.database.models import NfInstModel
-from lcm.pub.database.models import NSInstModel
-from lcm.pub.utils.timeutil import now_time
-import os
+from lcm.pub.database.models import NSInstModel, NfInstModel
+from lcm.ns_vnfs.enum import VNF_STATUS
+from lcm.ns.biz.scale_aspect import mapping_conv, get_vnf_instance_id_list, check_scale_list, get_scale_vnf_data, \
+    get_nsdId, check_and_set_params, get_scale_vnf_data_info_list, get_vnf_scale_info, get_scale_vnf_data_from_json
 
 
 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 = [{
-            "scaleNsByStepsData": [
-                {
-                    "aspectId": self.ns_scale_aspect,
-                    "numberOfSteps": self.ns_scale_steps,
-                    "scalingDirection": self.ns_scale_direction
-                }
-            ]
-        }]
-
-        self.ns_scale_aspect2 = "TIC_EDGE_HW"
-        self.ns_scale_steps2 = "4"
-        self.scaleNsData2 = [{
-            "scaleNsByStepsData": [
-                {
-                    "aspectId": self.ns_scale_aspect2,
-                    "numberOfSteps": self.ns_scale_steps2,
-                    "scalingDirection": self.ns_scale_direction
-                }
-            ]
-        }]
-
-    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 initInstModel(self):
-        self.nsd_id = "23"
-        self.ns_inst_id = "1"
-        self.ns_name = "ns_1"
-        self.ns_package_id = "ns_zte"
-        self.description = "ns_zte"
-        self.global_customer_id = "global_customer_id"
-        self.service_type = "service_role"
-
-        NSInstModel(id=self.ns_inst_id,
-                    name=self.ns_name,
-                    nspackage_id=self.ns_package_id,
-                    nsd_id=self.nsd_id,
-                    description=self.description,
-                    status='empty',
-                    lastuptime=now_time(),
-                    global_customer_id=self.global_customer_id,
-                    service_type=self.service_type).save()
-
-        self.nf_inst_id = "231"
-        self.ns_inst_id = "1"
-        self.nf_name = "name_1"
-        self.vnf_id = "1"
-        self.vnfm_inst_id = "1"
-        self.package_id = "nf_zte_cscf"
-        self.nf_uuid = "abc34-345a-de13-ab85-ijs9"
-
-        NfInstModel.objects.create(
-            nfinstid=self.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=self.nf_uuid,
-            package_id=self.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"}}')
-
-        # Create a second vnf instance
-        self.nf_inst_id = "232"
-        self.package_id = "nf_zte_hss"
-        self.nf_uuid = "abc34-3g5a-de13-ab85-ijs3"
-
-        NfInstModel.objects.create(
-            nfinstid=self.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=self.nf_uuid,
-            package_id=self.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 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 add_new_vnf_instance(self):
-        # Create a third vnf instance
-        nf_inst_id = "241"
-        package_id = "nf_hw_cscf"
-        nf_uuid = "ab34-3g5j-de13-aa85-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"}}')
-
-        # Create a third vnf instance
-        nf_inst_id = "242"
-        package_id = "nf_hw_hss"
-        nf_uuid = "ab34-3g5j-de13-aa85-id93"
-
-        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"}}')
+        pass
 
     def tearDown(self):
-        NSInstModel().clean()
-        NfInstModel().clean()
-
-    '''
-    def test_get_and_check_params(self):
-        aspect, numberOfSteps, scale_type = check_and_set_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)
+        NSInstModel.objects.all().delete()
+        NfInstModel.objects.all().delete()
 
-    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"])
+    def test_mapping_conv(self):
+        keyword_map = {'a': 1, 'b': 2, 'c': 3, 'd': {'d.1': 'd.1'}}
+        rest_return = {'b': 2, 'C': 3}
+        resp_data = mapping_conv(keyword_map, rest_return)
+        self.assertEqual(resp_data, {'a': '', 'b': 2, 'c': 3, 'd': {'d.1': ''}})
 
-    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": "error1",
-                "vnf_scaleAspectId": "mpu",
-                "numberOfSteps": "1"
-            },
-            {
-                "vnfd_id": "nf_zte_hss",
-                "vnf_scaleAspectId": "mpu",
-                "numberOfSteps": "1"
-            }
-        ]
-        result = set_scacle_vnf_instance_id(vnf_scale_info_list)
-        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_get_vnf_instance_id_list_when_no_model(self):
+        self.assertEqual(get_vnf_instance_id_list('package_1'), [])
 
-    def test_set_scacle_vnf_instance_id_3(self):
-        vnf_scale_info_list = [
+    def test_check_scale_list_when_empty_vnf_scale_list(self):
+        try:
+            check_scale_list([], 'ns_instanceId_01', '', '')
+        except Exception as e:
+            self.assertEqual(e.args, ('The scaling option[ns=ns_instanceId_01, aspect=, step=] does not exist. '
+                                      'Pls check the config file.',))
+
+    @mock.patch.object(os.path, 'abspath')
+    def test_get_scale_vnf_data(self, mock_abspath):
+        mock_abspath.return_value = 'lcm/1/2/3.py'
+        scale_ns_data = {'scaleNsByStepsData': {'aspectId': 'TIC_EDGE_IMS', 'numberOfSteps': 1,
+                                                'scalingDirection': 'r'}}
+        ns_instance_id = 'ns_instanceId_01'
+        scale_vnf_data_list = get_scale_vnf_data(scale_ns_data, ns_instance_id)
+        success_list = [
             {
-                "vnfd_id": "error1",
-                "vnf_scaleAspectId": "mpu",
-                "numberOfSteps": "1"
+                'vnfInstanceId': 'nf_zte_cscf',
+                'scaleByStepData': {
+                    'type': 'r',
+                    'aspectId': 'gsu',
+                    'numberOfSteps': '1'
+                }
             },
             {
-                "vnfd_id": "error2",
-                "vnf_scaleAspectId": "gsu",
-                "numberOfSteps": "1"
+                'vnfInstanceId': 'nf_zte_hss',
+                'scaleByStepData': {
+                    'type': 'r',
+                    'aspectId': 'gpu',
+                    'numberOfSteps': '3'
+                }
             }
         ]
-        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.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"])
+        self.assertEqual(scale_vnf_data_list, success_list)
 
-    def test_get_nsdId(self):
-        nsd_id = get_nsdId("1")
-        self.assertEqual("23", nsd_id)
+    def test_get_nsd_id_when_none(self):
+        self.assertEqual(get_nsdId('ns_instance_id_01'), None)
 
-    @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__())
-
-    @mock.patch.object(catalog, 'get_scalingmap_json_package')
-    def test_get_scale_vnf_data_info_list_2(
-            self, mock_get_scalingmap_json_package):
-        mock_get_scalingmap_json_package.return_value = self.scaling_map_json
+    def test_check_and_set_params_when_scale_ns_data_is_none(self):
+        try:
+            check_and_set_params(None, '')
+        except Exception as e:
+            self.assertEqual(e.args, ('Error! scaleNsData in the request is Empty!',))
 
-        scale_vnf_data = None
-        is_exception_caught = False
+    def test_check_and_set_params_when_scale_ns_by_steps_data_is_none(self):
+        scale_ns_data = {'scaleNsByStepsData': None}
         try:
-            scale_vnf_data = get_scale_vnf_data_info_list(
-                self.scaleNsData2, "1")
-        except Exception:
-            is_exception_caught = True
-        self.assertTrue(is_exception_caught)
-        self.assertIsNone(scale_vnf_data)
+            check_and_set_params(scale_ns_data, '')
+        except Exception as e:
+            self.assertEqual(e.args, ('Error! scaleNsByStepsData in the request is Empty!',))
+
+    @mock.patch.object(os.path, 'abspath')
+    def test_get_scale_vnf_data_info_list(self, mock_abspath):
+        NSInstModel(id='ns_instanceId_02', nsd_id='02').save()
+        NfInstModel(package_id='nf_hw_cscf', status=VNF_STATUS.ACTIVE, nfinstid='nfinst_01').save()
+        mock_abspath.return_value = 'lcm/1/2/3.py'
+        scale_ns_data = {
+            'scaleNsByStepsData': {'aspectId': 'TIC_EDGE_HW', 'numberOfSteps': 4, 'scalingDirection': 'r'}}
+        ns_instance_id = 'ns_instanceId_02'
+        scale_vnf_data_info_list = get_scale_vnf_data_info_list(scale_ns_data, ns_instance_id)
+        success_list = [
+            {
+                'vnfInstanceId': 'nfinst_01',
+                'scaleByStepData': {
+                    'type': 'r',
+                    'aspectId': 'gsu',
+                    'numberOfSteps': '1'
+                }
+            }
+        ]
+        self.assertEqual(scale_vnf_data_info_list, success_list)
 
-    @mock.patch.object(catalog, 'get_scalingmap_json_package')
-    def test_get_scale_vnf_data_info_list_3(
-            self, mock_get_scalingmap_json_package):
-        mock_get_scalingmap_json_package.return_value = self.scaling_map_json
-        self.add_new_vnf_instance()
+    def test_get_vnf_scale_info_when_return_none(self):
+        filename = 'lcm/ns/tests/data/scalemapping.json'
+        ns_instance_id = 'ns_instanceId_03'
+        self.assertEqual(get_vnf_scale_info(filename, ns_instance_id, '', ''), None)
 
-        scale_vnf_data = None
-        is_exception_caught = False
-        try:
-            scale_vnf_data = get_scale_vnf_data_info_list(
-                self.scaleNsData2, "1")
-        except Exception:
-            is_exception_caught = True
-        self.assertFalse(is_exception_caught)
-        self.assertEqual(2, scale_vnf_data.__len__())
-    '''
+    def test_get_scale_vnf_data_from_json_when_return_none(self):
+        self.assertEqual(get_scale_vnf_data_from_json({}, '', '', ''), None)