Add ut test case to terminate vnf
[vfc/gvnfm/vnflcm.git] / lcm / lcm / nf / tests / test_terminate_vnf.py
index 97330b6..a64a7f3 100644 (file)
@@ -22,10 +22,11 @@ from rest_framework import status
 \r
 from lcm.nf.biz.terminate_vnf import TerminateVnf\r
 from lcm.pub.database.models import NfInstModel, JobStatusModel, VmInstModel, NetworkInstModel, SubNetworkInstModel, \\r
-    PortInstModel, FlavourInstModel, StorageInstModel\r
+    PortInstModel, FlavourInstModel, StorageInstModel, SubscriptionModel\r
 from lcm.pub.utils import restcall\r
 from lcm.pub.utils.jobutil import JobUtil\r
 from lcm.pub.utils.timeutil import now_time\r
+from lcm.pub.utils.notificationsutil import NotificationsUtil\r
 from lcm.pub.vimapi import api\r
 \r
 \r
@@ -84,6 +85,7 @@ class TestNFTerminate(TestCase):
         NetworkInstModel.objects.all().delete()\r
         SubNetworkInstModel.objects.all().delete()\r
         PortInstModel.objects.all().delete()\r
+        NfInstModel.objects.all().delete()\r
 \r
     def assert_job_result(self, job_id, job_progress, job_detail):\r
         jobs = JobStatusModel.objects.filter(jobid=job_id,\r
@@ -97,10 +99,49 @@ class TestNFTerminate(TestCase):
             "terminationType": "GRACEFUL",\r
             "gracefulTerminationTimeout": 120\r
         }\r
-        NfInstModel(nfinstid='12', nf_name='VNF1').save()\r
+        NfInstModel(nfinstid='12',\r
+                    nf_name='VNF1',\r
+                    nf_desc="VNF DESC",\r
+                    vnfdid="1",\r
+                    netype="XGW",\r
+                    vendor="ZTE",\r
+                    vnfSoftwareVersion="V1",\r
+                    version="V1",\r
+                    package_id="2",\r
+                    status='INSTANTIATED').save()\r
         mock_run.re.return_value = None\r
         response = self.client.post("/api/vnflcm/v1/vnf_instances/12/terminate", data=req_data, format='json')\r
-        self.failUnlessEqual(status.HTTP_202_ACCEPTED, response.status_code)\r
+        self.failUnlessEqual(status.HTTP_202_ACCEPTED, response.status_code, response.content)\r
+\r
+    @mock.patch.object(TerminateVnf, 'run')\r
+    def test_terminate_vnf_not_found(self, mock_run):\r
+        req_data = {\r
+            "terminationType": "GRACEFUL",\r
+            "gracefulTerminationTimeout": 120\r
+        }\r
+        mock_run.re.return_value = None\r
+        response = self.client.post("/api/vnflcm/v1/vnf_instances/567/terminate", data=req_data, format='json')\r
+        self.failUnlessEqual(status.HTTP_404_NOT_FOUND, response.status_code, response.content)\r
+\r
+    @mock.patch.object(TerminateVnf, 'run')\r
+    def test_terminate_vnf_conflict(self, mock_run):\r
+        req_data = {\r
+            "terminationType": "GRACEFUL",\r
+            "gracefulTerminationTimeout": 120\r
+        }\r
+        NfInstModel(nfinstid='123',\r
+                    nf_name='VNF1',\r
+                    nf_desc="VNF DESC",\r
+                    vnfdid="1",\r
+                    netype="XGW",\r
+                    vendor="ZTE",\r
+                    vnfSoftwareVersion="V1",\r
+                    version="V1",\r
+                    package_id="2",\r
+                    status='NOT_INSTANTIATED').save()\r
+        mock_run.re.return_value = None\r
+        response = self.client.post("/api/vnflcm/v1/vnf_instances/123/terminate", data=req_data, format='json')\r
+        self.failUnlessEqual(status.HTTP_409_CONFLICT, response.status_code, response.content)\r
 \r
     def test_terminate_vnf_when_inst_id_not_exist(self):\r
         data = {\r
@@ -115,7 +156,8 @@ class TestNFTerminate(TestCase):
 \r
     @mock.patch.object(restcall, 'call_req')\r
     @mock.patch.object(api, 'call')\r
-    def test_terminate_vnf_success(self, mock_call, mock_call_req):\r
+    @mock.patch.object(NotificationsUtil, 'post_notification')\r
+    def test_terminate_vnf_success(self, mock_post_notification, mock_call, mock_call_req):\r
         NfInstModel.objects.create(nfinstid='1111',\r
                                    nf_name='2222',\r
                                    vnfminstid='1',\r
@@ -131,6 +173,32 @@ class TestNFTerminate(TestCase):
                                    vnfConfigurableProperties='todo',\r
                                    localizationLanguage='EN_US',\r
                                    create_time=now_time())\r
+\r
+        SubscriptionModel.objects.create(\r
+            subscription_id=str(uuid.uuid4()),\r
+            callback_uri='api/gvnfmdriver/v1/vnfs/lifecyclechangesnotification',\r
+            auth_info=json.JSONEncoder().encode({\r
+                'authType': ['BASIC'],\r
+                'paramsBasic': {\r
+                    'userName': 'username',\r
+                    'password': 'password'\r
+                }\r
+            }),\r
+            notification_types=str([\r
+                'VnfLcmOperationOccurrenceNotification',\r
+                'VnfIdentifierCreationNotification',\r
+                'VnfIdentifierDeletionNotification'\r
+            ]),\r
+            operation_types=str(['TERMINATE']),\r
+            operation_states=str(['COMPLETED']),\r
+            vnf_instance_filter=json.JSONEncoder().encode({\r
+                'vnfdIds': ['111'],\r
+                'vnfProductsFromProviders': [],\r
+                'vnfInstanceIds': ['1111'],\r
+                'vnfInstanceNames': [],\r
+            })\r
+        )\r
+\r
         t1_apply_grant_result = [0, json.JSONEncoder().encode(\r
             {\r
                 "id": "1",\r
@@ -147,6 +215,7 @@ class TestNFTerminate(TestCase):
         t3_delete_flavor = [0, json.JSONEncoder().encode({"vim_id": "vimid_1"}), '200']\r
         mock_call_req.side_effect = [t1_apply_grant_result, t2_lcm_notify_result, t3_delete_flavor]\r
         mock_call.return_value = None\r
+        mock_post_notification.return_value = None\r
         data = {\r
             "terminationType": "FORCEFUL",\r
             "gracefulTerminationTimeout": 120\r