From 8f59e8d4426a11ea3f2a16d0c0479786fd02a027 Mon Sep 17 00:00:00 2001 From: Bharath Thiruveedula Date: Wed, 5 Sep 2018 10:56:13 +0530 Subject: [PATCH] Add Individual LCM Op Occs API to GVNFM Signed-off-by: Bharath Thiruveedula Change-Id: I565342158388b288b3a67080d457420c5443e5e3 Issue-ID: VFC-998 --- lcm/lcm/nf/biz/query_vnf_lcm_op_occ.py | 7 ++++++ lcm/lcm/nf/tests/test_query_vnf_lcm_op.py | 42 ++++++++++++++++++++++++------- lcm/lcm/nf/urls.py | 3 ++- lcm/lcm/nf/views/lcm_op_occs_view.py | 29 +++++++++++++++++++++ 4 files changed, 71 insertions(+), 10 deletions(-) diff --git a/lcm/lcm/nf/biz/query_vnf_lcm_op_occ.py b/lcm/lcm/nf/biz/query_vnf_lcm_op_occ.py index 467dc4f0..01d8b8db 100644 --- a/lcm/lcm/nf/biz/query_vnf_lcm_op_occ.py +++ b/lcm/lcm/nf/biz/query_vnf_lcm_op_occ.py @@ -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 diff --git a/lcm/lcm/nf/tests/test_query_vnf_lcm_op.py b/lcm/lcm/nf/tests/test_query_vnf_lcm_op.py index 2e1c15a0..feabe534 100644 --- a/lcm/lcm/nf/tests/test_query_vnf_lcm_op.py +++ b/lcm/lcm/nf/tests/test_query_vnf_lcm_op.py @@ -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) diff --git a/lcm/lcm/nf/urls.py b/lcm/lcm/nf/urls.py index 7377c085..58f5c392 100644 --- a/lcm/lcm/nf/urls.py +++ b/lcm/lcm/nf/urls.py @@ -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[0-9a-zA-Z_-]+)/terminate$', TerminateVnfView.as_view()), url(r'^api/vnflcm/v1/vnf_instances/(?P[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[0-9a-zA-Z_-]+)$', QuerySingleVnfLcmOpOcc.as_view()), ] diff --git a/lcm/lcm/nf/views/lcm_op_occs_view.py b/lcm/lcm/nf/views/lcm_op_occs_view.py index c49b64c1..de165317 100644 --- a/lcm/lcm/nf/views/lcm_op_occs_view.py +++ b/lcm/lcm/nf/views/lcm_op_occs_view.py @@ -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) -- 2.16.6