53d3a7de46c880d8181d3af66a658943456966fc
[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(
160             self.scaleNsData, "1")
161         self.assertEqual(aspect, self.ns_scale_aspect)
162         self.assertEqual(numberOfSteps, self.ns_scale_steps)
163         self.assertEqual(scale_type, self.ns_scale_direction)
164
165     def test_get_scale_vnf_data_from_json(self):
166         vnf_data_package = get_scale_vnf_data_from_json(
167             self.scaling_map_json, "23", "TIC_EDGE_IMS", "1")
168         self.assertIsNotNone(vnf_data_package)
169         self.assertEqual(2, vnf_data_package.__len__())
170
171     def test_get_scale_vnf_data_from_json_2(self):
172         vnf_data_package = get_scale_vnf_data_from_json(
173             self.scaling_map_json, "23", "TIC_EDGE_IMS", "2")
174         self.assertIsNotNone(vnf_data_package)
175         self.assertEqual(2, vnf_data_package.__len__())
176         self.assertEqual("nf_zte_cscf", vnf_data_package[0]["vnfd_id"])
177         self.assertEqual("2", vnf_data_package[0]["numberOfSteps"])
178         self.assertEqual("mpu", vnf_data_package[0]["vnf_scaleAspectId"])
179         self.assertEqual("nf_zte_hss", vnf_data_package[1]["vnfd_id"])
180         self.assertEqual("4", vnf_data_package[1]["numberOfSteps"])
181         self.assertEqual("mpu", vnf_data_package[1]["vnf_scaleAspectId"])
182
183     def test_set_scacle_vnf_instance_id(self):
184         result = set_scacle_vnf_instance_id(self.vnf_scale_info_list)
185         self.assertEqual(2, result.__len__())
186         self.assertEqual(result[0]["numberOfSteps"],
187                          self.vnf_scale_info_list[0]["numberOfSteps"])
188         self.assertEqual(
189             result[0]["vnf_scaleAspectId"],
190             self.vnf_scale_info_list[0]["vnf_scaleAspectId"])
191         self.assertEqual(result[1]["numberOfSteps"],
192                          self.vnf_scale_info_list[1]["numberOfSteps"])
193         self.assertEqual(
194             result[1]["vnf_scaleAspectId"],
195             self.vnf_scale_info_list[1]["vnf_scaleAspectId"])
196         self.assertEqual("231", result[0]["vnfInstanceId"])
197         self.assertEqual("232", result[1]["vnfInstanceId"])
198         self.assertNotIn("vnfd_id", result[0])
199         self.assertNotIn("vnfd_id", result[1])
200
201     def test_set_scacle_vnf_instance_id_2(self):
202         vnf_scale_info_list = [
203             {
204                 "vnfd_id": "error1",
205                 "vnf_scaleAspectId": "mpu",
206                 "numberOfSteps": "1"
207             },
208             {
209                 "vnfd_id": "nf_zte_hss",
210                 "vnf_scaleAspectId": "mpu",
211                 "numberOfSteps": "1"
212             }
213         ]
214         result = set_scacle_vnf_instance_id(vnf_scale_info_list)
215         self.assertEqual(1, result.__len__())
216         self.assertEqual(
217             result[0]["numberOfSteps"],
218             vnf_scale_info_list[0]["numberOfSteps"])
219         self.assertEqual(
220             result[0]["vnf_scaleAspectId"],
221             vnf_scale_info_list[0]["vnf_scaleAspectId"])
222         self.assertEqual("232", result[0]["vnfInstanceId"])
223         self.assertNotIn("vnfd_id", result[0])
224
225     def test_set_scacle_vnf_instance_id_3(self):
226         vnf_scale_info_list = [
227             {
228                 "vnfd_id": "error1",
229                 "vnf_scaleAspectId": "mpu",
230                 "numberOfSteps": "1"
231             },
232             {
233                 "vnfd_id": "error2",
234                 "vnf_scaleAspectId": "gsu",
235                 "numberOfSteps": "1"
236             }
237         ]
238         result = set_scacle_vnf_instance_id(vnf_scale_info_list)
239         self.assertEqual(0, result.__len__())
240
241     def test_set_scacle_vnf_instance_id_4(self):
242         self.add_another_nf_instance()
243         result = set_scacle_vnf_instance_id(self.vnf_scale_info_list)
244         self.assertEqual(3, result.__len__())
245         self.assertEqual("231", result[0]["vnfInstanceId"])
246         self.assertEqual("232", result[1]["vnfInstanceId"])
247         self.assertEqual("233", result[2]["vnfInstanceId"])
248
249     def test_set_scaleVnfData_type(self):
250         vnf_scale_list = set_scacle_vnf_instance_id(self.vnf_scale_info_list)
251         result = set_scaleVnfData_type(vnf_scale_list, self.ns_scale_direction)
252         self.assertEqual(2, result.__len__())
253
254         self.assertNotIn("scaleByStepData", result)
255
256         self.assertEqual(
257             self.ns_scale_direction,
258             result[0]["scaleByStepData"]["type"])
259         self.assertEqual("mpu", result[0]["scaleByStepData"]["aspectId"])
260         self.assertNotIn("vnf_scaleAspectId", result[0]["scaleByStepData"])
261         self.assertEqual("1", result[0]["scaleByStepData"]["numberOfSteps"])
262
263         self.assertEqual(
264             self.ns_scale_direction,
265             result[1]["scaleByStepData"]["type"])
266         self.assertEqual("gsu", result[1]["scaleByStepData"]["aspectId"])
267         self.assertNotIn("vnf_scaleAspectId", result[1]["scaleByStepData"])
268         self.assertEqual("2", result[1]["scaleByStepData"]["numberOfSteps"])
269
270     def test_get_nsdId(self):
271         nsd_id = get_nsdId("1")
272         self.assertEqual("23", nsd_id)
273
274     @mock.patch.object(catalog, 'get_scalingmap_json_package')
275     def test_get_scale_vnf_data_info_list(
276             self, mock_get_scalingmap_json_package):
277         mock_get_scalingmap_json_package.return_value = self.scaling_map_json
278
279         scale_vnf_data = get_scale_vnf_data_info_list(self.scaleNsData, "1")
280         self.assertIsNotNone(scale_vnf_data)
281         self.assertEqual(2, scale_vnf_data.__len__())