Add Individual LCM Op Occs API to GVNFM 91/64591/1
authorBharath Thiruveedula <bharath.thiruveedula@verizon.com>
Wed, 5 Sep 2018 05:26:13 +0000 (10:56 +0530)
committerBharath Thiruveedula <bharath.thiruveedula@verizon.com>
Wed, 5 Sep 2018 05:26:17 +0000 (10:56 +0530)
Signed-off-by: Bharath Thiruveedula<bharath.thiruveedula@verizon.com>
Change-Id: I565342158388b288b3a67080d457420c5443e5e3
Issue-ID: VFC-998

lcm/lcm/nf/biz/query_vnf_lcm_op_occ.py
lcm/lcm/nf/tests/test_query_vnf_lcm_op.py
lcm/lcm/nf/urls.py
lcm/lcm/nf/views/lcm_op_occs_view.py

index 467dc4f..01d8b8d 100644 (file)
@@ -70,3 +70,10 @@ class QueryVnfLcmOpOcc:
             '_links': json.loads(lcm_op.links)
         }
         return resp_data
+
+    def query_single_vnf_lcm_op_occ(self):
+        lcm_op = VNFLcmOpOccModel.objects.filter(id=self.vnf_lcm_op_occ_id)
+        if not lcm_op.exists():
+            raise NFLCMException('LCM Operation Occurance does not exist')
+        resp_data = self.fill_resp_data(lcm_op[0])
+        return resp_data
index 2e1c15a..feabe53 100644 (file)
@@ -25,7 +25,7 @@ class TestVNFLcmOpOccs(TestCase):
         self.client = Client()
         self.vnf_lcm_op_occ_id = "99442b18-a5c7-11e8-998c-bf1755941f16"
         VNFLcmOpOccModel.objects.all().delete()
-        self.test_single_vnf_lcm_op = [{
+        self.test_single_vnf_lcm_op = {
             "id": "99442b18-a5c7-11e8-998c-bf1755941f16",
             "operationState": "STARTING",
             "stateEnteredTime": "2018-07-09",
@@ -45,7 +45,7 @@ class TestVNFLcmOpOccs(TestCase):
                 "self": "demo",
                 "vnfInstance": "demo"
             }
-        }]
+        }
         self.test_vnflcmop_with_exclude_default = [{
             "id": "99442b18-a5c7-11e8-998c-bf1755941f16",
             "operationState": "STARTING",
@@ -85,12 +85,12 @@ class TestVNFLcmOpOccs(TestCase):
             }
         }]
         self.test_multiple_vnf_lcm_op.append(
-            self.test_single_vnf_lcm_op[0])
+            self.test_single_vnf_lcm_op)
 
     def tearDown(self):
         pass
 
-    def test_get_vnflcmopocc(self):
+    def test_get_vnflcmopoccs(self):
         lcm_op_id = "99442b18-a5c7-11e8-998c-bf1755941f16"
         vnf_instance_id = "cd552c9c-ab6f-11e8-b354-236c32aa91a1"
         VNFLcmOpOccModel(id=lcm_op_id, operation_state="STARTING",
@@ -102,9 +102,9 @@ class TestVNFLcmOpOccs(TestCase):
                          links=json.dumps({"self": "demo", "vnfInstance": "demo"})).save()
         response = self.client.get("/api/vnflcm/v1/vnf_lcm_op_occs", format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
-        self.assertEqual(self.test_single_vnf_lcm_op, response.data)
+        self.assertEqual([self.test_single_vnf_lcm_op], response.data)
 
-    def test_get_vnflcmopocc_with_id_not_exist(self):
+    def test_get_vnflcmopoccs_with_id_not_exist(self):
         response = self.client.get("/api/vnflcm/v1/vnf_lcm_op_occs?id=dummy", format='json')
         self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR)
         expected_data = {
@@ -113,7 +113,7 @@ class TestVNFLcmOpOccs(TestCase):
         }
         self.assertEqual(expected_data, response.data)
 
