Fix the resource request handling with wrong resourcepoolId 65/9665/5
authordliu5 <david.liu@windriver.com>
Wed, 16 Nov 2022 08:24:44 +0000 (16:24 +0800)
committerdliu5 <david.liu@windriver.com>
Thu, 17 Nov 2022 02:39:09 +0000 (10:39 +0800)
Issue-ID: INF-363

Signed-off-by: dliu5 <david.liu@windriver.com>
Change-Id: I94c20604a7265247645e295c8b714cdcb375b1b8

o2ims/views/ocloud_route.py
o2ims/views/ocloud_view.py
tests/unit/test_ocloud.py

index fe0420b..98dfa74 100644 (file)
@@ -262,6 +262,7 @@ class ResourcePoolGetRouter(Resource):
 # ----------  Resources ---------- #
 @api_ims_inventory_v1.route("/v1/resourcePools/<resourcePoolID>/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 ---------- #
index bc11097..89d0758 100644 (file)
@@ -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):
index 5b51221..5a5ed2c 100644 (file)
@@ -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):