Code optimization
[vfc/gvnfm/vnflcm.git] / lcm / lcm / nf / tests / test_create_vnf.py
index afeedb3..1272d38 100644 (file)
 # limitations under the License.
 
 import json
-
+import uuid
 import mock
+
 from django.test import TestCase
 from rest_framework import status
 from rest_framework.test import APIClient
-from lcm.nf.const import vnfpackage_info
-from lcm.pub.database.models import NfInstModel, JobStatusModel
+
+from .const import vnfpackage_info
+from lcm.pub.database.models import NfInstModel
+from lcm.pub.database.models import JobStatusModel
 from lcm.pub.utils import restcall
 from lcm.pub.utils.timeutil import now_time
-import uuid
+from lcm.pub.exceptions import NFLCMException
+from lcm.nf.biz.create_vnf import CreateVnf
 
 
 class TestNFInstantiate(TestCase):
     def setUp(self):
         self.client = APIClient()
+
         self.grant_result = {
             "vimid": 'vimid_1',
             "tenant": 'tenantname_1'
@@ -37,37 +42,55 @@ class TestNFInstantiate(TestCase):
         pass
 
     def assert_job_result(self, job_id, job_progress, job_detail):
-        jobs = JobStatusModel.objects.filter(jobid=job_id,
-                                             progress=job_progress,
-                                             descp=job_detail)
+        jobs = JobStatusModel.objects.filter(
+            jobid=job_id,
+            progress=job_progress,
+            descp=job_detail
+        )
         self.assertEqual(1, len(jobs))
 
     def test_create_vnf_identifier_when_vnf_is_exist(self):
-        NfInstModel.objects.create(nfinstid='1111',
-                                   nf_name='vFW_01',
-                                   package_id='222',
-                                   version='',
-                                   vendor='',
-                                   netype='',
-                                   vnfd_model='',
-                                   status='NOT_INSTANTIATED',
-                                   nf_desc='vFW in Nanjing TIC Edge',
-                                   vnfdid='111',
-                                   create_time=now_time())
+        NfInstModel.objects.create(
+            nfinstid='1111',
+            nf_name='vFW_01',
+            package_id='222',
+            version='',
+            vendor='',
+            netype='',
+            vnfd_model='',
+            status='NOT_INSTANTIATED',
+            nf_desc='vFW in Nanjing TIC Edge',
+            vnfdid='111',
+            create_time=now_time()
+        )
         data = {
             "vnfdId": "111",
             "vnfInstanceName": "vFW_01",
             "vnfInstanceDescription": "vFW in Nanjing TIC Edge"
         }
-        response = self.client.post("/api/vnflcm/v1/vnf_instances", data=data, format='json')
-        self.failUnlessEqual(status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code)
+        response = self.client.post(
+            "/api/vnflcm/v1/vnf_instances",
+            data=data,
+            format='json'
+        )
+        self.assertEqual(
+            status.HTTP_500_INTERNAL_SERVER_ERROR,
+            response.status_code
+        )
         context = json.loads(response.content)
-        self.assertEqual({'error': 'VNF is already exist.'}, context)
+        self.assertEqual({
+            'detail': 'VNF is already exist.',
+            'status': 500
+        }, context)
 
     @mock.patch.object(restcall, 'call_req')
     @mock.patch.object(uuid, 'uuid4')
     def test_create_vnf_identifier(self, mock_uuid4, mock_call_req):
-        r2_get_vnfpackage_from_catalog = [0, json.JSONEncoder().encode(vnfpackage_info), '200']
+        r2_get_vnfpackage_from_catalog = [
+            0,
+            json.JSONEncoder().encode(vnfpackage_info),
+            '200'
+        ]
         mock_call_req.return_value = r2_get_vnfpackage_from_catalog
         mock_uuid4.return_value = "1"
         data = {
@@ -75,6 +98,71 @@ class TestNFInstantiate(TestCase):
             "vnfInstanceName": "vFW_01",
             "vnfInstanceDescription": "vFW in Nanjing TIC Edge"
         }
-        response = self.client.post("/api/vnflcm/v1/vnf_instances", data=data, format='json')
-        expect_data = {"id": "1", "vnfProvider": "huawei", "vnfdVersion": "1.0", "vnfPkgId": "111"}
+        response = self.client.post(
+            "/api/vnflcm/v1/vnf_instances",
+            data=data,
+            format='json'
+        )
+        expect_data = {
+            "id": "1",
+            "vnfProvider": "huawei",
+            'vnfInstanceDescription': 'vFW in Nanjing TIC Edge',
+            'vnfInstanceName': 'vFW_01',
+            "vnfdVersion": "1.0",
+            "vnfPkgId": "111",
+            "instantiationState": "NOT_INSTANTIATED",
+            'vnfSoftwareVersion': '1.0',
+            'vnfdId': '111'
+        }
+        self.assertEqual(status.HTTP_201_CREATED, response.status_code)
         self.assertEqual(expect_data, response.data)
+
+    @mock.patch.object(restcall, 'call_req')
+    @mock.patch.object(uuid, 'uuid4')
+    def test_create_vnf_inner_error(self, mock_uuid4, mock_call_req):
+        mock_call_req.side_effect = NFLCMException('Boom!')
+        mock_uuid4.return_value = "1"
+        data = {
+            "vnfdId": "111",
+            "vnfInstanceName": "vFW_01",
+            "vnfInstanceDescription": "vFW in Nanjing TIC Edge"
+        }
+        response = self.client.post(
+            "/api/vnflcm/v1/vnf_instances",
+            data=data,
+            format='json'
+        )
+        self.assertEqual(status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code)
+
+    def test_create_vnf_bad_req(self):
+        data = {
+            "vnfInstanceName": "vFW_01",
+            "vnfInstanceDescription": "vFW in Nanjing TIC Edge"
+        }
+        response = self.client.post(
+            "/api/vnflcm/v1/vnf_instances",
+            data=data,
+            format='json'
+        )
+        self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
+
+    @mock.patch.object(CreateVnf, 'do_biz')
+    def test_create_vnf_bad_response(self, moc_CreateVnf_do_biz):
+        moc_CreateVnf_do_biz.return_value = {
+            # "id": "1",
+            "vnfProvider": "huawei",
+            "vnfdVersion": "1.0",
+            "vnfPkgId": "111",
+            "instantiationState": "NOT_INSTANTIATED"
+        }
+        data = {
+            "vnfdId": "111",
+            "vnfInstanceName": "vFW_01",
+            "vnfInstanceDescription": "vFW in Nanjing TIC Edge"
+        }
+        response = self.client.post(
+            "/api/vnflcm/v1/vnf_instances",
+            data=data,
+            format='json'
+        )
+        self.assertEqual(status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code)