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')
31 def test_instantiate_vnf_001(self, mock_call_req):
35 vnfm_info = {u'userName': u'admin',
37 u'name': u'ZTE_VNFM_237_62',
38 u'vimId': u'516cee95-e8ca-4d26-9268-38e343c2e31e',
39 u'url': u'http://192.168.237.165:2324',
40 u'certificateUrl': u'',
42 u'vnfmId': u'b0797c9b-3da9-459c-b25c-3813e9d8fd70',
43 u'password': u'admin',
44 u'type': u'ztevmanagerdriver',
45 u'createTime': u'2016-10-31 11:08:39',
47 vnfd_info = {u'vnfInstanceInfo': [{u'vnfInstanceId': u'59b79a9f-9e37-4f6c-acaf-5f41d9cb3f76',
48 u'vnfInstanceName': u'VFW_59b79a9f-9e37-4f6c-acaf-5f41d9cb3f76'},
49 {u'vnfInstanceId': u'6c5e4bd3-e8a6-42d8-a7a4-53a8ef74c6ac',
50 u'vnfInstanceName': u'VFW_6c5e4bd3-e8a6-42d8-a7a4-53a8ef74c6ac'},
51 {u'vnfInstanceId': u'930de5c9-8043-41df-ace8-ede2262a3713',
52 u'vnfInstanceName': u'VFW_930de5c9-8043-41df-ace8-ede2262a3713'},
53 {u'vnfInstanceId': u'c677a305-a7bd-4baf-9eee-c383c588bb3c',
54 u'vnfInstanceName': u'VFW_c677a305-a7bd-4baf-9eee-c383c588bb3c'},
55 {u'vnfInstanceId': u'e708e5c5-bdf4-436a-b928-826887806d82',
56 u'vnfInstanceName': u'VFW_e708e5c5-bdf4-436a-b928-826887806d82'}],
57 u'csarId': u'd852e1be-0aac-48f1-b1a4-cd825f6cdf9a',
59 {u'status': u'Enable', u'index': u'0',
60 u'vimId': u'516cee95-e8ca-4d26-9268-38e343c2e31e',
61 u'fileName': u'VFW_IMAGE_VCPE_ZTE',
63 u'imageId': u'd2b73154-0414-466a-a1e6-51b9461b753a',
64 u'tenant': u'admin'}],
65 u'packageInfo': {u'usageState': u'NotInUse',
66 u'onBoardState': u'onBoarded',
70 u'vnfdProvider': u'zte',
71 u'vnfdId': u'vcpe_vfw_zte_1_0',
72 u'deletionPending': False,
74 u'vnfVersion': u'1.0',
75 u'vnfdVersion': u'1.0.0',
76 u'processState': u'normal',
77 u'modifyTime': u'2016-10-31 16:21:32',
78 u'downloadUri': u'http://192.168.233.226:80/',
79 u'operationalState': u'Disabled',
80 u'createTime': u'2016-10-31 16:21:11',
82 packageInfo = {u'usageState': u'NotInUse',
83 u'onBoardState': u'onBoarded',
87 u'vnfdProvider': u'zte',
88 u'vnfdId': u'vcpe_vfw_zte_1_0',
89 u'deletionPending': False,
91 u'vnfVersion': u'1.0',
92 u'vnfdVersion': u'1.0.0',
93 u'processState': u'normal',
94 u'modifyTime': u'2016-10-31 16:21:32',
95 u'downloadUri': u'http://192.168.233.226:80/files/catalog-http/NFAR/ZTE/VFW/v1.0/VFW.csar',
96 u'operationalState': u'Disabled',
97 u'createTime': u'2016-10-31 16:21:11', u'size': u'12.1 MB'}
99 ret = [0, json.JSONEncoder().encode({"vnfInstanceId":"8",
100 "jobid":"NF-CREATE-8-b384535c-9f45-11e6-8749-fa163e91c2f9"}),
103 r1 = [0, json.JSONEncoder().encode(vnfm_info), "200"]
105 r2 = [0, json.JSONEncoder().encode(vnfd_info), "200"]
107 r3 = [0, json.JSONEncoder().encode(packageInfo), "200"]
110 mock_call_req.side_effect = [r1, r2, r3, ret]
112 req_data = {'vnfInstanceName': 'VFW_f88c0cb7-512a-44c4-bd09-891663f19367',
113 'vnfPackageId': 'd852e1be-0aac-48f1-b1a4-cd825f6cdf9a',
114 'vnfDescriptorId': 'vcpe_vfw_zte_1_0',
115 'additionalParam': {'sdncontroller': 'e4d637f1-a4ec-4c59-8b20-4e8ab34daba9',
116 'NatIpRange': '192.167.0.10-192.168.0.20',
117 'm6000_mng_ip': '192.168.11.11',
118 'externalPluginManageNetworkName': 'plugin_net_2014',
119 'location': '516cee95-e8ca-4d26-9268-38e343c2e31e',
120 'externalManageNetworkName': 'mng_net_2017',
121 'sfc_data_network': 'sfc_data_net_2016',
122 'externalDataNetworkName': 'Flow_out_net',
125 response = self.client.post("/api/ztevmanagerdriver/v1/ztevnfmid/vnfs",
126 data=json.dumps(req_data), content_type="application/json")
127 self.assertEqual(str(status.HTTP_200_OK), response.status_code)
128 expect_resp_data = {"jobid": "NF-CREATE-8-b384535c-9f45-11e6-8749-fa163e91c2f9", "vnfInstanceId": "8"}
129 self.assertEqual(expect_resp_data, response.data)
131 @mock.patch.object(restcall, 'call_req')
132 def test_terminate_vnf__002(self, mock_call_req):
136 r1 = [0, json.JSONEncoder().encode({
137 "vnfmId": "19ecbb3a-3242-4fa3-9926-8dfb7ddc29ee",
143 "description": "vnfm",
144 "certificateUrl": "",
145 "url": "http://10.74.44.11",
148 "createTime": "2016-07-06 15:33:18"}), "200"]
150 r2 = [0, json.JSONEncoder().encode({"vnfInstanceId": "1", "JobId": "1"}), "200"]
151 mock_call_req.side_effect = [r1, r2]
153 response = self.client.post("/api/ztevmanagerdriver/v1/ztevnfmid/vnfs/vbras_innstance_id/terminate")
155 self.assertEqual(str(status.HTTP_200_OK), response.status_code)
156 expect_resp_data = {"jobid": "1", "vnfInstanceId": "1"}
157 self.assertEqual(expect_resp_data, response.data)
159 @mock.patch.object(restcall, 'call_req')
160 def test_query_vnf_003(self, mock_call_req):
164 r1 = [0, json.JSONEncoder().encode({
165 "vnfmId": "19ecbb3a-3242-4fa3-9926-8dfb7ddc29ee",
171 "description": "vnfm",
172 "certificateUrl": "",
173 "url": "http://10.74.44.11",
176 "createTime": "2016-07-06 15:33:18"}), "200"]
178 r2 = [0, json.JSONEncoder().encode({"vnfinstancestatus": "1"}), "200"]
179 mock_call_req.side_effect = [r1, r2]
181 response = self.client.get("/api/ztevmanagerdriver/v1/ztevnfmid/vnfs/vbras_innstance_id")
183 self.assertEqual(str(status.HTTP_200_OK), response.status_code)
185 expect_resp_data = {"vnfInfo": {"vnfStatus": "1"}}
186 self.assertEqual(expect_resp_data, response.data)
188 @mock.patch.object(restcall, 'call_req')
189 def test_operation_status_004(self, mock_call_req):
193 vnfm_info = {u'userName': u'admin',
195 u'name': u'ZTE_VNFM_237_62',
196 u'vimId': u'516cee95-e8ca-4d26-9268-38e343c2e31e',
197 u'url': u'http://192.168.237.165:2324',
198 u'certificateUrl': u'',
200 u'vnfmId': u'b0797c9b-3da9-459c-b25c-3813e9d8fd70',
201 u'password': u'admin',
202 u'type': u'ztevmanagerdriver',
203 u'createTime': u'2016-10-31 11:08:39',
205 resp_body = {"responsedescriptor":
206 {"status": "processing", "responsehistorylist": [
211 "statusdescription": "'JsonParser' object has no attribute 'parser_info'"}],
215 "statusdescription": "Create nf apply resource failed"},
216 "jobid": "NF-CREATE-11-ec6c2f2a-9f48-11e6-9405-fa163e91c2f9"}
217 r1 = [0, json.JSONEncoder().encode(vnfm_info), '200']
218 r2 = [0, json.JSONEncoder().encode(resp_body), '200']
219 mock_call_req.side_effect = [r1, r2]
220 response = self.client.get("/api/ztevmanagerdriver/v1/{vnfmid}/jobs/{jobid}?responseId={responseId}".
222 vnfmid=vnfm_info["vnfmId"],
223 jobid=resp_body["jobid"],
224 responseId=resp_body["responsedescriptor"]["responseid"]))
226 self.assertEqual(str(status.HTTP_200_OK), response.status_code)
228 expect_resp_data = resp_body
229 self.assertDictEqual(expect_resp_data, response.data)
231 @mock.patch.object(restcall, 'call_req')
232 def test_grantvnf_005(self, mock_call_req):
237 '{"vim":{"accessinfo":{"tenant":"admin"},"vimid":"516cee95-e8ca-4d26-9268-38e343c2e31e"}}',
241 "vnfmid": "13232222",
242 "nfvoid": "03212234",
246 "tenant": " tenant1",
247 "vnfistanceid": "1234",
248 "operationright": "0",
258 mock_call_req.return_value = ret
259 response = self.client.put("/api/ztevmanagerdriver/v1/resource/grant",
260 data=json.dumps(req_data), content_type='application/json')
262 self.assertEqual(str(status.HTTP_201_CREATED), response.status_code)
265 "vimid": "516cee95-e8ca-4d26-9268-38e343c2e31e",
267 self.assertDictEqual(expect_resp_data, response.data)
269 @mock.patch.object(restcall, 'call_req')
270 def test_notify_006(self, mock_call_req):
274 r1 = [0, json.JSONEncoder().encode({
275 "vnfmId": "19ecbb3a-3242-4fa3-9926-8dfb7ddc29ee",
281 "description": "vnfm",
282 "certificateUrl": "",
283 "url": "http://10.74.44.11",
286 "createTime": "2016-07-06 15:33:18"}), "200"]
288 r2 = [0, json.JSONEncoder().encode(
291 "vimInfoId": "111111",
296 "protocolType": "None"},
300 "password": "password"},
301 "interfaceEndpoint": "http://127.0.0.1/api/v1"},
304 "resourceDefinitionId": "xxxxx",
307 "removeResource": "",
309 "computeResourceFlavour": {
312 "vimFlavourId": "12"},
317 "additionalParam": ""
322 "vnfmid": "876543211",
324 "timestamp": "1234567890",
325 "vnfinstanceid": "1",
332 "vmidlist ": ["vmuuid"]},
336 "vmidlist ": ["vmuuid"]}]}
337 mock_call_req.side_effect = [r1, r2]
338 response = self.client.post("/api/ztevmanagerdriver/v1/vnfs/lifecyclechangesnotification",
339 data=json.dumps(req_data), content_type='application/json')
341 self.assertEqual(str(status.HTTP_200_OK), response.status_code)
343 expect_resp_data = None
344 self.assertEqual(expect_resp_data, response.data)
347 @mock.patch.object(restcall, 'call_req')
348 def test_scale(self,mock_call_req):
349 job_info = {"jobid":"801","nfInstanceId":"101"}
350 vnfm_info = {u'userName': u'admin',
352 u'name': u'ZTE_VNFM_237_62',
353 u'vimId': u'516cee95-e8ca-4d26-9268-38e343c2e31e',
354 u'url': u'http://192.168.237.165:2324',
355 u'certificateUrl': u'',
357 u'vnfmId': u'b0797c9b-3da9-459c-b25c-3813e9d8fd70',
358 u'password': u'admin',
359 u'type': u'ztevmanagerdriver',
360 u'createTime': u'2016-10-31 11:08:39',
363 ret = [0, json.JSONEncoder().encode(job_info), "202"]
364 ret_vnfm = [0,json.JSONEncoder().encode(vnfm_info), "200"]
365 mock_call_req.side_effect = [ret_vnfm, ret]
370 "flavour_id":"flavour1",
375 "instances_minimum_number": 1,
376 "instances_maximum_number": 4,
377 "local_affinity_antiaffinity_rule":[
379 "affinity_antiaffinity":"affinity",
388 "name": "demo_aspect",
389 "description": "demo_aspect",
390 "associated_group": "elementGroup1",
398 "group_id": "elementGroup1",
401 "name": "elementGroup1",
403 "members": ["gsu_vm","pfu_vm"],
410 "aspectId":"demo_aspect",
413 "vnfdModel":vnfd_info
418 response = self.client.post("/api/ztevmanagerdriver/v1/100/vnfs/101/scale",
419 data=json.dumps(scale_vnf_data), content_type='application/json')
420 self.assertEqual(str(status.HTTP_202_ACCEPTED), response.status_code)
421 self.assertDictEqual(job_info, response.data)
423 @mock.patch.object(restcall, 'call_req')
424 def test_heal(self,mock_call_req):
425 job_info = {"jobid": "12234455", "nfInstanceId": "10144445666"}
426 vnfm_info = {u'userName': u'admin',
428 u'name': u'ZTE_VNFM_237_62',
429 u'vimId': u'516cee95-e8ca-4d26-9268-38e343c2e31e',
430 u'url': u'http://192.168.237.165:2324',
431 u'certificateUrl': u'',
433 u'vnfmId': u'b0797c9b-3da9-459c-b25c-3813e9d8fd70',
434 u'password': u'admin',
435 u'type': u'ztevmanagerdriver',
436 u'createTime': u'2016-10-31 11:08:39',
439 ret = [0, json.JSONEncoder().encode(job_info), "202"]
440 ret_vnfm = [0, json.JSONEncoder().encode(vnfm_info), "200"]
441 mock_call_req.side_effect = [ret_vnfm, ret]
450 'vmid': '804cca71-9ae9-4511-8e30-d1387718caff',
451 'changtype': 'changed',
453 'vmname': 'ZTE_SSS_111_PP_2_L'
455 'lifecycleoperation': 'operate',
459 response = self.client.post("/api/ztevmanagerdriver/v1/200/vnfs/201/heal",
460 data=json.dumps(heal_vnf_data), content_type='application/json')
462 self.assertEqual(str(status.HTTP_202_ACCEPTED), response.status_code)
463 self.assertDictEqual(job_info, response.data)