From: dliu5 Date: Wed, 16 Nov 2022 08:24:44 +0000 (+0800) Subject: Fix the resource request handling with wrong resourcepoolId X-Git-Tag: 2.0.0-rc2~14^2 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=f2ecb07180d8bf20fde6d5839afafa407b0e78c2;p=pti%2Fo2.git Fix the resource request handling with wrong resourcepoolId Issue-ID: INF-363 Signed-off-by: dliu5 Change-Id: I94c20604a7265247645e295c8b714cdcb375b1b8 --- 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):