Merge "Add response information for Individual Subscription"

This commit is contained in:
Zuul 2021-03-26 14:55:56 +00:00 committed by Gerrit Code Review
commit 0a2c5d16b9
6 changed files with 172 additions and 16 deletions

View File

@ -655,6 +655,13 @@ filter_operation_types:
in: body
required: false
type: string
filter_vnf_instance_subscription_filter:
description: |
This type represents subscription filter
criteria to match VNF instances.
in: body
required: false
type: object
fixed_addresses:
description: |
Fixed addresses to assign (from the subnet defined by "subnetId"

View File

@ -1,14 +1,52 @@
{
"id": "76057f8e65ab37fb82d9382dfc3f3c8b",
"filter": {
"notificationTypes": [
"VnfLcmOperationOccurrenceNotification"
]
},
"callbackUri": "http://sample1.com/notification",
"_links": {
"self": {
"href": "https://sample1.com/vnflcm/v1/subscriptions/76057f8e65ab37fb82d9382dfc3f3c8b"
}
}
{
"id": "76057f8e65ab37fb82d9382dfc3f3c8b",
"filter": {
"vnfInstanceSubscriptionFilter": {
"vnfdIds": [],
"vnfProductsFromProviders": {
"vnfProvider": "Vnf Provider 1",
"vnfProducts": [
{
"vnfProductName": "Vnf Product 1",
"versions": [
{
"vnfSoftwareVersion": "v1",
"vnfdVersions": [
"vnfd.v1.1"
]
}
]
}
]
}
},
"notificationTypes": [
"VnfLcmOperationOccurrenceNotification",
"VnfIdentifierCreationNotification",
"VnfIdentifierDeletionNotification"
],
"operationTypes": [
"INSTANTIATE",
"SCALE",
"TERMINATE",
"HEAL",
"CHANGE_EXT_CONN",
"MODIFY_INFO"
],
"operationStates": [
"STARTING",
"PROCESSING",
"COMPLETED",
"FAILED_TEMP",
"FAILED",
"ROLLING_BACK",
"ROLLED_BACK"
]
},
"callbackUri": "http://sample1.com/notification",
"_links": {
"self": {
"href": "https://sample1.com/vnflcm/v1/subscriptions/76057f8e65ab37fb82d9382dfc3f3c8b"
}
}
}

View File

@ -1258,8 +1258,10 @@ Response Parameters
- id: subscription_id_response
- filter: filter
- vnfInstanceSubscriptionFilter: filter_vnf_instance_subscription_filter
- notificationTypes: filter_notification_types
- operationTypes: filter_operation_types
- operationStates: filter_operation_states
- callbackUri: callback_uri
- _links: vnf_instance_links

View File

@ -282,6 +282,9 @@ class ViewBuilder(base.BaseViewBuilder):
return self._subscription_filter(
vnf_lcm_subscriptions, nextpage_opaque_marker, paging)
# TODO(esto.aln): To remove show subscription related processing
# in vnf_lcm.py. Current processing for show subscription is in
# vnf_subscriptions.py.
def subscription_show(self, vnf_lcm_subscriptions):
return self._get_vnf_lcm_subscription(vnf_lcm_subscriptions)

View File

@ -16,6 +16,7 @@
from copy import deepcopy
import datetime
import iso8601
import json
import os
import webob
@ -1692,10 +1693,27 @@ def _fake_subscription_obj(**updates):
"vnfInstanceNames": ["Vnf Name 1"]
},
"notificationTypes": [
"VnfLcmOperationOccurrenceNotification"
"VnfLcmOperationOccurrenceNotification",
"VnfIdentifierCreationNotification",
"VnfIdentifierDeletionNotification"
],
"operationTypes": ["INSTANTIATE"],
"operationStates": ["STARTING"]
"operationTypes": [
"INSTANTIATE",
"SCALE",
"TERMINATE",
"HEAL",
"CHANGE_EXT_CONN",
"MODIFY_INFO"
],
"operationStates": [
"STARTING",
"PROCESSING",
"COMPLETED",
"FAILED_TEMP",
"FAILED",
"ROLLING_BACK",
"ROLLED_BACK"
]
},
'callback_uri': 'http://localhost/sample_callback_uri'}
@ -1713,3 +1731,34 @@ def return_subscription_object(**updates):
def return_vnf_subscription_list(**updates):
vnc_lcm_subscription = return_subscription_object(**updates)
return [vnc_lcm_subscription]
def _subscription_links(subscription_dict):
links = {
"_links": {
"self": {
"href": "%(endpoint)s/vnflcm/v1/subscriptions/%(id)s"
% {'id': subscription_dict['id'],
'endpoint': CONF.vnf_lcm.endpoint_url}
}
}
}
subscription_dict.update(links)
return subscription_dict
def return_subscription_obj(**updates):
subscription = _fake_subscription_obj(**updates)
subscription['filter'] = json.dumps(subscription['filter'])
obj = objects.LccnSubscriptionRequest(**subscription)
return obj
def fake_subscription_response(**updates):
data = _fake_subscription_obj(**updates)
data = utils.convert_snakecase_to_camelcase(data)
data = _subscription_links(data)
return data

