Refactor codes for vfc-nfvo-lcm
[vfc/nfvo/lcm.git] / lcm / pub / tests / test_scaleaspect.py
1 # Copyright 2016-2018 ZTE Corporation.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #         http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 from django.test import TestCase
16 from lcm.pub.utils.scaleaspect import get_json_data
17 from lcm.pub.database.models import NfInstModel
18 from lcm.pub.database.models import NSInstModel
19 from lcm.pub.utils.timeutil import now_time
20 import os
21
22
23 class TestScaleAspect(TestCase):
24
25     def setUp(self):
26         self.init_scaling_map_json()
27         self.initInstModel()
28
29         self.init_scale_ns_data()
30
31         self.vnf_scale_info_list = [
32             {
33                 "vnfd_id": "nf_zte_cscf",
34                 "vnf_scaleAspectId": "mpu",
35                 "numberOfSteps": "1"
36             },
37             {
38                 "vnfd_id": "nf_zte_hss",
39                 "vnf_scaleAspectId": "gsu",
40                 "numberOfSteps": "2"
41             }
42         ]
43
44     def init_scale_ns_data(self):
45         self.ns_scale_aspect = "TIC_EDGE_IMS"
46         self.ns_scale_steps = "1"
47         self.ns_scale_direction = "SCALE_IN"
48         self.scaleNsData = [{
49             "scaleNsByStepsData": [
50                 {
51                     "aspectId": self.ns_scale_aspect,
52                     "numberOfSteps": self.ns_scale_steps,
53                     "scalingDirection": self.ns_scale_direction
54                 }
55             ]
56         }]
57
58         self.ns_scale_aspect2 = "TIC_EDGE_HW"
59         self.ns_scale_steps2 = "4"
60         self.scaleNsData2 = [{
61             "scaleNsByStepsData": [
62                 {
63                     "aspectId": self.ns_scale_aspect2,
64                     "numberOfSteps": self.ns_scale_steps2,
65                     "scalingDirection": self.ns_scale_direction
66                 }
67             ]
68         }]
69
70     def init_scaling_map_json(self):
71         curdir_path = os.path.dirname(
72             os.path.dirname(
73                 os.path.dirname(
74                     os.path.abspath(__file__))))
75         filename = curdir_path + "/ns/data/scalemapping.json"
76         self.scaling_map_json = get_json_data(filename)
77
78     def initInstModel(self):
79         self.nsd_id = "23"
80         self.ns_inst_id = "1"
81         self.ns_name = "ns_1"
82         self.ns_package_id = "ns_zte"
83         self.description = "ns_zte"
84         self.global_customer_id = "global_customer_id"
85         self.service_type = "service_role"
86
87         NSInstModel(id=self.ns_inst_id,
88                     name=self.ns_name,
89                     nspackage_id=self.ns_package_id,
90                     nsd_id=self.nsd_id,
91                     description=self.description,
92                     status='empty',
93                     lastuptime=now_time(),
94                     global_customer_id=self.global_customer_id,
95                     service_type=self.service_type).save()
96
97         self.nf_inst_id = "231"
98         self.ns_inst_id = "1"
99         self.nf_name = "name_1"
100         self.vnf_id = "1"
101         self.vnfm_inst_id = "1"
102         self.package_id = "nf_zte_cscf"
103         self.nf_uuid = "abc34-345a-de13-ab85-ijs9"
104
105         NfInstModel.objects.create(
106             nfinstid=self.nf_inst_id,
107             nf_name=self.nf_name,
108             vnf_id=self.vnf_id,
109             vnfm_inst_id=self.vnfm_inst_id,
110             ns_inst_id=self.ns_inst_id,
111             max_cpu='14',
112             max_ram='12296',
113             max_hd='101',
114             max_shd="20",
115             max_net=10,
116             status='active',
117             mnfinstid=self.nf_uuid,
118             package_id=self.package_id,
119             vnfd_model='{"metadata": {"vnfdId": "1","vnfdName": "PGW001",'
120             '"vnfProvider": "zte","vnfdVersion": "V00001","vnfVersion": "V5.10.20",'
121             '"productType": "CN","vnfType": "PGW",'
122             '"description": "PGW VNFD description",'
123             '"isShared":true,"vnfExtendType":"driver"}}')
124
125         # Create a second vnf instance
126         self.nf_inst_id = "232"
127         self.package_id = "nf_zte_hss"
128         self.nf_uuid = "abc34-3g5a-de13-ab85-ijs3"
129
130         NfInstModel.objects.create(
131             nfinstid=self.nf_inst_id,
132             nf_name=self.nf_name,
133             vnf_id=self.vnf_id,
134             vnfm_inst_id=self.vnfm_inst_id,
135             ns_inst_id=self.ns_inst_id,
136             max_cpu='14',
137             max_ram='12296',
138             max_hd='101',
139             max_shd="20",
140             max_net=10,
141             status='active',
142             mnfinstid=self.nf_uuid,
143             package_id=self.package_id,
144             vnfd_model='{"metadata": {"vnfdId": "1","vnfdName": "PGW001",'
145                        '"vnfProvider": "zte","vnfdVersion": "V00001","vnfVersion": "V5.10.20",'
146                        '"productType": "CN","vnfType": "PGW",'
147                        '"description": "PGW VNFD description",'
148                        '"isShared":true,"vnfExtendType":"driver"}}')
149
150     def add_another_nf_instance(self):
151         # Create a third vnf instance
152         nf_inst_id = "233"
153         package_id = "nf_zte_hss"
154         nf_uuid = "ab34-3g5j-de13-ab85-ij93"
155
156         NfInstModel.objects.create(
157             nfinstid=nf_inst_id,
158             nf_name=self.nf_name,
159             vnf_id=self.vnf_id,
160             vnfm_inst_id=self.vnfm_inst_id,
161             ns_inst_id=self.ns_inst_id,
162             max_cpu='14',
163             max_ram='12296',
164             max_hd='101',
165             max_shd="20",
166             max_net=10,
167             status='active',
168             mnfinstid=nf_uuid,
169             package_id=package_id,
170             vnfd_model='{"metadata": {"vnfdId": "1","vnfdName": "PGW001",'
171                        '"vnfProvider": "zte","vnfdVersion": "V00001","vnfVersion": "V5.10.20",'
172                        '"productType": "CN","vnfType": "PGW",'
173                        '"description": "PGW VNFD description",'
174                        '"isShared":true,"vnfExtendType":"driver"}}')
175
176     def add_new_vnf_instance(self):
177         # Create a third vnf instance
178         nf_inst_id = "241"
179         package_id = "nf_hw_cscf"
180         nf_uuid = "ab34-3g5j-de13-aa85-ij93"
181
182         NfInstModel.objects.create(
183             nfinstid=nf_inst_id,
184             nf_name=self.nf_name,
185             vnf_id=self.vnf_id,
186             vnfm_inst_id=self.vnfm_inst_id,
187             ns_inst_id=self.ns_inst_id,
188             max_cpu='14',
189             max_ram='12296',
190             max_hd='101',
191             max_shd="20",
192             max_net=10,
193             status='active',
194             mnfinstid=nf_uuid,
195             package_id=package_id,
196             vnfd_model='{"metadata": {"vnfdId": "1","vnfdName": "PGW001",'
197                        '"vnfProvider": "zte","vnfdVersion": "V00001","vnfVersion": "V5.10.20",'
198                        '"productType": "CN","vnfType": "PGW",'
199                        '"description": "PGW VNFD description",'
200                        '"isShared":true,"vnfExtendType":"driver"}}')
201
202         # Create a third vnf instance
203         nf_inst_id = "242"
204         package_id = "nf_hw_hss"
205         nf_uuid = "ab34-3g5j-de13-aa85-id93"
206
207         NfInstModel.objects.create(
208             nfinstid=nf_inst_id,
209             nf_name=self.nf_name,
210             vnf_id=self.vnf_id,
211             vnfm_inst_id=self.vnfm_inst_id,
212             ns_inst_id=self.ns_inst_id,
213             max_cpu='14',
214             max_ram='12296',
215             max_hd='101',
216             max_shd="20",
217             max_net=10,
218             status='active',
219             mnfinstid=nf_uuid,
220             package_id=package_id,
221             vnfd_model='{"metadata": {"vnfdId": "1","vnfdName": "PGW001",'
222                        '"vnfProvider": "zte","vnfdVersion": "V00001","vnfVersion": "V5.10.20",'
223                        '"productType": "CN","vnfType": "PGW",'
224                        '"description": "PGW VNFD description",'
225                        '"isShared":true,"vnfExtendType":"driver"}}')
226
227     def tearDown(self):
228         NSInstModel().clean()
229         NfInstModel().clean()
230
231     '''
232     def test_get_and_check_params(self):
233         aspect, numberOfSteps, scale_type = check_and_set_params(
234             self.scaleNsData, "1")
235         self.assertEqual(aspect, self.ns_scale_aspect)
236         self.assertEqual(numberOfSteps, self.ns_scale_steps)
237         self.assertEqual(scale_type, self.ns_scale_direction)
238
239     def test_get_scale_vnf_data_from_json(self):
240         vnf_data_package = get_scale_vnf_data_from_json(
241             self.scaling_map_json, "23", "TIC_EDGE_IMS", "1")
242         self.assertIsNotNone(vnf_data_package)
243         self.assertEqual(2, vnf_data_package.__len__())
244         self.assertIsNotNone(vnf_data_package)
245         self.assertEqual(2, vnf_data_package.__len__())
246         self.assertEqual("nf_zte_cscf", vnf_data_package[0]["vnfd_id"])
247         self.assertEqual("1", vnf_data_package[0]["numberOfSteps"])
248         self.assertEqual("gsu", vnf_data_package[0]["vnf_scaleAspectId"])
249         self.assertEqual("nf_zte_hss", vnf_data_package[1]["vnfd_id"])
250         self.assertEqual("3", vnf_data_package[1]["numberOfSteps"])
251         self.assertEqual("gpu", vnf_data_package[1]["vnf_scaleAspectId"])
252
253     def test_get_scale_vnf_data_from_json_2(self):
254         vnf_data_package = get_scale_vnf_data_from_json(
255             self.scaling_map_json, "23", "TIC_EDGE_IMS", "2")
256         self.assertIsNotNone(vnf_data_package)
257         self.assertEqual(2, vnf_data_package.__len__())
258         self.assertEqual("nf_zte_cscf", vnf_data_package[0]["vnfd_id"])
259         self.assertEqual("2", vnf_data_package[0]["numberOfSteps"])
260         self.assertEqual("mpu", vnf_data_package[0]["vnf_scaleAspectId"])
261         self.assertEqual("nf_zte_hss", vnf_data_package[1]["vnfd_id"])
262         self.assertEqual("4", vnf_data_package[1]["numberOfSteps"])
263         self.assertEqual("mpu", vnf_data_package[1]["vnf_scaleAspectId"])
264
265     def test_set_scacle_vnf_instance_id(self):
266         result = set_scacle_vnf_instance_id(self.vnf_scale_info_list)
267         self.assertEqual(2, result.__len__())
268         self.assertEqual(result[0]["numberOfSteps"],
269                          self.vnf_scale_info_list[0]["numberOfSteps"])
270         self.assertEqual(
271             result[0]["vnf_scaleAspectId"],
272             self.vnf_scale_info_list[0]["vnf_scaleAspectId"])
273         self.assertEqual(result[1]["numberOfSteps"],
274                          self.vnf_scale_info_list[1]["numberOfSteps"])
275         self.assertEqual(
276             result[1]["vnf_scaleAspectId"],
277             self.vnf_scale_info_list[1]["vnf_scaleAspectId"])
278         self.assertEqual("231", result[0]["vnfInstanceId"])
279         self.assertEqual("232", result[1]["vnfInstanceId"])
280         self.assertNotIn("vnfd_id", result[0])
281         self.assertNotIn("vnfd_id", result[1])
282
283     def test_set_scacle_vnf_instance_id_2(self):
284         vnf_scale_info_list = [
285             {
286                 "vnfd_id": "error1",
287                 "vnf_scaleAspectId": "mpu",
288                 "numberOfSteps": "1"
289             },
290             {
291                 "vnfd_id": "nf_zte_hss",
292                 "vnf_scaleAspectId": "mpu",
293                 "numberOfSteps": "1"
294             }
295         ]
296         result = set_scacle_vnf_instance_id(vnf_scale_info_list)
297         self.assertEqual(1, result.__len__())
298         self.assertEqual(
299             result[0]["numberOfSteps"],
300             vnf_scale_info_list[0]["numberOfSteps"])
301         self.assertEqual(
302             result[0]["vnf_scaleAspectId"],
303             vnf_scale_info_list[0]["vnf_scaleAspectId"])
304         self.assertEqual("232", result[0]["vnfInstanceId"])
305         self.assertNotIn("vnfd_id", result[0])
306
307     def test_set_scacle_vnf_instance_id_3(self):
308         vnf_scale_info_list = [
309             {
310                 "vnfd_id": "error1",
311                 "vnf_scaleAspectId": "mpu",
312                 "numberOfSteps": "1"
313             },
314             {
315                 "vnfd_id": "error2",
316                 "vnf_scaleAspectId": "gsu",
317                 "numberOfSteps": "1"
318             }
319         ]
320         result = set_scacle_vnf_instance_id(vnf_scale_info_list)
321         self.assertEqual(0, result.__len__())
322
323     def test_set_scacle_vnf_instance_id_4(self):
324         self.add_another_nf_instance()
325         result = set_scacle_vnf_instance_id(self.vnf_scale_info_list)
326         self.assertEqual(3, result.__len__())
327         self.assertEqual("231", result[0]["vnfInstanceId"])
328         self.assertEqual("232", result[1]["vnfInstanceId"])
329         self.assertEqual("233", result[2]["vnfInstanceId"])
330
331     def test_set_scaleVnfData_type(self):
332         vnf_scale_list = set_scacle_vnf_instance_id(self.vnf_scale_info_list)
333         result = set_scaleVnfData_type(vnf_scale_list, self.ns_scale_direction)
334         self.assertEqual(2, result.__len__())
335         self.assertNotIn("scaleByStepData", result)
336         self.assertEqual(
337             self.ns_scale_direction,
338             result[0]["scaleByStepData"]["type"])
339         self.assertEqual("mpu", result[0]["scaleByStepData"]["aspectId"])
340         self.assertNotIn("vnf_scaleAspectId", result[0]["scaleByStepData"])
341         self.assertEqual("1", result[0]["scaleByStepData"]["numberOfSteps"])
342         self.assertEqual(
343             self.ns_scale_direction,
344             result[1]["scaleByStepData"]["type"])
345         self.assertEqual("gsu", result[1]["scaleByStepData"]["aspectId"])
346         self.assertNotIn("vnf_scaleAspectId", result[1]["scaleByStepData"])
347         self.assertEqual("2", result[1]["scaleByStepData"]["numberOfSteps"])
348
349     def test_get_nsdId(self):
350         nsd_id = get_nsdId("1")
351         self.assertEqual("23", nsd_id)
352
353     @mock.patch.object(catalog, 'get_scalingmap_json_package')
354     def test_get_scale_vnf_data_info_list(
355             self, mock_get_scalingmap_json_package):
356         mock_get_scalingmap_json_package.return_value = self.scaling_map_json
357
358         scale_vnf_data = get_scale_vnf_data_info_list(self.scaleNsData, "1")
359         self.assertIsNotNone(scale_vnf_data)
360         self.assertEqual(2, scale_vnf_data.__len__())
361
362     @mock.patch.object(catalog, 'get_scalingmap_json_package')
363     def test_get_scale_vnf_data_info_list_2(
364             self, mock_get_scalingmap_json_package):
365         mock_get_scalingmap_json_package.return_value = self.scaling_map_json
366
367         scale_vnf_data = None
368         is_exception_caught = False
369         try:
370             scale_vnf_data = get_scale_vnf_data_info_list(
371                 self.scaleNsData2, "1")
372         except Exception:
373             is_exception_caught = True
374         self.assertTrue(is_exception_caught)
375         self.assertIsNone(scale_vnf_data)
376
377     @mock.patch.object(catalog, 'get_scalingmap_json_package')
378     def test_get_scale_vnf_data_info_list_3(
379             self, mock_get_scalingmap_json_package):
380         mock_get_scalingmap_json_package.return_value = self.scaling_map_json
381         self.add_new_vnf_instance()
382
383         scale_vnf_data = None
384         is_exception_caught = False
385         try:
386             scale_vnf_data = get_scale_vnf_data_info_list(
387                 self.scaleNsData2, "1")
388         except Exception:
389             is_exception_caught = True
390         self.assertFalse(is_exception_caught)
391         self.assertEqual(2, scale_vnf_data.__len__())
392     '''