update link to upper-constraints.txt
[vfc/nfvo/lcm.git] / lcm / ns / tests / test_ns_update.py
1 import mock
2 import time
3
4 from django.test import TestCase
5 from rest_framework.test import APIClient
6 from rest_framework import status
7
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
15
16
17 class TestScaleAspect(TestCase):
18     def setUp(self):
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()
24
25     def tearDown(self):
26         NSInstModel.objects.all().delete()
27         JobModel.objects.all().delete()
28
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)
32
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)
38
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)
46
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)
55         ns_heal_service.run()
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')
59
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)
68         ns_heal_service.run()
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')
72
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)
77         ns_heal_service.run()
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')
80
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)
84         ns_heal_service.run()
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')
88
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)
92         ns_heal_service.run()
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')
96
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')
104
105     def test_ns_update_asynchronous_tasks_when_vnfinstanceid_does_not_exist(self):
106         request_data = {
107             "updateType": "OPERATE_VNF",
108             "OperateVnfData": [{}]
109         }
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')
115
116     def test_ns_update_asynchronous_tasks_when_changestateto_does_not_exist(self):
117         request_data = {
118             "updateType": "OPERATE_VNF",
119             "OperateVnfData": [
120                 {
121                     "vnfInstanceId": "test_vnf_001"
122                 }
123             ]
124         }
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')