1 # Copyright 2016-2017 ZTE Corporation.
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
7 # http://www.apache.org/licenses/LICENSE-2.0
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.
17 from django.test import Client
18 from django.test import TestCase
19 from rest_framework import status
20 from driver.pub.utils import restcall
23 class InterfacesTest(TestCase):
25 self.client = Client()
30 # @mock.patch.object(restcall, 'call_req_aai')
31 @mock.patch.object(restcall, 'call_req')
32 def test_instantiate_vnf_001(self, mock_call_req):
36 vnfm_info = {u'userName': u'admin',
38 u'name': u'ZTE_VNFM_237_62',
39 u'vimId': u'516cee95-e8ca-4d26-9268-38e343c2e31e',
40 u'url': u'http://192.168.237.165:2324',
41 u'certificateUrl': u'',
43 u'vnfmId': u'b0797c9b-3da9-459c-b25c-3813e9d8fd70',
44 u'password': u'admin',
45 u'type': u'ztevmanagerdriver',
46 u'createTime': u'2016-10-31 11:08:39',
48 vnfd_info = {u'vnfInstanceInfo': [{u'vnfInstanceId': u'59b79a9f-9e37-4f6c-acaf-5f41d9cb3f76',
49 u'vnfInstanceName': u'VFW_59b79a9f-9e37-4f6c-acaf-5f41d9cb3f76'},
50 {u'vnfInstanceId': u'6c5e4bd3-e8a6-42d8-a7a4-53a8ef74c6ac',
51 u'vnfInstanceName': u'VFW_6c5e4bd3-e8a6-42d8-a7a4-53a8ef74c6ac'},
52 {u'vnfInstanceId': u'930de5c9-8043-41df-ace8-ede2262a3713',
53 u'vnfInstanceName': u'VFW_930de5c9-8043-41df-ace8-ede2262a3713'},
54 {u'vnfInstanceId': u'c677a305-a7bd-4baf-9eee-c383c588bb3c',
55 u'vnfInstanceName': u'VFW_c677a305-a7bd-4baf-9eee-c383c588bb3c'},
56 {u'vnfInstanceId': u'e708e5c5-bdf4-436a-b928-826887806d82',
57 u'vnfInstanceName': u'VFW_e708e5c5-bdf4-436a-b928-826887806d82'}],
58 u'csarId': u'd852e1be-0aac-48f1-b1a4-cd825f6cdf9a',
60 {u'status': u'Enable', u'index': u'0',
61 u'vimId': u'516cee95-e8ca-4d26-9268-38e343c2e31e',
62 u'fileName': u'VFW_IMAGE_VCPE_ZTE',
64 u'imageId': u'd2b73154-0414-466a-a1e6-51b9461b753a',
65 u'tenant': u'admin'}],
66 u'packageInfo': {u'usageState': u'NotInUse',
67 u'onBoardState': u'onBoarded',
71 u'vnfdProvider': u'zte',
72 u'vnfdId': u'vcpe_vfw_zte_1_0',
73 u'deletionPending': False,
75 u'vnfVersion': u'1.0',
76 u'vnfdVersion': u'1.0.0',
77 u'processState': u'normal',
78 u'modifyTime': u'2016-10-31 16:21:32',
79 u'downloadUri': u'http://192.168.233.226:80/',
80 u'operationalState': u'Disabled',
81 u'createTime': u'2016-10-31 16:21:11',
85 "usageState": "NotInUse",
86 "onBoardState": "onBoarded",
90 "vnfdModel": json.dumps({"metadata": {"name": "ZTE-MME-FIX-VL"}})
92 "modifyTime": "2016-10-31 16:21:32",
93 "vnfdProvider": "zte",
94 "vnfdId": "vcpe_vfw_zte_1_0",
95 "deletionPending": False,
98 "vnfdVersion": "1.0.0",
99 "processState": "normal",
101 "operationalState": "Disabled",
102 "createTime": "2016-10-31 16:21:11",
103 "downloadUri": "http://192.168.233.226:80/files/catalog-http/NFAR/ZTE/VFW/v1.0/VFW.csar"
107 u'vnfInstanceId': u'8',
108 u'jobid': u'NF-CREATE-8-b384535c-9f45-11e6-8749-fa163e91c2f9'
110 ret = [0, json.JSONEncoder().encode(inst_response), '200']
112 r1 = [0, json.JSONEncoder().encode(vnfm_info), "200"]
114 r2 = [0, json.JSONEncoder().encode(vnfd_info), "200"]
116 r3 = [0, json.JSONEncoder().encode(packageInfo), "200"]
118 # mock_call_req_aai.side_effect =[r1]
119 mock_call_req.side_effect = [r1, r2, r3, ret]
122 'vnfInstanceName': 'VFW_f88c0cb7-512a-44c4-bd09-891663f19367',
123 'vnfPackageId': 'd852e1be-0aac-48f1-b1a4-cd825f6cdf9a',
124 'vnfDescriptorId': 'vcpe_vfw_zte_1_0',
126 'sdncontroller': 'e4d637f1-a4ec-4c59-8b20-4e8ab34daba9',
127 'NatIpRange': '192.167.0.10-192.168.0.20',
128 'm6000_mng_ip': '192.168.11.11',
129 'externalPluginManageNetworkName': 'plugin_net_2014',
130 'location': '516cee95-e8ca-4d26-9268-38e343c2e31e',
131 'externalManageNetworkName': 'mng_net_2017',
132 'sfc_data_network': 'sfc_data_net_2016',
133 'externalDataNetworkName': 'Flow_out_net',
138 response = self.client.post("/api/ztevmanagerdriver/v1/ztevnfmid/vnfs",
139 data=json.dumps(req_data), content_type="application/json")
140 self.assertEqual(str(status.HTTP_200_OK), response.status_code)
141 expect_resp_data = {"jobid": "NF-CREATE-8-b384535c-9f45-11e6-8749-fa163e91c2f9", "vnfInstanceId": "8"}
142 self.assertEqual(expect_resp_data, response.data)
144 # @mock.patch.object(restcall, 'call_req_aai')
145 @mock.patch.object(restcall, 'call_req')
146 def test_terminate_vnf__002(self, mock_call_req):
150 r1 = [0, json.JSONEncoder().encode({
151 "vnfmId": "19ecbb3a-3242-4fa3-9926-8dfb7ddc29ee",
157 "description": "vnfm",
158 "certificateUrl": "",
159 "url": "http://10.74.44.11",
162 "createTime": "2016-07-06 15:33:18"}), "200"]
164 r2 = [0, json.JSONEncoder().encode({"vnfInstanceId": "1", "JobId": "1"}), "200"]
165 # mock_call_req_aai.side_effect = [r1]
166 mock_call_req.side_effect = [r1, r2]
168 response = self.client.post("/api/ztevmanagerdriver/v1/ztevnfmid/vnfs/vbras_innstance_id/terminate")
170 self.assertEqual(str(status.HTTP_200_OK), response.status_code)
171 expect_resp_data = {"jobid": "1", "vnfInstanceId": "1"}
172 self.assertEqual(expect_resp_data, response.data)
174 # @mock.patch.object(restcall, 'call_req_aai')
175 @mock.patch.object(restcall, 'call_req')
176 def test_query_vnf_003(self, mock_call_req):
180 r1 = [0, json.JSONEncoder().encode({
181 "vnfmId": "19ecbb3a-3242-4fa3-9926-8dfb7ddc29ee",
187 "description": "vnfm",
188 "certificateUrl": "",
189 "url": "http://10.74.44.11",
192 "createTime": "2016-07-06 15:33:18"}), "200"]
194 r2 = [0, json.JSONEncoder().encode({"vnfinstancestatus": "1"}), "200"]
195 # mock_call_req_aai.side_effect = [r1]
196 mock_call_req.side_effect = [r1, r2]
198 response = self.client.get("/api/ztevmanagerdriver/v1/ztevnfmid/vnfs/vbras_innstance_id")
200 self.assertEqual(str(status.HTTP_200_OK), response.status_code)
202 expect_resp_data = {"vnfInfo": {"vnfStatus": "1"}}
203 self.assertEqual(expect_resp_data, response.data)
205 # @mock.patch.object(restcall, 'call_req_aai')
206 @mock.patch.object(restcall, 'call_req')
207 def test_operation_status_004(self, mock_call_req):
211 vnfm_info = {u'userName': u'admin',
213 u'name': u'ZTE_VNFM_237_62',
214 u'vimId': u'516cee95-e8ca-4d26-9268-38e343c2e31e',
215 u'url': u'http://192.168.237.165:2324',
216 u'certificateUrl': u'',
218 u'vnfmId': u'b0797c9b-3da9-459c-b25c-3813e9d8fd70',
219 u'password': u'admin',
220 u'type': u'ztevmanagerdriver',
221 u'createTime': u'2016-10-31 11:08:39',
224 "responsedescriptor": {
225 "status": "processing",
226 "responsehistorylist": [
232 "statusdescription": "'JsonParser' object has no attribute 'parser_info'"
238 "statusdescription": "Create nf apply resource failed"
240 "jobid": "NF-CREATE-11-ec6c2f2a-9f48-11e6-9405-fa163e91c2f9"
242 r1 = [0, json.JSONEncoder().encode(vnfm_info), '200']
243 r2 = [0, json.JSONEncoder().encode(resp_body), '200']
244 # mock_call_req_aai.side_effect = [r1]
245 mock_call_req.side_effect = [r1, r2]
246 response = self.client.get("/api/ztevmanagerdriver/v1/{vnfmid}/jobs/{jobid}?responseId={responseId}".format(
247 vnfmid=vnfm_info["vnfmId"],
248 jobid=resp_body["jobid"],
249 responseId=resp_body["responsedescriptor"]["responseid"])
252 self.assertEqual(str(status.HTTP_200_OK), response.status_code)
254 expect_resp_data = resp_body
255 self.assertDictEqual(expect_resp_data, response.data)
257 @mock.patch.object(restcall, 'call_req')
258 def test_grantvnf_005(self, mock_call_req):
263 '{"vim":{"accessinfo":{"tenant":"admin"},"vimid":"516cee95-e8ca-4d26-9268-38e343c2e31e"}}',
267 "vnfmid": "13232222",
268 "nfvoid": "03212234",
273 "tenant": " tenant1",
274 "vnfistanceid": "1234",
275 "operationright": "0",
288 mock_call_req.return_value = ret
289 response = self.client.put("/api/ztevmanagerdriver/v1/resource/grant",
290 data=json.dumps(req_data), content_type='application/json')
292 self.assertEqual(str(status.HTTP_201_CREATED), response.status_code)
295 "vimid": "516cee95-e8ca-4d26-9268-38e343c2e31e",
297 self.assertDictEqual(expect_resp_data, response.data)
299 @mock.patch.object(restcall, 'call_req')
300 def test_notify_006(self, mock_call_req):
304 r1 = [0, json.JSONEncoder().encode(
307 "vimInfoId": "111111",
312 "protocolType": "None"},
316 "password": "password"},
317 "interfaceEndpoint": "http://127.0.0.1/api/v1"},
320 "resourceDefinitionId": "xxxxx",
323 "removeResource": "",
325 "computeResourceFlavour": {
328 "vimFlavourId": "12"},
333 "additionalParam": ""
338 "vnfmid": "876543211",
340 "timestamp": "1234567890",
341 "vnfinstanceid": "1",
348 "vmidlist ": ["vmuuid"]},
352 "vmidlist ": ["vmuuid"]}]}
353 mock_call_req.side_effect = [r1]
354 response = self.client.post("/api/ztevmanagerdriver/v1/vnfs/lifecyclechangesnotification",
355 data=json.dumps(req_data), content_type='application/json')
357 self.assertEqual(str(status.HTTP_200_OK), response.status_code)
359 expect_resp_data = None
360 self.assertEqual(expect_resp_data, response.data)
362 # @mock.patch.object(restcall, 'call_req_aai')
363 @mock.patch.object(restcall, 'call_req')
364 def test_scale(self, mock_call_req):
365 job_info = {"jobid": "801", "nfInstanceId": "101"}
366 vnfm_info = {u'userName': u'admin',
368 u'name': u'ZTE_VNFM_237_62',
369 u'vimId': u'516cee95-e8ca-4d26-9268-38e343c2e31e',
370 u'url': u'http://192.168.237.165:2324',
371 u'certificateUrl': u'',
373 u'vnfmId': u'b0797c9b-3da9-459c-b25c-3813e9d8fd70',
374 u'password': u'admin',
375 u'type': u'ztevmanagerdriver',
376 u'createTime': u'2016-10-31 11:08:39',
379 ret = [0, json.JSONEncoder().encode(job_info), "202"]
380 ret_vnfm = [0, json.JSONEncoder().encode(vnfm_info), "200"]
381 # mock_call_req_aai.side_effect = [ret_vnfm]
382 mock_call_req.side_effect = [ret_vnfm, ret]
387 "flavour_id": "flavour1",
392 "instances_minimum_number": 1,
393 "instances_maximum_number": 4,
394 "local_affinity_antiaffinity_rule": [
396 "affinity_antiaffinity": "affinity",
406 "name": "demo_aspect",
407 "description": "demo_aspect",
408 "associated_group": "elementGroup1",
416 "group_id": "elementGroup1",
419 "name": "elementGroup1"
431 "aspectId": "demo_aspect",
432 "numberOfSteps": "3",
434 "vnfdModel": vnfd_info
438 response = self.client.post("/api/ztevmanagerdriver/v1/100/vnfs/101/scale",
439 data=json.dumps(scale_vnf_data), content_type='application/json')
440 self.assertEqual(str(status.HTTP_202_ACCEPTED), response.status_code)
441 self.assertDictEqual(job_info, response.data)
443 # @mock.patch.object(restcall, 'call_req_aai')
444 @mock.patch.object(restcall, 'call_req')
445 def test_heal(self, mock_call_req):
446 job_info = {"jobid": "12234455", "nfInstanceId": "10144445666"}
447 vnfm_info = {u'userName': u'admin',
449 u'name': u'ZTE_VNFM_237_62',
450 u'vimId': u'516cee95-e8ca-4d26-9268-38e343c2e31e',
451 u'url': u'http://192.168.237.165:2324',
452 u'certificateUrl': u'',
454 u'vnfmId': u'b0797c9b-3da9-459c-b25c-3813e9d8fd70',
455 u'password': u'admin',
456 u'type': u'ztevmanagerdriver',
457 u'createTime': u'2016-10-31 11:08:39',
460 ret = [0, json.JSONEncoder().encode(job_info), "202"]
461 ret_vnfm = [0, json.JSONEncoder().encode(vnfm_info), "200"]
462 # mock_call_req_aai.side_effect = [ret_vnfm]
463 mock_call_req.side_effect = [ret_vnfm, ret]
472 'vmid': '804cca71-9ae9-4511-8e30-d1387718caff',
473 'changtype': 'changed',
475 'vmname': 'ZTE_SSS_111_PP_2_L'
477 'lifecycleoperation': 'operate',
481 response = self.client.post("/api/ztevmanagerdriver/v1/200/vnfs/201/heal",
482 data=json.dumps(heal_vnf_data), content_type='application/json')
484 self.assertEqual(str(status.HTTP_202_ACCEPTED), response.status_code)
485 self.assertDictEqual(job_info, response.data)