4 from django.test import TestCase
5 from rest_framework.test import APIClient
6 from rest_framework import status
8 from lcm.jobs.enum import JOB_TYPE, JOB_ACTION, JOB_PROGRESS
9 from lcm.ns.biz.ns_update import NSUpdateService
10 from lcm.ns.enum import NS_INST_STATUS
11 from lcm.ns.tests import UPDATE_NS_DICT
12 from lcm.ns_vnfs.biz.update_vnfs import NFOperateService
13 from lcm.pub.database.models import NSInstModel, JobModel, NSLcmOpOccModel
14 from lcm.pub.utils.jobutil import JobUtil
17 class TestScaleAspect(TestCase):
19 self.client = APIClient()
20 self.ns_inst_id = 'test_ns_update_001'
21 self.url = '/api/nslcm/v1/ns/%s/update' % self.ns_inst_id
22 self.job_id = JobUtil.create_job(JOB_TYPE.NS, JOB_ACTION.HEAL, self.ns_inst_id)
23 NSInstModel(id=self.ns_inst_id).save()
26 NSInstModel.objects.all().delete()
27 JobModel.objects.all().delete()
29 def test_ns_update_when_require_is_not_valid(self):
30 response = self.client.post(self.url, data={}, format='json')
31 self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
33 @mock.patch.object(NSUpdateService, 'run')
34 def test_ns_update_url(self, mock_run):
35 mock_run.return_value = None
36 response = self.client.post(self.url, data=UPDATE_NS_DICT, format='json')
37 self.assertEqual(status.HTTP_202_ACCEPTED, response.status_code)
39 @mock.patch.object(JobUtil, 'create_job')
40 @mock.patch.object(NSUpdateService, 'run')
41 def test_ns_update_url_nslcmexception(self, mock_run, mock_create_job):
42 mock_run.return_value = None
43 mock_create_job.return_value = None
44 response = self.client.post(self.url, data=UPDATE_NS_DICT, format='json')
45 self.assertEqual(status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code)
47 @mock.patch.object(time, 'sleep')
48 @mock.patch.object(NFOperateService, 'run')
49 @mock.patch.object(JobModel.objects, 'get')
50 def test_ns_update_asynchronous_tasks(self, mock_get, mock_run, mock_sleep):
51 mock_sleep.return_value = None
52 mock_run.return_value = None
53 mock_get.return_value = JobModel(progress=JOB_PROGRESS.FINISHED)
54 ns_heal_service = NSUpdateService(self.ns_inst_id, UPDATE_NS_DICT, self.job_id)
56 self.assertEqual(NSInstModel.objects.filter(id=self.ns_inst_id).first().status, NS_INST_STATUS.ACTIVE)
57 self.assertEqual(JobModel.objects.filter(jobid=self.job_id).first().progress, JOB_PROGRESS.FINISHED)
58 self.assertEqual(NSLcmOpOccModel.objects.filter(id=ns_heal_service.occ_id).first().operation_state, 'COMPLETED')
60 @mock.patch.object(time, 'sleep')
61 @mock.patch.object(NFOperateService, 'run')
62 @mock.patch.object(JobModel.objects, 'get')
63 def test_ns_update_asynchronous_tasks_when_nf_update_error(self, mock_get, mock_run, mock_sleep):
64 mock_sleep.return_value = None
65 mock_run.return_value = None
66 mock_get.return_value = JobModel(progress=JOB_PROGRESS.ERROR)
67 ns_heal_service = NSUpdateService(self.ns_inst_id, UPDATE_NS_DICT, self.job_id)
69 self.assertEqual(NSInstModel.objects.filter(id=self.ns_inst_id).first().status, NS_INST_STATUS.UPDATING)
70 self.assertEqual(JobModel.objects.filter(jobid=self.job_id).first().progress, JOB_PROGRESS.ERROR)
71 self.assertEqual(NSLcmOpOccModel.objects.filter(id=ns_heal_service.occ_id).first().operation_state, 'FAILED')
73 def test_ns_update_asynchronous_tasks_when_ns_does_not_exist(self):
74 ns_instance_id = 'test_ns_update_002'
75 job_id = JobUtil.create_job(JOB_TYPE.NS, JOB_ACTION.UPDATE, ns_instance_id)
76 ns_heal_service = NSUpdateService(ns_instance_id, UPDATE_NS_DICT, job_id)
78 self.assertEqual(JobModel.objects.filter(jobid=job_id).first().progress, JOB_PROGRESS.ERROR)
79 self.assertEqual(NSLcmOpOccModel.objects.filter(id=ns_heal_service.occ_id).first().operation_state, 'FAILED')
81 def test_ns_update_asynchronous_tasks_when_updatetype_parameter_does_not_exist(self):
82 request_data = {"updateType": ""}
83 ns_heal_service = NSUpdateService(self.ns_inst_id, request_data, self.job_id)
85 self.assertEqual(NSInstModel.objects.filter(id=self.ns_inst_id).first().status, None)
86 self.assertEqual(JobModel.objects.filter(jobid=self.job_id).first().progress, JOB_PROGRESS.ERROR)
87 self.assertEqual(NSLcmOpOccModel.objects.filter(id=ns_heal_service.occ_id).first().operation_state, 'FAILED')
89 def test_ns_update_asynchronous_tasks_when_updatetype_not_operate_vnf(self):
90 request_data = {"updateType": "ADD_VNF"}
91 ns_heal_service = NSUpdateService(self.ns_inst_id, request_data, self.job_id)
93 self.assertEqual(NSInstModel.objects.filter(id=self.ns_inst_id).first().status, NS_INST_STATUS.UPDATING)
94 self.assertEqual(JobModel.objects.filter(jobid=self.job_id).first().progress, JOB_PROGRESS.ERROR)
95 self.assertEqual(NSLcmOpOccModel.objects.filter(id=ns_heal_service.occ_id).first().operation_state, 'FAILED')
97 def test_ns_update_asynchronous_tasks_when_operatevnfdata_does_not_exist(self):
98 request_data = {"updateType": "OPERATE_VNF"}
99 ns_heal_service = NSUpdateService(self.ns_inst_id, request_data, self.job_id)
100 ns_heal_service.run()
101 self.assertEqual(NSInstModel.objects.filter(id=self.ns_inst_id).first().status, NS_INST_STATUS.UPDATING)
102 self.assertEqual(JobModel.objects.filter(jobid=self.job_id).first().progress, JOB_PROGRESS.ERROR)
103 self.assertEqual(NSLcmOpOccModel.objects.filter(id=ns_heal_service.occ_id).first().operation_state, 'FAILED')
105 def test_ns_update_asynchronous_tasks_when_vnfinstanceid_does_not_exist(self):
107 "updateType": "OPERATE_VNF",
108 "OperateVnfData": [{}]
110 ns_heal_service = NSUpdateService(self.ns_inst_id, request_data, self.job_id)
111 ns_heal_service.run()
112 self.assertEqual(NSInstModel.objects.filter(id=self.ns_inst_id).first().status, NS_INST_STATUS.UPDATING)
113 self.assertEqual(JobModel.objects.filter(jobid=self.job_id).first().progress, JOB_PROGRESS.ERROR)
114 self.assertEqual(NSLcmOpOccModel.objects.filter(id=ns_heal_service.occ_id).first().operation_state, 'FAILED')
116 def test_ns_update_asynchronous_tasks_when_changestateto_does_not_exist(self):
118 "updateType": "OPERATE_VNF",
121 "vnfInstanceId": "test_vnf_001"
125 ns_heal_service = NSUpdateService(self.ns_inst_id, request_data, self.job_id)
126 ns_heal_service.run()
127 self.assertEqual(NSInstModel.objects.filter(id=self.ns_inst_id).first().status, NS_INST_STATUS.UPDATING)
128 self.assertEqual(JobModel.objects.filter(jobid=self.job_id).first().progress, JOB_PROGRESS.ERROR)
129 self.assertEqual(NSLcmOpOccModel.objects.filter(id=ns_heal_service.occ_id).first().operation_state, 'FAILED')