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',
83 packageInfo = {u'usageState': u'NotInUse',
84 u'onBoardState': u'onBoarded',
88 u'vnfdProvider': u'zte',
89 u'vnfdId': u'vcpe_vfw_zte_1_0',
90 u'deletionPending': False,
92 u'vnfVersion': u'1.0',
93 u'vnfdVersion': u'1.0.0',
94 u'processState': u'normal',
95 u'modifyTime': u'2016-10-31 16:21:32',
96 u'downloadUri': u'http://192.168.233.226:80/files/catalog-http/NFAR/ZTE/VFW/v1.0/VFW.csar',
97 u'operationalState': u'Disabled',
98 u'createTime': u'2016-10-31 16:21:11', u'size': u'12.1 MB'}
101 u'vnfInstanceId': u'8',
102 u'jobid': u'NF-CREATE-8-b384535c-9f45-11e6-8749-fa163e91c2f9'
104 ret = [0, json.JSONEncoder().encode(inst_response), '200']
106 r1 = [0, json.JSONEncoder().encode(vnfm_info), "200"]
108 r2 = [0, json.JSONEncoder().encode(vnfd_info), "200"]
110 r3 = [0, json.JSONEncoder().encode(packageInfo), "200"]
112 # mock_call_req_aai.side_effect =[r1]
113 mock_call_req.side_effect = [r1, r2, r3, ret]
116 'vnfInstanceName': 'VFW_f88c0cb7-512a-44c4-bd09-891663f19367',
117 'vnfPackageId': 'd852e1be-0aac-48f1-b1a4-cd825f6cdf9a',
118 'vnfDescriptorId': 'vcpe_vfw_zte_1_0',
120 'sdncontroller': 'e4d637f1-a4ec-4c59-8b20-4e8ab34daba9',
121 'NatIpRange': '192.167.0.10-192.168.0.20',
122 'm6000_mng_ip': '192.168.11.11',
123 'externalPluginManageNetworkName': 'plugin_net_2014',
124 'location': '516cee95-e8ca-4d26-9268-38e343c2e31e',
125 'externalManageNetworkName': 'mng_net_2017',
126 'sfc_data_network': 'sfc_data_net_2016',
127 'externalDataNetworkName': 'Flow_out_net',
132 response = self.client.post("/api/ztevmanagerdriver/v1/ztevnfmid/vnfs",
133 data=json.dumps(req_data), content_type="application/json")
134 self.assertEqual(str(status.HTTP_200_OK), response.status_code)
135 expect_resp_data = {"jobid": "NF-CREATE-8-b384535c-9f45-11e6-8749-fa163e91c2f9", "vnfInstanceId": "8"}
136 self.assertEqual(expect_resp_data, response.data)
138 # @mock.patch.object(restcall, 'call_req_aai')
139 @mock.patch.object(restcall, 'call_req')
140 def test_terminate_vnf__002(self, mock_call_req):
144 r1 = [0, json.JSONEncoder().encode({
145 "vnfmId": "19ecbb3a-3242-4fa3-9926-8dfb7ddc29ee",
151 "description": "vnfm",
152 "certificateUrl": "",
153 "url": "http://10.74.44.11",
156 "createTime": "2016-07-06 15:33:18"}), "200"]
158 r2 = [0, json.JSONEncoder().encode({"vnfInstanceId": "1", "JobId": "1"}), "200"]
159 # mock_call_req_aai.side_effect = [r1]
160 mock_call_req.side_effect = [r1, r2]
162 response = self.client.post("/api/ztevmanagerdriver/v1/ztevnfmid/vnfs/vbras_innstance_id/terminate")
164 self.assertEqual(str(status.HTTP_200_OK), response.status_code)
165 expect_resp_data = {"jobid": "1", "vnfInstanceId": "1"}
166 self.assertEqual(expect_resp_data, response.data)
168 # @mock.patch.object(restcall, 'call_req_aai')
169 @mock.patch.object(restcall, 'call_req')
170 def test_query_vnf_003(self, mock_call_req):
174 r1 = [0, json.JSONEncoder().encode({
175 "vnfmId": "19ecbb3a-3242-4fa3-9926-8dfb7ddc29ee",
181 "description": "vnfm",
182 "certificateUrl": "",
183 "url": "http://10.74.44.11",
186 "createTime": "2016-07-06 15:33:18"}), "200"]
188 r2 = [0, json.JSONEncoder().encode({"vnfinstancestatus": "1"}), "200"]
189 # mock_call_req_aai.side_effect = [r1]
190 mock_call_req.side_effect = [r1, r2]
192 response = self.client.get("/api/ztevmanagerdriver/v1/ztevnfmid/vnfs/vbras_innstance_id")
194 self.assertEqual(str(status.HTTP_200_OK), response.status_code)
196 expect_resp_data = {"vnfInfo": {"vnfStatus": "1"}}
197 self.assertEqual(expect_resp_data, response.data)
199 # @mock.patch.object(restcall, 'call_req_aai')
200 @mock.patch.object(restcall, 'call_req')
201 def test_operation_status_004(self, mock_call_req):
205 vnfm_info = {u'userName': u'admin',
207 u'name': u'ZTE_VNFM_237_62',
208 u'vimId': u'516cee95-e8ca-4d26-9268-38e343c2e31e',
209 u'url': u'http://192.168.237.165:2324',
210 u'certificateUrl': u'',
212 u'vnfmId': u'b0797c9b-3da9-459c-b25c-3813e9d8fd70',
213 u'password': u'admin',
214 u'type': u'ztevmanagerdriver',
215 u'createTime': u'2016-10-31 11:08:39',
218 "responsedescriptor": {
219 "status": "processing",
220 "responsehistorylist": [
226 "statusdescription": "'JsonParser' object has no attribute 'parser_info'"
232 "statusdescription": "Create nf apply resource failed"
234 "jobid": "NF-CREATE-11-ec6c2f2a-9f48-11e6-9405-fa163e91c2f9"
236 r1 = [0, json.JSONEncoder().encode(vnfm_info), '200']
237 r2 = [0, json.JSONEncoder().encode(resp_body), '200']
238 # mock_call_req_aai.side_effect = [r1]
239 mock_call_req.side_effect = [r1, r2]
240 response = self.client.get("/api/ztevmanagerdriver/v1/{vnfmid}/jobs/{jobid}?responseId={responseId}".format(
241 vnfmid=vnfm_info["vnfmId"],
242 jobid=resp_body["jobid"],
243 responseId=resp_body["responsedescriptor"]["responseid"])
246 self.assertEqual(str(status.HTTP_200_OK), response.status_code)
248 expect_resp_data = resp_body
249 self.assertDictEqual(expect_resp_data, response.data)
251 @mock.patch.object(restcall, 'call_req')
252 def test_grantvnf_005(self, mock_call_req):
257 '{"vim":{"accessinfo":{"tenant":"admin"},"vimid":"516cee95-e8ca-4d26-9268-38e343c2e31e"}}',
261 "vnfmid": "13232222",
262 "nfvoid": "03212234",
267 "tenant": " tenant1",
268 "vnfistanceid": "1234",
269 "operationright": "0",
282 mock_call_req.return_value = ret
283 response = self.client.put("/api/ztevmanagerdriver/v1/resource/grant",
284 data=json.dumps(req_data), content_type='application/json')
286 self.assertEqual(str(status.HTTP_201_CREATED), response.status_code)
289 "vimid": "516cee95-e8ca-4d26-9268-38e343c2e31e",
291 self.assertDictEqual(expect_resp_data, response.data)
293 @mock.patch.object(restcall, 'call_req')
294 def test_notify_006(self, mock_call_req):
298 r1 = [0, json.JSONEncoder().encode(
301 "vimInfoId": "111111",
306 "protocolType": "None"},
310 "password": "password"},
311 "interfaceEndpoint": "http://127.0.0.1/api/v1"},
314 "resourceDefinitionId": "xxxxx",
317 "removeResource": "",
319 "computeResourceFlavour": {
322 "vimFlavourId": "12"},
327 "additionalParam": ""
332 "vnfmid": "876543211",
334 "timestamp": "1234567890",
335 "vnfinstanceid": "1",
342 "vmidlist ": ["vmuuid"]},
346 "vmidlist ": ["vmuuid"]}]}
347 mock_call_req.side_effect = [r1]
348 response = self.client.post("/api/ztevmanagerdriver/v1/vnfs/lifecyclechangesnotification",
349 data=json.dumps(req_data), content_type='application/json')
351 self.assertEqual(str(status.HTTP_200_OK), response.status_code)
353 expect_resp_data = None
354 self.assertEqual(expect_resp_data, response.data)
356 # @mock.patch.object(restcall, 'call_req_aai')
357 @mock.patch.object(restcall, 'call_req')
358 def test_scale(self, mock_call_req):
359 job_info = {"jobid": "801", "nfInstanceId": "101"}
360 vnfm_info = {u'userName': u'admin',
362 u'name': u'ZTE_VNFM_237_62',
363 u'vimId': u'516cee95-e8ca-4d26-9268-38e343c2e31e',
364 u'url': u'http://192.168.237.165:2324',
365 u'certificateUrl': u'',
367 u'vnfmId': u'b0797c9b-3da9-459c-b25c-3813e9d8fd70',
368 u'password': u'admin',
369 u'type': u'ztevmanagerdriver',
370 u'createTime': u'2016-10-31 11:08:39',
373 ret = [0, json.JSONEncoder().encode(job_info), "202"]
374 ret_vnfm = [0, json.JSONEncoder().encode(vnfm_info), "200"]
375 # mock_call_req_aai.side_effect = [ret_vnfm]
376 mock_call_req.side_effect = [ret_vnfm, ret]
381 "flavour_id": "flavour1",
386 "instances_minimum_number": 1,
387 "instances_maximum_number": 4,
388 "local_affinity_antiaffinity_rule": [
390 "affinity_antiaffinity": "affinity",
400 "name": "demo_aspect",
401 "description": "demo_aspect",
402 "associated_group": "elementGroup1",
410 "group_id": "elementGroup1",
413 "name": "elementGroup1"
425 "aspectId": "demo_aspect",
426 "numberOfSteps": "3",
428 "vnfdModel": vnfd_info
432 response = self.client.post("/api/ztevmanagerdriver/v1/100/vnfs/101/scale",
433 data=json.dumps(scale_vnf_data), content_type='application/json')
434 self.assertEqual(str(status.HTTP_202_ACCEPTED), response.status_code)
435 self.assertDictEqual(job_info, response.data)
437 # @mock.patch.object(restcall, 'call_req_aai')
438 @mock.patch.object(restcall, 'call_req')
439 def test_heal(self, mock_call_req):
440 job_info = {"jobid": "12234455", "nfInstanceId": "10144445666"}
441 vnfm_info = {u'userName': u'admin',
443 u'name': u'ZTE_VNFM_237_62',
444 u'vimId': u'516cee95-e8ca-4d26-9268-38e343c2e31e',
445 u'url': u'http://192.168.237.165:2324',
446 u'certificateUrl': u'',
448 u'vnfmId': u'b0797c9b-3da9-459c-b25c-3813e9d8fd70',
449 u'password': u'admin',
450 u'type': u'ztevmanagerdriver',
451 u'createTime': u'2016-10-31 11:08:39',
454 ret = [0, json.JSONEncoder().encode(job_info), "202"]
455 ret_vnfm = [0, json.JSONEncoder().encode(vnfm_info), "200"]
456 # mock_call_req_aai.side_effect = [ret_vnfm]
457 mock_call_req.side_effect = [ret_vnfm, ret]
466 'vmid': '804cca71-9ae9-4511-8e30-d1387718caff',
467 'changtype': 'changed',
469 'vmname': 'ZTE_SSS_111_PP_2_L'
471 'lifecycleoperation': 'operate',
475 response = self.client.post("/api/ztevmanagerdriver/v1/200/vnfs/201/heal",
476 data=json.dumps(heal_vnf_data), content_type='application/json')
478 self.assertEqual(str(status.HTTP_202_ACCEPTED), response.status_code)
479 self.assertDictEqual(job_info, response.data)