From e152156c936196564baf1a8abded4789394628e2 Mon Sep 17 00:00:00 2001 From: dliu5 Date: Wed, 16 Nov 2022 16:24:44 +0800 Subject: [PATCH] Fix the resource request handling with wrong resourcepoolId Issue-ID: INF-363 Signed-off-by: dliu5 Change-Id: I94c20604a7265247645e295c8b714cdcb375b1b8 --- o2ims/views/ocloud_route.py | 15 +++++++++------ o2ims/views/ocloud_view.py | 20 +++++++++++++++++--- tests/unit/test_ocloud.py | 10 ++++++---- 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/o2ims/views/ocloud_route.py b/o2ims/views/ocloud_route.py index fe0420b..98dfa74 100644 --- a/o2ims/views/ocloud_route.py +++ b/o2ims/views/ocloud_route.py @@ -262,6 +262,7 @@ class ResourcePoolGetRouter(Resource): # ---------- Resources ---------- # @api_ims_inventory_v1.route("/v1/resourcePools//resources") @api_ims_inventory_v1.param('resourcePoolID', 'ID of the resource pool') +@api_ims_inventory_v1.response(404, 'Resource pool not found') # @api_ims_inventory_v1.param('sort', 'sort by column name', # _in='query') # @api_ims_inventory_v1.param('per_page', 'The number of results per page ' + @@ -312,8 +313,10 @@ class ResourcesListRouter(Resource): if args.nextpage_opaque_marker is not None: kwargs['page'] = args.nextpage_opaque_marker kwargs['filter'] = args.filter if args.filter is not None else '' - ret = ocloud_view.resources(resourcePoolID, bus.uow, **kwargs) + if ret is None: + raise NotFoundException("Resources under {} doesn't exist".format( + resourcePoolID)) return link_header(request.full_path, ret) @@ -351,11 +354,11 @@ class ResourceGetRouter(Resource): @api_ims_inventory_v1.doc('Get resource') @api_ims_inventory_v1.marshal_with(model) def get(self, resourcePoolID, resourceID): - result = ocloud_view.resource_one(resourceID, bus.uow) - if result is not None: - return result - raise NotFoundException("Resource {} doesn't exist".format( - resourceID)) + result = ocloud_view.resource_one(resourceID, bus.uow, resourcePoolID) + if result is None: + raise NotFoundException("Resource {} doesn't exist".format( + resourceID)) + return result # ---------- DeploymentManagers ---------- # diff --git a/o2ims/views/ocloud_view.py b/o2ims/views/ocloud_view.py index bc11097..89d0758 100644 --- a/o2ims/views/ocloud_view.py +++ b/o2ims/views/ocloud_view.py @@ -82,6 +82,11 @@ def resource_pool_one(resourcePoolId: str, def resources(resourcePoolId: str, uow: unit_of_work.AbstractUnitOfWork, **kwargs): + with uow: + first = uow.resource_pools.get(resourcePoolId) + if first is None: + raise NotFoundException("ResourcePool {} doesn't exist".format( + resourcePoolId)) pagination = Pagination(**kwargs) # filter key should be the same with database name query_kwargs = pagination.get_pagination() @@ -113,10 +118,19 @@ def resources(resourcePoolId: str, uow: unit_of_work.AbstractUnitOfWork, return pagination.get_result(ret) -def resource_one(resourceId: str, uow: unit_of_work.AbstractUnitOfWork): +def resource_one(resourceId: str, + uow: unit_of_work.AbstractUnitOfWork, resourcePoolId: str): with uow: - first = uow.resources.get(resourceId) - return first.serialize() if first is not None else None + resoucePool = uow.resource_pools.get(resourcePoolId) + if resoucePool is None: + raise NotFoundException("ResourcePool {} doesn't exist".format( + resourcePoolId)) + + first = uow.resources.get(resourceId) + if first is None: + raise NotFoundException("Resource {} doesn't exist".format( + resourceId)) + return first.serialize() def deployment_managers(uow: unit_of_work.AbstractUnitOfWork, **kwargs): diff --git a/tests/unit/test_ocloud.py b/tests/unit/test_ocloud.py index 5b51221..5a5ed2c 100644 --- a/tests/unit/test_ocloud.py +++ b/tests/unit/test_ocloud.py @@ -243,7 +243,8 @@ def test_view_resource_one(mock_uow): return_value.serialize.return_value = None # Query return None - resource_res = ocloud_view.resource_one(resource_id1, uow) + resource_res = ocloud_view.resource_one( + resource_id1, uow, resource_pool_id1) assert resource_res is None session.return_value.query.return_value.filter_by.return_value.first.\ @@ -251,9 +252,10 @@ def test_view_resource_one(mock_uow): "resourceId": resource_id1, "resourcePoolId": resource_pool_id1 } - - resource_res = ocloud_view.resource_one(resource_id1, uow) - assert str(resource_res.get("resourceId")) == resource_id1 + resource_res = ocloud_view.resource_one( + resource_id1, uow, resource_pool_id1) + assert str(resource_res.get("resourceId") == resource_id1) + assert str(resource_res.get("resourcePoolId") == resource_pool_id1) def test_view_deployment_managers(mock_uow): -- 2.16.6