1 # Copyright (C) 2018 Verizon. All Rights Reserved.
\r
3 # Licensed under the Apache License, Version 2.0 (the "License");
\r
4 # you may not use this file except in compliance with the License.
\r
5 # You may obtain a copy of the License at
\r
7 # http://www.apache.org/licenses/LICENSE-2.0
\r
9 # Unless required by applicable law or agreed to in writing, software
\r
10 # distributed under the License is distributed on an "AS IS" BASIS,
\r
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
12 # See the License for the specific language governing permissions and
\r
13 # limitations under the License.
\r
18 from django.test import TestCase
\r
19 from rest_framework import status
\r
20 from rest_framework.test import APIClient
\r
22 from lcm.nf.biz.heal_vnf import HealVnf
\r
23 from .const import c1_data_get_tenant_id_1, c9_data_create_vm, c10_data_get_vm, vnfd_model_dict
\r
24 from lcm.pub.database.models import NfInstModel, JobStatusModel, VmInstModel
\r
25 from lcm.pub.utils import restcall
\r
26 from lcm.pub.utils.jobutil import JobUtil
\r
27 from lcm.pub.utils.timeutil import now_time
\r
28 from lcm.pub.vimapi import api
\r
31 class TestNFInstantiate(TestCase):
\r
33 self.client = APIClient()
\r
34 self.grant_result = {
\r
36 "tenant": 'tenantname_1',
\r
38 self.getvmResult = {
\r
46 def assert_job_result(self, job_id, job_progress, job_detail):
\r
47 jobs = JobStatusModel.objects.filter(jobid=job_id,
\r
48 progress=job_progress,
\r
50 self.assertEqual(1, len(jobs))
\r
52 def test_heal_vnf_not_found(self):
\r
54 response = self.client.post("/api/vnflcm/v1/vnf_instances/12/heal", data=req_data, format='json')
\r
55 self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code)
\r
57 def test_heal_vnf_conflict(self):
\r
62 status='NOT_INSTANTIATED').save()
\r
63 response = self.client.post("/api/vnflcm/v1/vnf_instances/1267/heal", data=req_data, format='json')
\r
64 self.assertEqual(status.HTTP_409_CONFLICT, response.status_code)
\r
65 NfInstModel.objects.filter(nfinstid='1267').delete()
\r
67 def test_heal_vnf_badreq(self):
\r
68 NfInstModel(nfinstid='345',
\r
74 vnfSoftwareVersion="V1",
\r
77 status='INSTANTIATED').save()
\r
78 url = "/api/vnflcm/v1/vnf_instances/345/heal"
\r
79 response = self.client.post(url,
\r
80 data={"additionalParams": "1"},
\r
82 NfInstModel.objects.filter(nfinstid='345').delete()
\r
83 self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
\r
85 @mock.patch.object(HealVnf, 'run')
\r
86 def test_heal_vnf_success(self, mock_run):
\r
88 NfInstModel(nfinstid='12',
\r
94 vnfSoftwareVersion="V1",
\r
97 status='INSTANTIATED').save()
\r
98 response = self.client.post("/api/vnflcm/v1/vnf_instances/12/heal", data=req_data, format='json')
\r
99 mock_run.re.return_value = None
\r
100 self.assertEqual(status.HTTP_202_ACCEPTED, response.status_code)
\r
101 NfInstModel(nfinstid='12').delete()
\r
103 @mock.patch.object(restcall, 'call_req')
\r
104 @mock.patch.object(api, 'call')
\r
105 def test_heal_vnf_success_reboot(self, mock_call, mock_call_req):
\r
109 NfInstModel.objects.create(nfinstid='1111',
\r
116 vnfd_model=json.dumps(vnfd_model_dict),
\r
117 status='INSTANTIATED',
\r
120 vnfSoftwareVersion='',
\r
121 vnfConfigurableProperties='todo',
\r
122 localizationLanguage='EN_US',
\r
123 create_time=now_time(),
\r
124 resInfo=json.dumps(res_cache),
\r
125 vimInfo=json.dumps(vim_cache))
\r
127 VmInstModel.objects.create(vmid="1",
\r
132 vmname="vduinstname",
\r
134 tenant="tenantname_1",
\r
135 operationalstate=1)
\r
136 t1_apply_grant_result = [0, json.JSONEncoder().encode(self.grant_result), '200']
\r
137 t2_lcm_notify_result = [0, json.JSONEncoder().encode(''), '200']
\r
138 t3_action_get_vm = [0, json.JSONEncoder().encode(self.getvmResult), '202']
\r
139 t4_action_vm_start_reboot = [0, json.JSONEncoder().encode(''), '202']
\r
140 mock_call_req.side_effect = [t1_apply_grant_result, t2_lcm_notify_result, t3_action_get_vm, t4_action_vm_start_reboot]
\r
141 mock_call.side_effect = [self.getvmResult, None]
\r
144 "additionalParams": {
\r
145 "action": "vmReset",
\r
149 "vmname": "vduinstname"
\r
153 self.nf_inst_id = '1111'
\r
154 self.job_id = JobUtil.create_job('NF', 'HEAL', self.nf_inst_id)
\r
155 JobUtil.add_job_status(self.job_id, 0, "HEAL_VNF_READY")
\r
156 HealVnf(req_data, nf_inst_id=self.nf_inst_id, job_id=self.job_id).run()
\r
157 self.assert_job_result(self.job_id, 100, "Heal Vnf success.")
\r
159 @mock.patch.object(restcall, 'call_req')
\r
160 @mock.patch.object(api, 'call')
\r
161 def test_heal_vnf_success_start(self, mock_call, mock_call_req):
\r
163 res_cache = {"volume": {}, "flavor": {}, "port": {}}
\r
164 res_cache["volume"]["volume_storage1"] = "vol1"
\r
165 res_cache["flavor"]["vdu1Id"] = "flavor1"
\r
166 res_cache["port"]["cpId1"] = "port1"
\r
168 NfInstModel.objects.create(nfinstid='1111',
\r
175 vnfd_model=json.dumps(vnfd_model_dict),
\r
176 status='INSTANTIATED',
\r
179 vnfSoftwareVersion='',
\r
180 vnfConfigurableProperties='todo',
\r
181 localizationLanguage='EN_US',
\r
182 resInfo=json.dumps(res_cache),
\r
183 vimInfo=json.dumps(vim_cache),
\r
184 create_time=now_time())
\r
186 t1_apply_grant_result = [0, json.JSONEncoder().encode(self.grant_result), '200']
\r
187 t2_lcm_notify_result = [0, json.JSONEncoder().encode(''), '200']
\r
188 t3_action_vm_start_create = [0, json.JSONEncoder().encode(''), '202']
\r
189 mock_call_req.side_effect = [t1_apply_grant_result, t2_lcm_notify_result, t3_action_vm_start_create]
\r
190 mock_call.side_effect = [c1_data_get_tenant_id_1, c9_data_create_vm, c10_data_get_vm]
\r
193 "additionalParams": {
\r
194 "action": "vmCreate",
\r
198 "vmname": "vduinstname"
\r
202 self.nf_inst_id = '1111'
\r
203 self.job_id = JobUtil.create_job('NF', 'HEAL', self.nf_inst_id)
\r
204 JobUtil.add_job_status(self.job_id, 0, "HEAL_VNF_READY")
\r
205 HealVnf(req_data, nf_inst_id=self.nf_inst_id, job_id=self.job_id).run()
\r
206 self.assert_job_result(self.job_id, 100, "Heal Vnf success.")
\r