1 # Copyright 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.
19 from django.test import TestCase
20 from rest_framework import status
21 from rest_framework.test import APIClient
23 from .const import vnfpackage_info
24 from lcm.pub.database.models import NfInstModel
25 from lcm.pub.database.models import JobStatusModel
26 from lcm.pub.utils import restcall
27 from lcm.pub.utils.timeutil import now_time
28 from lcm.pub.exceptions import NFLCMException
29 from lcm.nf.biz.create_vnf import CreateVnf
32 class TestNFInstantiate(TestCase):
34 self.client = APIClient()
38 "tenant": 'tenantname_1'
44 def assert_job_result(self, job_id, job_progress, job_detail):
45 jobs = JobStatusModel.objects.filter(
47 progress=job_progress,
50 self.assertEqual(1, len(jobs))
52 def test_create_vnf_identifier_when_vnf_is_exist(self):
53 NfInstModel.objects.create(
61 status='NOT_INSTANTIATED',
62 nf_desc='vFW in Nanjing TIC Edge',
64 create_time=now_time()
68 "vnfInstanceName": "vFW_01",
69 "vnfInstanceDescription": "vFW in Nanjing TIC Edge"
71 response = self.client.post(
72 "/api/vnflcm/v1/vnf_instances",
77 status.HTTP_500_INTERNAL_SERVER_ERROR,
80 context = json.loads(response.content)
82 'detail': 'VNF is already exist.',
86 @mock.patch.object(restcall, 'call_req')
87 @mock.patch.object(uuid, 'uuid4')
88 def test_create_vnf_identifier(self, mock_uuid4, mock_call_req):
89 r2_get_vnfpackage_from_catalog = [
91 json.JSONEncoder().encode(vnfpackage_info),
94 mock_call_req.return_value = r2_get_vnfpackage_from_catalog
95 mock_uuid4.return_value = "1"
98 "vnfInstanceName": "vFW_01",
99 "vnfInstanceDescription": "vFW in Nanjing TIC Edge"
101 response = self.client.post(
102 "/api/vnflcm/v1/vnf_instances",
108 "vnfProvider": "huawei",
109 "vnfdVersion": "1.0",
111 "instantiationState": "NOT_INSTANTIATED"
113 self.assertEqual(status.HTTP_201_CREATED, response.status_code)
114 self.assertEqual(expect_data, response.data)
116 @mock.patch.object(restcall, 'call_req')
117 @mock.patch.object(uuid, 'uuid4')
118 def test_create_vnf_inner_error(self, mock_uuid4, mock_call_req):
119 mock_call_req.side_effect = NFLCMException('Boom!')
120 mock_uuid4.return_value = "1"
123 "vnfInstanceName": "vFW_01",
124 "vnfInstanceDescription": "vFW in Nanjing TIC Edge"
126 response = self.client.post(
127 "/api/vnflcm/v1/vnf_instances",
131 self.assertEqual(status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code)
133 def test_create_vnf_bad_req(self):
135 "vnfInstanceName": "vFW_01",
136 "vnfInstanceDescription": "vFW in Nanjing TIC Edge"
138 response = self.client.post(
139 "/api/vnflcm/v1/vnf_instances",
143 self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
145 @mock.patch.object(CreateVnf, 'do_biz')
146 def test_create_vnf_bad_response(self, moc_CreateVnf_do_biz):
147 moc_CreateVnf_do_biz.return_value = {
149 "vnfProvider": "huawei",
150 "vnfdVersion": "1.0",
152 "instantiationState": "NOT_INSTANTIATED"
156 "vnfInstanceName": "vFW_01",
157 "vnfInstanceDescription": "vFW in Nanjing TIC Edge"
159 response = self.client.post(
160 "/api/vnflcm/v1/vnf_instances",
164 self.assertEqual(status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code)