-    def test_get_vnflcmopocc_with_filters(self):
+    def test_get_vnflcmopoccs_with_filters(self):
         lcm_op_id = "a6b9415c-ab99-11e8-9d37-dbb5e0378955"
         vnf_instance_id = "cd552c9c-ab6f-11e8-b354-236c32aa91a1"
         VNFLcmOpOccModel(id=lcm_op_id, operation_state="STARTING",
@@ -138,13 +138,13 @@ class TestVNFLcmOpOccs(TestCase):
 
         response = self.client.get("/api/vnflcm/v1/vnf_lcm_op_occs?operation=SCALE", format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
-        self.assertEqual(self.test_single_vnf_lcm_op, response.data)
+        self.assertEqual([self.test_single_vnf_lcm_op], response.data)
 
         response = self.client.get("/api/vnflcm/v1/vnf_lcm_op_occs?vnfInstanceId=%s" % vnf_instance_id, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
         self.assertEqual(self.test_multiple_vnf_lcm_op, response.data)
 
-    def test_get_vnflcmopocc_with_extra_flags(self):
+    def test_get_vnflcmopoccs_with_extra_flags(self):
         lcm_op_id = "99442b18-a5c7-11e8-998c-bf1755941f16"
         vnf_instance_id = "cd552c9c-ab6f-11e8-b354-236c32aa91a1"
         VNFLcmOpOccModel(id=lcm_op_id, operation_state="STARTING",
@@ -157,3 +157,27 @@ class TestVNFLcmOpOccs(TestCase):
         response = self.client.get("/api/vnflcm/v1/vnf_lcm_op_occs?exclude_default", format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
         self.assertEqual(self.test_vnflcmop_with_exclude_default, response.data)
+
+    def test_get_vnflcmopocc_with_id(self):
+        lcm_op_id = "99442b18-a5c7-11e8-998c-bf1755941f16"
+        vnf_instance_id = "cd552c9c-ab6f-11e8-b354-236c32aa91a1"
+        VNFLcmOpOccModel(id=lcm_op_id, operation_state="STARTING",
+                         state_entered_time="2018-07-09", start_time="2018-07-09",
+                         vnf_instance_id=vnf_instance_id,
+                         grant_id=None, operation="SCALE", is_automatic_invocation=False,
+                         operation_params='{}', is_cancel_pending=False, cancel_mode=None,
+                         error=None, resource_changes=None, changed_ext_connectivity=None,
+                         links=json.dumps({"self": "demo", "vnfInstance": "demo"})).save()
+        response = self.client.get("/api/vnflcm/v1/vnf_lcm_op_occs/" + lcm_op_id, format='json')
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+        self.assertEqual(self.test_single_vnf_lcm_op, response.data)
+
+    def test_single_vnflcmopocc_with_unknown_id(self):
+        lcm_op_id = "99442b18-a5c7-11e8-998c-bf1755941f16"
+        response = self.client.get("/api/vnflcm/v1/vnf_lcm_op_occs/" + lcm_op_id, format='json')
+        self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR)
+        expected_data = {
+            "status": 500,
+            "detail": "LCM Operation Occurance does not exist"
+        }
+        self.assertEqual(expected_data, response.data)
index 7377c08..58f5c39 100644 (file)
@@ -19,7 +19,7 @@ from lcm.nf.views.instantiate_vnf_view import InstantiateVnfView
 from lcm.nf.views.terminate_vnf_view import TerminateVnfView
 from lcm.nf.views.subscriptions_view import SubscriptionsView
 from lcm.nf.views.operate_vnf_view import OperateVnfView
-from lcm.nf.views.lcm_op_occs_view import QueryMultiVnfLcmOpOccs
+from lcm.nf.views.lcm_op_occs_view import QueryMultiVnfLcmOpOccs, QuerySingleVnfLcmOpOcc
 
 urlpatterns = [
     url(r'^api/vnflcm/v1/subscriptions$', SubscriptionsView.as_view()),
@@ -29,4 +29,5 @@ urlpatterns = [
     url(r'^api/vnflcm/v1/vnf_instances/(?P<instanceid>[0-9a-zA-Z_-]+)/terminate$', TerminateVnfView.as_view()),
     url(r'^api/vnflcm/v1/vnf_instances/(?P<instanceid>[0-9a-zA-Z_-]+)/operate$', OperateVnfView.as_view()),
     url(r'^api/vnflcm/v1/vnf_lcm_op_occs$', QueryMultiVnfLcmOpOccs.as_view()),
+    url(r'^api/vnflcm/v1/vnf_lcm_op_occs/(?P<lcmopoccid>[0-9a-zA-Z_-]+)$', QuerySingleVnfLcmOpOcc.as_view()),
 ]
index c49b64c..de16531 100644 (file)
@@ -22,6 +22,7 @@ from rest_framework.views import APIView
 
 from lcm.nf.biz.query_vnf_lcm_op_occ import QueryVnfLcmOpOcc
 from lcm.nf.serializers.response import ProblemDetailsSerializer
+from lcm.nf.serializers.vnf_lcm_op_occ import VNFLCMOpOccSerializer
 from lcm.nf.serializers.vnf_lcm_op_occs import VNFLCMOpOccsSerializer
 from lcm.pub.exceptions import NFLCMException
 
@@ -80,3 +81,31 @@ class QueryMultiVnfLcmOpOccs(APIView):
             logger.error(traceback.format_exc())
             problem_details_serializer = get_problem_details_serializer(status.HTTP_500_INTERNAL_SERVER_ERROR, e.message)
             return Response(data=problem_details_serializer.data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+
+
+class QuerySingleVnfLcmOpOcc(APIView):
+    @swagger_auto_schema(
+        responses={
+            status.HTTP_200_OK: VNFLCMOpOccSerializer(),
+            status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
+        }
+    )
+    def get(self, request, lcmopoccid):
+        logger.debug("QuerySingleVnfLcmOpOcc--get::> %s" % request.query_params)
+        try:
+            resp_data = QueryVnfLcmOpOcc(request.query_params, lcm_op_occ_id=lcmopoccid).query_single_vnf_lcm_op_occ()
+
+            vnf_lcm_op_occ_serializer = VNFLCMOpOccSerializer(data=resp_data)
+            if not vnf_lcm_op_occ_serializer.is_valid():
+                raise NFLCMException(vnf_lcm_op_occ_serializer.errors)
+
+            return Response(data=vnf_lcm_op_occ_serializer.data, status=status.HTTP_200_OK)
+        except NFLCMException as e:
+            logger.error(e.message)
+            problem_details_serializer = get_problem_details_serializer(status.HTTP_500_INTERNAL_SERVER_ERROR, e.message)
+            return Response(data=problem_details_serializer.data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+        except Exception as e:
+            logger.error(e.message)
+            logger.error(traceback.format_exc())
+            problem_details_serializer = get_problem_details_serializer(status.HTTP_500_INTERNAL_SERVER_ERROR, e.message)
+            return Response(data=problem_details_serializer.data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)