View File

@ -3943,6 +3943,27 @@ class TestController(base.TestCase):
resp = req.get_response(self.app)
self.assertEqual(500, resp.status_code)
@mock.patch.object(TackerManager, 'get_service_plugins',
return_value={'VNFM':
test_nfvo_plugin.FakeVNFMPlugin()})
@mock.patch.object(objects.LccnSubscriptionRequest,
"vnf_lcm_subscriptions_show")
def test_subscription_show(self, mock_get_subscription,
mock_get_service_plugins):
mock_get_subscription.return_value =\
fakes.return_subscription_obj()
req = fake_request.HTTPRequest.blank(
'/subscriptions/%s' % uuidsentinel.subscription_id)
req.method = 'GET'
resp = req.get_response(self.app)
expected_vnf = fakes.fake_subscription_response()
self.assertEqual(http_client.OK, resp.status_code)
self.assertEqual(expected_vnf, resp.json)
@mock.patch.object(TackerManager, 'get_service_plugins',
return_value={'VNFM':
test_nfvo_plugin.FakeVNFMPlugin()})
@ -3999,6 +4020,26 @@ class TestController(base.TestCase):
else:
self.assertEqual(expected_result, resp.json)
@mock.patch.object(TackerManager, 'get_service_plugins',
return_value={'VNFM':
test_nfvo_plugin.FakeVNFMPlugin()})
@mock.patch.object(objects.LccnSubscriptionRequest,
"vnf_lcm_subscriptions_show")
def test_subscription_show_not_found(self, mock_get_subscription,
mock_get_service_plugins):
req = fake_request.HTTPRequest.blank(
'/subscriptions/%s' % uuidsentinel.subscription_id)
req.method = 'GET'
mock_get_subscription.return_value = None
msg = _("Can not find requested vnf lcm subscriptions: %s"
% uuidsentinel.subscription_id)
res = self._make_problem_detail(msg, 404, title='Not Found')
resp = req.get_response(self.app)
self.assertEqual(res.text, resp.text)
@mock.patch.object(TackerManager, 'get_service_plugins',
return_value={'VNFM':
test_nfvo_plugin.FakeVNFMPlugin()})
@ -4011,3 +4052,19 @@ class TestController(base.TestCase):
resp = req.get_response(self.app)
self.assertEqual(400, resp.status_code)
@mock.patch.object(TackerManager, 'get_service_plugins',
return_value={'VNFM':
test_nfvo_plugin.FakeVNFMPlugin()})
@mock.patch.object(objects.LccnSubscriptionRequest,
"vnf_lcm_subscriptions_show")
def test_subscription_show_error(self, mock_get_subscription,
mock_get_service_plugins):
req = fake_request.HTTPRequest.blank(
'/subscriptions/%s' % uuidsentinel.subscription_id)
req.method = 'GET'
mock_get_subscription.side_effect = Exception
resp = req.get_response(self.app)
self.assertEqual(500, resp.status_code)