Add new test case and fix a bug
[vfc/nfvo/lcm.git] / lcm / pub / tests / test_scaleaspect.py
1 from django.test import TestCase
2 from lcm.pub.utils.scaleaspect import get_json_data
3 from lcm.pub.utils.scaleaspect import get_nsdId
4 from lcm.pub.utils.scaleaspect import get_scale_vnf_data_from_json
5 from lcm.pub.utils.scaleaspect import get_scale_vnf_data_info_list
6 from lcm.pub.utils.scaleaspect import set_scacle_vnf_instance_id
7 from lcm.pub.utils.scaleaspect import get_and_check_params
8 from lcm.pub.utils.scaleaspect import set_scaleVnfData_type
9 from lcm.pub.database.models import NfInstModel
10 from lcm.pub.database.models import NSInstModel
11 from lcm.pub.msapi import catalog
12 from lcm.pub.utils.timeutil import now_time
13 import os
14 import mock
15
16
17 class TestScaleAspect(TestCase):
18
19     def setUp(self):
20         self.init_scaling_map_json()
21         self.initInstModel()
22
23         self.init_scale_ns_data()
24
25         self.vnf_scale_info_list = [
26             {
27                 "vnfd_id": "nf_zte_cscf",
28                 "vnf_scaleAspectId": "mpu",
29                 "numberOfSteps": "1"
30             },
31             {
32                 "vnfd_id": "nf_zte_hss",
33                 "vnf_scaleAspectId": "gsu",
34                 "numberOfSteps": "2"
35             }
36         ]
37
38     def init_scale_ns_data(self):
39         self.ns_scale_aspect = "TIC_EDGE_IMS"
40         self.ns_scale_steps = "1"
41         self.ns_scale_direction = "SCALE_IN"
42         self.scaleNsData = {
43             "aspectId": self.ns_scale_aspect,
44             "numberOfSteps": self.ns_scale_steps,
45             "scalingDirection": self.ns_scale_direction
46         }
47
48     def init_scaling_map_json(self):
49         curdir_path = os.path.dirname(
50             os.path.dirname(
51                 os.path.dirname(
52                     os.path.abspath(__file__))))
53         filename = curdir_path + "/ns/data/scalemapping.json"
54         self.scaling_map_json = get_json_data(filename)
55
56     def initInstModel(self):
57         self.nsd_id = "23"
58         self.ns_inst_id = "1"
59         self.ns_name = "ns_1"
60         self.ns_package_id = "ns_zte"
61         self.description = "ns_zte"
62         self.global_customer_id = "global_customer_id"
63         self.service_type = "service_role"
64
65         NSInstModel(id=self.ns_inst_id,
66                     name=self.ns_name,
67                     nspackage_id=self.ns_package_id,
68                     nsd_id=self.nsd_id,
69                     description=self.description,
70                     status='empty',
71                     lastuptime=now_time(),
72                     global_customer_id=self.global_customer_id,
73                     service_type=self.service_type).save()
74
75         self.nf_inst_id = "231"
76         self.ns_inst_id = "1"
77         self.nf_name = "name_1"
78         self.vnf_id = "1"
79         self.vnfm_inst_id = "1"
80         self.package_id = "nf_zte_cscf"
81         self.nf_uuid = "abc34-345a-de13-ab85-ijs9"
82
83         NfInstModel.objects.create(
84             nfinstid=self.nf_inst_id,
85             nf_name=self.nf_name,
86             vnf_id=self.vnf_id,
87             vnfm_inst_id=self.vnfm_inst_id,
88             ns_inst_id=self.ns_inst_id,
89             max_cpu='14',
90             max_ram='12296',
91             max_hd='101',
92             max_shd="20",
93             max_net=10,
94             status='active',
95             mnfinstid=self.nf_uuid,
96             package_id=self.package_id,
97             vnfd_model='{"metadata": {"vnfdId": "1","vnfdName": "PGW001",'
98             '"vnfProvider": "zte","vnfdVersion": "V00001","vnfVersion": "V5.10.20",'
99             '"productType": "CN","vnfType": "PGW",'
100             '"description": "PGW VNFD description",'
101             '"isShared":true,"vnfExtendType":"driver"}}')
102
103         # Create a second vnf instance
104         self.nf_inst_id = "232"
105         self.package_id = "nf_zte_hss"
106         self.nf_uuid = "abc34-3g5a-de13-ab85-ijs3"
107
108         NfInstModel.objects.create(
109             nfinstid=self.nf_inst_id,
110             nf_name=self.nf_name,
111             vnf_id=self.vnf_id,
112             vnfm_inst_id=self.vnfm_inst_id,
113             ns_inst_id=self.ns_inst_id,
114             max_cpu='14',
115             max_ram='12296',
116             max_hd='101',
117             max_shd="20",
118             max_net=10,
119             status='active',
120             mnfinstid=self.nf_uuid,
121             package_id=self.package_id,
122             vnfd_model='{"metadata": {"vnfdId": "1","vnfdName": "PGW001",'
123                        '"vnfProvider": "zte","vnfdVersion": "V00001","vnfVersion": "V5.10.20",'
124                        '"productType": "CN","vnfType": "PGW",'
125                        '"description": "PGW VNFD description",'
126                        '"isShared":true,"vnfExtendType":"driver"}}')
127
128     def add_another_nf_instance(self):
129         # Create a third vnf instance
130         nf_inst_id = "233"
131         package_id = "nf_zte_hss"
132         nf_uuid = "ab34-3g5j-de13-ab85-ij93"
133
134         NfInstModel.objects.create(
135             nfinstid=nf_inst_id,
136             nf_name=self.nf_name,
137             vnf_id=self.vnf_id,
138             vnfm_inst_id=self.vnfm_inst_id,
139             ns_inst_id=self.ns_inst_id,
140             max_cpu='14',
141             max_ram='12296',
142             max_hd='101',
143             max_shd="20",
144             max_net=10,
145             status='active',
146             mnfinstid=nf_uuid,
147             package_id=package_id,
148             vnfd_model='{"metadata": {"vnfdId": "1","vnfdName": "PGW001",'
149                        '"vnfProvider": "zte","vnfdVersion": "V00001","vnfVersion": "V5.10.20",'
150                        '"productType": "CN","vnfType": "PGW",'
151                        '"description": "PGW VNFD description",'
152                        '"isShared":true,"vnfExtendType":"driver"}}')
153
154     def tearDown(self):
155         NSInstModel().clean()
156         NfInstModel().clean()
157
158     def test_get_and_check_params(self):
159         aspect, numberOfSteps, scale_type = get_and_check_params(self.scaleNsData, "1")
160         self.assertEqual(aspect, self.ns_scale_aspect)
161         self.assertEqual(numberOfSteps, self.ns_scale_steps)
162         self.assertEqual(scale_type, self.ns_scale_direction)
163
164     def test_get_scale_vnf_data_from_json(self):
165         vnf_data_package = get_scale_vnf_data_from_json(
166             self.scaling_map_json, "23", "TIC_EDGE_IMS", "1")
167         self.assertIsNotNone(vnf_data_package)
168         self.assertEqual(2, vnf_data_package.__len__())
169
170     @mock.patch.object(catalog, 'get_scalingmap_json_package')
171     def test_get_scale_vnf_data_info_list(
172             self, mock_get_scalingmap_json_package):
173         mock_get_scalingmap_json_package.return_value = self.scaling_map_json
174
175         scale_vnf_data = get_scale_vnf_data_info_list(self.scaleNsData, "1")
176         self.assertIsNotNone(scale_vnf_data)
177         self.assertEqual(2, scale_vnf_data.__len__())
178
179     def test_set_scacle_vnf_instance_id(self):
180
181         result = set_scacle_vnf_instance_id(self.vnf_scale_info_list)
182         self.assertEqual(2, result.__len__())
183         self.assertEqual(result[0]["numberOfSteps"], self.vnf_scale_info_list[0]["numberOfSteps"])
184         self.assertEqual(result[0]["vnf_scaleAspectId"], self.vnf_scale_info_list[0]["vnf_scaleAspectId"])
185         self.assertEqual(result[1]["numberOfSteps"], self.vnf_scale_info_list[1]["numberOfSteps"])
186         self.assertEqual(result[1]["vnf_scaleAspectId"], self.vnf_scale_info_list[1]["vnf_scaleAspectId"])
187         self.assertEqual("231", result[0]["vnfInstanceId"])
188         self.assertEqual("232", result[1]["vnfInstanceId"])
189         self.assertNotIn("vnfd_id", result[0])
190         self.assertNotIn("vnfd_id", result[1])
191
192     def test_set_scacle_vnf_instance_id_2(self):
193         self.vnf_scale_info_list = [
194             {
195                 "vnfd_id": "error1",
196                 "vnf_scaleAspectId": "mpu",
197                 "numberOfSteps": "1"
198             },
199             {
200                 "vnfd_id": "nf_zte_hss",
201                 "vnf_scaleAspectId": "mpu",
202                 "numberOfSteps": "1"
203             }
204         ]
205         result = set_scacle_vnf_instance_id(self.vnf_scale_info_list)
206         self.assertEqual(1, result.__len__())
207         self.assertEqual(result[0]["numberOfSteps"], self.vnf_scale_info_list[0]["numberOfSteps"])
208         self.assertEqual(result[0]["vnf_scaleAspectId"], self.vnf_scale_info_list[0]["vnf_scaleAspectId"])
209         self.assertEqual("232", result[0]["vnfInstanceId"])
210         self.assertNotIn("vnfd_id", result[0])
211
212     def test_set_scacle_vnf_instance_id_3(self):
213         self.vnf_scale_info_list = [
214             {
215                 "vnfd_id": "error1",
216                 "vnf_scaleAspectId": "mpu",
217                 "numberOfSteps": "1"
218             },
219             {
220                 "vnfd_id": "error2",
221                 "vnf_scaleAspectId": "gsu",
222                 "numberOfSteps": "1"
223             }
224         ]
225         result = set_scacle_vnf_instance_id(self.vnf_scale_info_list)
226         self.assertEqual(0, result.__len__())
227
228     def test_set_scacle_vnf_instance_id_4(self):
229         self.add_another_nf_instance()
230         result = set_scacle_vnf_instance_id(self.vnf_scale_info_list)
231         self.assertEqual(3, result.__len__())
232         self.assertEqual("231", result[0]["vnfInstanceId"])
233         self.assertEqual("232", result[1]["vnfInstanceId"])
234         self.assertEqual("233", result[2]["vnfInstanceId"])
235
236     def test_set_scaleVnfData_type(self):
237         vnf_scale_list = set_scacle_vnf_instance_id(self.vnf_scale_info_list)
238         result = set_scaleVnfData_type(vnf_scale_list, self.ns_scale_direction)
239         self.assertEqual(2, result.__len__())
240
241         self.assertNotIn("scaleByStepData", result)
242
243         self.assertEqual(self.ns_scale_direction, result[0]["scaleByStepData"]["type"])
244         self.assertEqual("mpu", result[0]["scaleByStepData"]["aspectId"])
245         self.assertNotIn("vnf_scaleAspectId", result[0]["scaleByStepData"])
246         self.assertEqual("1", result[0]["scaleByStepData"]["numberOfSteps"])
247
248         self.assertEqual(self.ns_scale_direction, result[1]["scaleByStepData"]["type"])
249         self.assertEqual("gsu", result[1]["scaleByStepData"]["aspectId"])
250         self.assertNotIn("vnf_scaleAspectId", result[1]["scaleByStepData"])
251         self.assertEqual("2", result[1]["scaleByStepData"]["numberOfSteps"])
252
253     def test_get_nsdId(self):
254         nsd_id = get_nsdId("1")
255         self.assertEqual("23", nsd_id)