From dd8d72e678369aaf122bd3aecbcd336acdca3dd6 Mon Sep 17 00:00:00 2001 From: laili Date: Fri, 14 Sep 2018 11:08:50 +0800 Subject: Add a subscription api on gvnfmdriver. - Modify subscription api. Change-Id: I26c95969390c64bc08f77036de342bc66caed664 Issue-ID: VFC-1118 Signed-off-by: laili --- gvnfmadapter/driver/interfaces/tests.py | 50 +++++++++++++++++++++++++++++---- gvnfmadapter/driver/interfaces/urls.py | 3 +- gvnfmadapter/driver/interfaces/views.py | 10 ++++--- 3 files changed, 51 insertions(+), 12 deletions(-) diff --git a/gvnfmadapter/driver/interfaces/tests.py b/gvnfmadapter/driver/interfaces/tests.py index 4d58137..84607a9 100644 --- a/gvnfmadapter/driver/interfaces/tests.py +++ b/gvnfmadapter/driver/interfaces/tests.py @@ -636,6 +636,20 @@ class InterfacesTest(TestCase): @mock.patch.object(restcall, 'call_req') def test_subscribe_successfully(self, mock_call_req): + vnfm_info = { + "vnfmId": "19ecbb3a-3242-4fa3-9926-8dfb7ddc29ee", + "name": "g_vnfm", + "type": "gvnfmdriver", + "vimId": "", + "vendor": "ZTE", + "version": "v1.0", + "description": "vnfm", + "certificateUrl": "", + "url": "http://10.74.44.11", + "userName": "admin", + "password": "admin", + "createTime": "2016-07-06 15:33:18" + } lccn_subscription_request_data = { "filter": { "notificationTypes": ["VnfLcmOperationOccurrenceNotification"], @@ -663,14 +677,33 @@ class InterfacesTest(TestCase): "self": {"href": "URI of this resource."} }, } - mock_call_req.return_value = [0, json.JSONEncoder().encode(lccn_subscription_data), status.HTTP_201_CREATED] - response = self.client.post("/api/gvnfmdriver/v1/subscriptions", json.dumps(lccn_subscription_request_data), - content_type='application/json') + ret_of_vnfminfo_from_nslcm = [0, json.JSONEncoder().encode(vnfm_info), "200"] + ret_from_vnfm = [0, json.JSONEncoder().encode(lccn_subscription_data), status.HTTP_201_CREATED] + mock_call_req.side_effect = [ret_of_vnfminfo_from_nslcm, ret_from_vnfm] + response = self.client.post( + "/api/gvnfmdriver/v1/%s/subscriptions" % vnfm_info['vnfmId'], + json.dumps(lccn_subscription_request_data), + content_type='application/json' + ) self.assertEqual(status.HTTP_201_CREATED, response.status_code) self.assertEqual(lccn_subscription_data, response.data) @mock.patch.object(restcall, 'call_req') def test_subscribe_failed(self, mock_call_req): + vnfm_info = { + "vnfmId": "19ecbb3a-3242-4fa3-9926-8dfb7ddc29ee", + "name": "g_vnfm", + "type": "gvnfmdriver", + "vimId": "", + "vendor": "ZTE", + "version": "v1.0", + "description": "vnfm", + "certificateUrl": "", + "url": "http://10.74.44.11", + "userName": "admin", + "password": "admin", + "createTime": "2016-07-06 15:33:18" + } lccn_subscription_request_data = { "filter": { "notificationTypes": ["VnfLcmOperationOccurrenceNotification"], @@ -686,7 +719,12 @@ class InterfacesTest(TestCase): } } } - mock_call_req.return_value = [1, None, status.HTTP_303_SEE_OTHER] - response = self.client.post("/api/gvnfmdriver/v1/subscriptions", json.dumps(lccn_subscription_request_data), - content_type='application/json') + ret_of_vnfminfo_from_nslcm = [0, json.JSONEncoder().encode(vnfm_info), "200"] + ret_from_vnfm = [1, None, status.HTTP_303_SEE_OTHER] + mock_call_req.side_effect = [ret_of_vnfminfo_from_nslcm, ret_from_vnfm] + response = self.client.post( + "/api/gvnfmdriver/v1/%s/subscriptions" % vnfm_info['vnfmId'], + json.dumps(lccn_subscription_request_data), + content_type='application/json' + ) self.assertEqual(status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code) diff --git a/gvnfmadapter/driver/interfaces/urls.py b/gvnfmadapter/driver/interfaces/urls.py index 40b8f3b..ac39eff 100644 --- a/gvnfmadapter/driver/interfaces/urls.py +++ b/gvnfmadapter/driver/interfaces/urls.py @@ -22,8 +22,7 @@ urlpatterns = [ url(r'^api/(?P[0-9a-zA-Z\-\_]+)/v1/(?P[0-9a-zA-Z\-\_]+)/vnfs/(?P[0-9a-zA-Z\-\_]+)/terminate$', VnfTermInfo.as_view()), url(r'^api/(?P[0-9a-zA-Z\-\_]+)/v1/(?P[0-9a-zA-Z\-\_]+)/vnfs/(?P[0-9a-zA-Z\-\_]+)$', VnfQueryInfo.as_view()), url(r'^api/(?P[0-9a-zA-Z\-\_]+)/v1/(?P[0-9a-zA-Z\-\_]+)/jobs/(?P[0-9a-zA-Z\-\_]+)$', VnfOperInfo.as_view()), - url(r'^api/(?P[0-9a-zA-Z\-\_]+)/v1/subscriptions$', Subscription.as_view()), - + url(r'^api/(?P[0-9a-zA-Z\-\_]+)/v1/(?P[0-9a-zA-Z\-\_]+)/subscriptions$', Subscription.as_view()), url(r'^api/(?P[0-9a-zA-Z\-\_]+)/v1/vnfpackages$', VnfPkgsInfo.as_view()), url(r'^api/(?P[0-9a-zA-Z\-\_]+)/v1/resource/grant$', VnfGrantInfo.as_view()), diff --git a/gvnfmadapter/driver/interfaces/views.py b/gvnfmadapter/driver/interfaces/views.py index 1cf6fa2..32897c2 100644 --- a/gvnfmadapter/driver/interfaces/views.py +++ b/gvnfmadapter/driver/interfaces/views.py @@ -356,14 +356,14 @@ class Subscription(APIView): status.HTTP_500_INTERNAL_SERVER_ERROR: "INTERNAL_SERVER_ERROR" } ) - def post(self, request, vnfmtype): + def post(self, request, vnfmtype, vnfmid): logger.debug("Subscription--post::> %s" % request.data) logger.debug("Subscription begin!") try: lccn_subscription_request_serializer = LccnSubscriptionRequestSerializer(data=request.data) if not lccn_subscription_request_serializer.is_valid(): raise GvnfmDriverException(lccn_subscription_request_serializer.error_messages) - resp_data = do_subscription(request.data) + resp_data = do_subscription(request.data, vnfmid) lccn_subscription_serializer = LccnSubscriptionSerializer(data=resp_data) if not lccn_subscription_serializer.is_valid(): logger.debug("[%s]resp_data=%s" % (fun_name(), resp_data)) @@ -529,9 +529,11 @@ def do_queryvnf(data, vnfm_id, vnfInstanceId): return json.JSONDecoder().decode(ret[1]) -def do_subscription(data): +def do_subscription(data, vnfm_id): logger.debug("[%s] request.data=%s", fun_name(), data) - ret = req_by_msb("api/vnflcm/v1/subscriptions", "POST", json.JSONEncoder().encode(data)) + vnfm_info = get_vnfminfo_from_nslcm(vnfm_id) + logger.debug("[do_deletevnf] vnfm_info=[%s]", vnfm_info) + ret = call_vnfm("api/vnflcm/v1/subscriptions", "POST", vnfm_info, data) logger.debug("[%s] call_req ret=%s", fun_name(), ret) if ret[0] != 0: logger.error("Status code is %s, detail is %s.", ret[2], ret[1]) -- cgit 1.2.3-korg