From: Zhang Rong(Jon) Date: Mon, 22 Nov 2021 15:40:32 +0000 (+0800) Subject: Add ocloud query parameter; add and delete subscription X-Git-Tag: 1.0.0~23 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=de778bc19d9329d3c1c3c536bfd702423102277b;p=pti%2Fo2.git Add ocloud query parameter; add and delete subscription 1. Add ocloud query parameter to support specific id to query one ocloud 2. Give subscription post and delete method that can do creation and deletion Signed-off-by: Zhang Rong(Jon) Change-Id: I38cd6952dd4df14100ba0e9188c497c0ddad3397 --- diff --git a/o2ims/adapter/ocloud_repository.py b/o2ims/adapter/ocloud_repository.py index 4d4361c..0826cf0 100644 --- a/o2ims/adapter/ocloud_repository.py +++ b/o2ims/adapter/ocloud_repository.py @@ -134,3 +134,7 @@ class SubscriptionSqlAlchemyRepository(SubscriptionRepository): def _update(self, subscription: ocloud.Subscription): self.session.add(subscription) + + def _delete(self, subscription_id): + self.session.query(ocloud.Subscription).filter_by( + subscriptionId=subscription_id).delete() diff --git a/o2ims/adapter/unit_of_work.py b/o2ims/adapter/unit_of_work.py index d966a87..8b96fbc 100644 --- a/o2ims/adapter/unit_of_work.py +++ b/o2ims/adapter/unit_of_work.py @@ -48,6 +48,8 @@ class SqlAlchemyUnitOfWork(AbstractUnitOfWork): .ResourceSqlAlchemyRepository(self.session) self.deployment_managers = ocloud_repository\ .DeploymentManagerSqlAlchemyRepository(self.session) + self.subscriptions = ocloud_repository\ + .SubscriptionSqlAlchemyRepository(self.session) self.stxobjects = StxObjectSqlAlchemyRepository(self.session) return super().__enter__() diff --git a/o2ims/domain/ocloud.py b/o2ims/domain/ocloud.py index 513907a..0c5d232 100644 --- a/o2ims/domain/ocloud.py +++ b/o2ims/domain/ocloud.py @@ -95,6 +95,7 @@ class Resource(AgRoot): self.resourceTypeId = resourceTypeId self.resourcePoolId = resourcePoolId self.parentId = parentId + self.path = str() self.elements = elements self.description = description self.extensions = [] diff --git a/o2ims/domain/ocloud_repo.py b/o2ims/domain/ocloud_repo.py index 9d9fce7..9fd2965 100644 --- a/o2ims/domain/ocloud_repo.py +++ b/o2ims/domain/ocloud_repo.py @@ -209,6 +209,9 @@ class SubscriptionRepository(abc.ABC): def update(self, subscription: ocloud.Subscription): self._update(subscription) + def delete(self, subscription_id): + self._delete(subscription_id) + @abc.abstractmethod def _add(self, subscription: ocloud.Subscription): raise NotImplementedError @@ -220,3 +223,7 @@ class SubscriptionRepository(abc.ABC): @abc.abstractmethod def _update(self, subscription: ocloud.Subscription): raise NotImplementedError + + @abc.abstractmethod + def _delete(self, subscription_id): + raise NotImplementedError diff --git a/o2ims/entrypoints/flask_application.py b/o2ims/entrypoints/flask_application.py index 1144c10..fadb34a 100644 --- a/o2ims/entrypoints/flask_application.py +++ b/o2ims/entrypoints/flask_application.py @@ -17,7 +17,6 @@ from flask_restx import Api from o2ims import bootstrap # from o2ims import config -# from o2ims.views.ocloud_route import configure_routes from o2ims.views.ocloud_route import configure_namespace @@ -29,5 +28,4 @@ api = Api(app, version='1.0.0', O-Cloud Infrastructure Management Services', ) bus = bootstrap.bootstrap() -# configure_routes(app, bus) configure_namespace(api, bus) diff --git a/o2ims/views/ocloud_dto.py b/o2ims/views/ocloud_dto.py index 1573101..586de3f 100644 --- a/o2ims/views/ocloud_dto.py +++ b/o2ims/views/ocloud_dto.py @@ -19,8 +19,8 @@ class OcloudDTO: api = Namespace("Ocloud", description='Ocloud related operations.') - ocloud_list = api.model( - "List Ocloud object", + ocloud = api.model( + "OcloudList", { 'oCloudId': fields.String(required=True), 'globalCloudId': fields.String, @@ -37,7 +37,7 @@ class ResourceTypeDTO: "ResourceType", description='Resource type related operations.') resource_type_get = api.model( - "Get ResourceType object", + "ResourceTypeGet", { 'resourceTypeId': fields.String(required=True, description='Resource type ID'), @@ -55,7 +55,7 @@ class ResourcePoolDTO: "ResourcePool", description='Resource pool related operations.') resource_pool_get = api.model( - "Get ResourcePool object", + "ResourcePoolGet", { 'resourcePoolId': fields.String(required=True, description='Resource pool ID'), @@ -72,7 +72,7 @@ class ResourceDTO: api = Namespace("Resource", description='Resource related operations.') resource_list = api.model( - "List Resource object", + "ResourceList", { 'resourceId': fields.String(required=True, description='Resource ID'), @@ -84,7 +84,7 @@ class ResourceDTO: ) resource_get = api.model( - "Get Resource object", + "ResourceGet", { 'resourceId': fields.String(required=True, description='Resource ID'), @@ -102,7 +102,7 @@ class DeploymentManagerDTO: description='Deployment manager related operations.') deployment_manager_get = api.model( - "Get DeploymentManager object", + "DeploymentManagerGet", { 'deploymentManagerId': fields.String( required=True, @@ -123,7 +123,7 @@ class SubscriptionDTO: "Subscription", description='Subscription related operations.') subscription_get = api.model( - "Get Subscription object", + "SubscriptionGet", { 'subscriptionId': fields.String(required=True, description='Subscription ID'), @@ -132,3 +132,21 @@ class SubscriptionDTO: 'filter': fields.String, } ) + + subscription = api.model( + "SubscriptionCreate", + { + 'callback': fields.String( + required=True, description='Subscription callback address'), + 'consumerSubscriptionId': fields.String, + 'filter': fields.String, + } + ) + + subscription_post_resp = api.model( + "SubscriptionCreatedResp", + { + 'subscriptionId': fields.String(required=True, + description='Subscription ID'), + } + ) diff --git a/o2ims/views/ocloud_route.py b/o2ims/views/ocloud_route.py index 4237ab4..92cfd1c 100644 --- a/o2ims/views/ocloud_route.py +++ b/o2ims/views/ocloud_route.py @@ -12,11 +12,14 @@ # See the License for the specific language governing permissions and # limitations under the License. -from flask import jsonify +# from operator import sub +import uuid +# from re import sub from flask_restx import Resource from o2ims import config from o2ims.views import ocloud_view +from o2ims.domain.ocloud import Subscription from o2ims.views.ocloud_dto import OcloudDTO, ResourceTypeDTO,\ ResourcePoolDTO, ResourceDTO, DeploymentManagerDTO, SubscriptionDTO @@ -29,16 +32,21 @@ api_ocloud = OcloudDTO.api @api_ocloud.route("/") +@api_ocloud.response(404, 'oCloud not found') class OcloudsListRouter(Resource): """Ocloud get endpoint O2 interface ocloud endpoint """ - ocloud_get = OcloudDTO.ocloud_list + ocloud_get = OcloudDTO.ocloud - @api_ocloud.marshal_list_with(ocloud_get) + @api_ocloud.marshal_with(ocloud_get) def get(self): - return ocloud_view.oclouds(uow) + res = ocloud_view.oclouds(uow) + if len(res) > 0: + return res[0] + api_rt.abort( + 404, "oCloud doesn't exist") # ---------- ResourceTypes ---------- # @@ -110,6 +118,7 @@ class ResourcePoolGetRouter(Resource): model = ResourcePoolDTO.resource_pool_get @api_rp.doc('Get resource pool') + @api_rp.marshal_with(model) def get(self, resourcePoolID): result = ocloud_view.resource_pool_one(resourcePoolID, uow) if result is not None: @@ -142,6 +151,7 @@ class ResourceGetRouter(Resource): model = ResourceDTO.resource_get @api_res.doc('Get resource') + @api_res.marshal_with(model) def get(self, resourcePoolID, resourceID): result = ocloud_view.resource_one(resourceID, uow) if result is not None: @@ -171,6 +181,7 @@ class DeploymentManagerGetRouter(Resource): model = DeploymentManagerDTO.deployment_manager_get @api_dm.doc('Get deployment manager') + @api_dm.marshal_with(model) def get(self, deploymentManagerID): result = ocloud_view.deployment_manager_one( deploymentManagerID, uow) @@ -188,20 +199,36 @@ api_sub = SubscriptionDTO.api class SubscriptionsListRouter(Resource): model = SubscriptionDTO.subscription_get + expect = SubscriptionDTO.subscription + post_resp = SubscriptionDTO.subscription_post_resp + @api_sub.doc('List subscriptions') @api_sub.marshal_list_with(model) def get(self): return ocloud_view.subscriptions(uow) + @api_sub.doc('Create a subscription') + @api_sub.expect(expect) + @api_sub.marshal_with(post_resp, code=201) + def post(self): + data = api_sub.payload + sub_uuid = str(uuid.uuid4()) + subscription = Subscription( + sub_uuid, data['callback'], data['consumerSubscriptionId'], + data['filter']) + ocloud_view.subscription_create(subscription, uow) + return {"subscriptionId": sub_uuid}, 201 + @api_sub.route("/subscriptions/") @api_sub.param('subscriptionID', 'ID of the subscription') @api_sub.response(404, 'Subscription not found') -class SubscriptionGetRouter(Resource): +class SubscriptionGetDelRouter(Resource): model = DeploymentManagerDTO.deployment_manager_get @api_sub.doc('Get subscription by ID') + @api_sub.marshal_with(model) def get(self, subscriptionID): result = ocloud_view.subscription_one( subscriptionID, uow) @@ -210,6 +237,14 @@ class SubscriptionGetRouter(Resource): api_sub.abort(404, "Subscription {} doesn't exist".format( subscriptionID)) + @api_sub.doc('Delete subscription by ID') + @api_sub.response(204, 'Subscription deleted') + def delete(self, subscriptionID): + with uow: + uow.subscriptions.delete(subscriptionID) + uow.commit() + return '', 204 + def configure_namespace(app, bus): @@ -223,114 +258,3 @@ def configure_namespace(app, bus): # Set global uow global uow uow = bus.uow - - -def configure_routes(app, bus): - - # ---------- OClouds ---------- # - @app.route(apibase, methods=["GET"]) - def oclouds(): - result = ocloud_view.oclouds(bus.uow) - return jsonify(result), 200 - - # ---------- ResourceTypes ---------- # - - @app.route(apibase + "/resourceTypes", methods=["GET"]) - def resource_types(): - result = ocloud_view.resource_types(bus.uow) - return jsonify(result), 200 - - @app.route(apibase + "/resourceTypes", methods=["POST", "PUT", "PATCH", - "DELETE"]) - def resource_types_not_allow(): - return "Method Not Allowed", 405 - - @app.route(apibase + "/resourceTypes/", methods=["GET"]) - def resource_types_one(resourceTypeID): - result = ocloud_view.resource_type_one(resourceTypeID, bus.uow) - if result is None: - return "", 200 - return jsonify(result), 200 - - @app.route(apibase + "/resourceTypes/", - methods=["POST", "PUT", "PATCH", "DELETE"]) - def resource_types_one_not_allow(resourceTypeID): - return "Method Not Allowed", 405 - - # ---------- ResourcePools ---------- # - - @app.route(apibase + "/resourcePools", methods=["GET"]) - def resource_pools(): - result = ocloud_view.resource_pools(bus.uow) - return jsonify(result), 200 - - @app.route(apibase + "/resourcePools", methods=["POST", "PUT", "PATCH", - "DELETE"]) - def resource_pools_not_allow(): - return "Method Not Allowed", 405 - - @app.route(apibase + "/resourcePools/", methods=["GET"]) - def resource_pools_one(resourcePoolID): - result = ocloud_view.resource_pool_one(resourcePoolID, bus.uow) - if result is None: - return "", 200 - return jsonify(result), 200 - - @app.route(apibase + "/resourcePools/", - methods=["POST", "PUT", "PATCH", "DELETE"]) - def resource_pools_one_not_allow(resourcePoolID): - return "Method Not Allowed", 405 - - # ---------- Resources ---------- # - - @app.route(apibase + "/resourcePools//resources", - methods=["GET"]) - def resources(resourcePoolID): - result = ocloud_view.resources(resourcePoolID, bus.uow) - return jsonify(result), 200 - - @app.route(apibase + "/resourcePools//resources", - methods=["POST", "PUT", "PATCH", "DELETE"]) - def resource_not_allow(resourcePoolID): - return "Method Not Allowed", 405 - - @app.route(apibase + - "/resourcePools//resources/", - methods=["GET"]) - def resources_one(resourcePoolID, resourceID): - result = ocloud_view.resource_one(resourceID, bus.uow) - if result is None: - return "", 200 - return jsonify(result), 200 - - @app.route(apibase + - "/resourcePools//resources/", - methods=["POST", "PUT", "PATCH", "DELETE"]) - def resource_one_not_allow(resourcePoolID, resourceID): - return "Method Not Allowed", 405 - - # ---------- DeploymentManagers ---------- # - - @app.route(apibase + "/deploymentManagers", methods=["GET"]) - def deployment_managers(): - result = ocloud_view.deployment_managers(bus.uow) - return jsonify(result), 200 - - @app.route(apibase + "/deploymentManagers", - methods=["POST", "PUT", "PATCH", "DELETE"]) - def deployment_managers_not_allow(): - return "Method Not Allowed", 405 - - @app.route(apibase + "/deploymentManagers/", - methods=["GET"]) - def deployment_manager_one(deploymentManagerID): - result = ocloud_view.deployment_manager_one( - deploymentManagerID, bus.uow) - if result is None: - return "", 200 - return jsonify(result), 200 - - @app.route(apibase + "/deploymentManagers/", - methods=["POST", "PUT", "PATCH", "DELETE"]) - def deployment_manager_one_not_allow(deploymentManagerID): - return "Method Not Allowed", 405 diff --git a/o2ims/views/ocloud_view.py b/o2ims/views/ocloud_view.py index 513e9e0..90850e8 100644 --- a/o2ims/views/ocloud_view.py +++ b/o2ims/views/ocloud_view.py @@ -17,30 +17,17 @@ from sqlalchemy import select from o2ims.adapter.orm import ocloud, resource, resourcetype, \ resourcepool, deploymentmanager, subscription from o2ims.adapter import unit_of_work -# from o2ims.domain.ocloud import Ocloud +from o2ims.domain.ocloud import Subscription def oclouds(uow: unit_of_work.SqlAlchemyUnitOfWork): with uow: - # res = uow.session.execute( - # """ - # SELECT "oCloudId", "name" FROM ocloud - # """, - # ) - res = uow.session.execute(select(ocloud)) return [dict(r) for r in res] def ocloud_one(ocloudid: str, uow: unit_of_work.AbstractUnitOfWork): with uow: - # res = uow.session.execute( - # """ - # SELECT "oCloudId", "name" FROM ocloud - # WHERE "oCloudId" = :oCloudId - # """, - # dict(oCloudId=ocloudid), - # ) res = uow.session.execute( select(ocloud).where(ocloud.c.oCloudId == ocloudid)) first = res.first() @@ -49,11 +36,6 @@ def ocloud_one(ocloudid: str, uow: unit_of_work.AbstractUnitOfWork): def resource_types(uow: unit_of_work.SqlAlchemyUnitOfWork): with uow: - # res = uow.session.execute( - # """ - # SELECT "resourceTypeId", "oCloudId", "name" FROM resourcetype - # """, - # ) res = uow.session.execute(select(resourcetype)) return [dict(r) for r in res] @@ -61,13 +43,6 @@ def resource_types(uow: unit_of_work.SqlAlchemyUnitOfWork): def resource_type_one(resourceTypeId: str, uow: unit_of_work.SqlAlchemyUnitOfWork): with uow: - # res = uow.session.execute( - # """ - # SELECT "resourceTypeId", "oCloudId", "name" - # FROM resourcetype WHERE "resourceTypeId" = :resourceTypeId - # """, - # dict(resourceTypeId=resourceTypeId), - # ) res = uow.session.execute(select(resourcetype).where( resourcetype.c.resourceTypeId == resourceTypeId)) first = res.first() @@ -76,12 +51,6 @@ def resource_type_one(resourceTypeId: str, def resource_pools(uow: unit_of_work.SqlAlchemyUnitOfWork): with uow: - # res = uow.session.execute( - # """ - # SELECT "resourcePoolId", "oCloudId", "location", "name" - # FROM resourcepool - # """, - # ) res = uow.session.execute(select(resourcepool)) return [dict(r) for r in res] @@ -89,14 +58,6 @@ def resource_pools(uow: unit_of_work.SqlAlchemyUnitOfWork): def resource_pool_one(resourcePoolId: str, uow: unit_of_work.SqlAlchemyUnitOfWork): with uow: - # res = uow.session.execute( - # """ - # SELECT "resourcePoolId", "oCloudId", "location", "name" - # FROM resourcepool - # WHERE "resourcePoolId" = :resourcePoolId - # """, - # dict(resourcePoolId=resourcePoolId), - # ) res = uow.session.execute(select(resourcepool).where( resourcepool.c.resourcePoolId == resourcePoolId)) first = res.first() @@ -105,15 +66,6 @@ def resource_pool_one(resourcePoolId: str, def resources(resourcePoolId: str, uow: unit_of_work.SqlAlchemyUnitOfWork): with uow: - # res = uow.session.execute( - # """ - # SELECT "resourceId", "parentId", "resourceTypeId", - # "resourcePoolId", "oCloudId" - # FROM resource - # WHERE "resourcePoolId" = :resourcePoolId - # """, - # dict(resourcePoolId=resourcePoolId), - # ) res = uow.session.execute(select(resource).where( resource.c.resourcePoolId == resourcePoolId)) return [dict(r) for r in res] @@ -121,17 +73,12 @@ def resources(resourcePoolId: str, uow: unit_of_work.SqlAlchemyUnitOfWork): def resource_one(resourceId: str, uow: unit_of_work.SqlAlchemyUnitOfWork): with uow: - # res = uow.session.execute( - # """ - # SELECT "resourceId", "parentId", "resourceTypeId", - # "resourcePoolId", "oCloudId" - # FROM resource - # WHERE "resourceId" = :resourceId - # """, - # # AND "resourcePoolId" = :resourcePoolId - # # dict(resourcePoolId=resourcePoolId, - # dict(resourceId=resourceId), - # ) + # topq = uow.session.query(resource).filter( + # resource.c.resourceId == resourceId).cte('cte', recursive=True) + # bootomq = uow.session.query(resource).join( + # topq, resource.c.parentId == topq.c.resourceId) + # res = uow.session.query(topq.union(bootomq)) + # print(res) res = uow.session.execute(select(resource).where( resource.c.resourceId == resourceId)) first = res.first() @@ -140,13 +87,6 @@ def resource_one(resourceId: str, uow: unit_of_work.SqlAlchemyUnitOfWork): def deployment_managers(uow: unit_of_work.SqlAlchemyUnitOfWork): with uow: - # res = uow.session.execute( - # """ - # SELECT "deploymentManagerId", "oCloudId", - # "deploymentManagementServiceEndpoint", "name" - # FROM deploymentmanager - # """, - # ) res = uow.session.execute(select(deploymentmanager)) return [dict(r) for r in res] @@ -154,15 +94,6 @@ def deployment_managers(uow: unit_of_work.SqlAlchemyUnitOfWork): def deployment_manager_one(deploymentManagerId: str, uow: unit_of_work.SqlAlchemyUnitOfWork): with uow: - # res = uow.session.execute( - # """ - # SELECT "deploymentManagerId", "oCloudId", - # "deploymentManagementServiceEndpoint", "name" - # FROM deploymentmanager - # WHERE "deploymentManagerId" = :deploymentManagerId - # """, - # dict(deploymentManagerId=deploymentManagerId), - # ) res = uow.session.execute(select(deploymentmanager).where( deploymentmanager.c.deploymentManagerId == deploymentManagerId)) first = res.first() @@ -182,3 +113,18 @@ def subscription_one(subscriptionId: str, subscription.c.subscriptionId == subscriptionId)) first = res.first() return None if first is None else dict(first) + + +def subscription_create(subscription: Subscription, + uow: unit_of_work.SqlAlchemyUnitOfWork): + with uow: + uow.subscriptions.add(subscription) + uow.commit() + + +def subscription_delete(subscriptionId: str, + uow: unit_of_work.SqlAlchemyUnitOfWork): + with uow: + uow.subscriptions.delete(subscriptionId) + uow.commit() + return True diff --git a/tests/conftest.py b/tests/conftest.py index e06fa1c..a3359a9 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -18,7 +18,6 @@ from o2ims import config from o2ims.adapter.orm import metadata, start_o2ims_mappers from o2ims.adapter.clients.orm_stx import start_o2ims_stx_mappers from o2ims.adapter import unit_of_work -# from o2ims.views.ocloud_route import configure_routes from o2ims.views.ocloud_route import configure_namespace from o2ims.bootstrap import bootstrap @@ -37,7 +36,6 @@ def mock_flask_uow(mock_uow): # app.config["TESTING"] = True api = Api(app) bus = bootstrap(False, uow) - # configure_routes(app, bus) configure_namespace(api, bus) client = app.test_client() return session, client @@ -76,7 +74,6 @@ def sqlite_flask_uow(sqlite_uow): # app.config["TESTING"] = True api = Api(app) bus = bootstrap(False, sqlite_uow) - # configure_routes(app, bus) configure_namespace(api, bus) yield app.test_client() @@ -136,7 +133,6 @@ def postgres_flask_uow(postgres_uow): app = Flask(__name__) api = Api(app) bus = bootstrap(False, postgres_uow) - # configure_routes(app, bus) configure_namespace(api, bus) yield app.test_client() diff --git a/tests/integration/test_ocloud_view.py b/tests/integration/test_ocloud_view.py index 75e2804..e295a94 100644 --- a/tests/integration/test_ocloud_view.py +++ b/tests/integration/test_ocloud_view.py @@ -66,8 +66,7 @@ def test_view_resource_types(sqlite_uow): resource_type_id1, "resourcetype1", rt.ResourceTypeEnum.PSERVER, ocloud1.oCloudId) with sqlite_uow as uow: - # uow.session.execute() - uow.oclouds.add(resource_type1) + uow.resource_types.add(resource_type1) uow.commit() resource_type_list = ocloud_view.resource_types(uow) @@ -88,7 +87,7 @@ def test_view_resource_type_one(sqlite_uow): assert resource_type_res is None with sqlite_uow as uow: - uow.oclouds.add(resource_type1) + uow.resource_types.add(resource_type1) uow.commit() resource_type_res = ocloud_view.resource_type_one(resource_type_id1, uow) assert str(resource_type_res.get("resourceTypeId")) == resource_type_id1 @@ -101,7 +100,7 @@ def test_view_resource_pools(sqlite_uow): resource_pool_id1, "resourcepool1", config.get_api_url(), ocloud1.oCloudId) with sqlite_uow as uow: - uow.oclouds.add(resource_pool1) + uow.resource_pools.add(resource_pool1) uow.commit() resource_pool_list = ocloud_view.resource_pools(uow) @@ -122,7 +121,7 @@ def test_view_resource_pool_one(sqlite_uow): assert resource_pool_res is None with sqlite_uow as uow: - uow.oclouds.add(resource_pool1) + uow.resource_pools.add(resource_pool1) uow.commit() resource_pool_res = ocloud_view.resource_pool_one(resource_pool_id1, uow) assert str(resource_pool_res.get("resourcePoolId")) == resource_pool_id1 @@ -135,7 +134,7 @@ def test_view_resources(sqlite_uow): resource1 = ocloud.Resource( resource_id1, resource_type_id1, resource_pool_id1) with sqlite_uow as uow: - uow.oclouds.add(resource1) + uow.resources.add(resource1) uow.commit() resource_list = ocloud_view.resources(resource_pool_id1, uow) @@ -154,7 +153,7 @@ def test_view_resource_one(sqlite_uow): assert resource_res is None with sqlite_uow as uow: - uow.oclouds.add(resource1) + uow.resources.add(resource1) uow.commit() resource_res = ocloud_view.resource_one(resource_id1, uow) @@ -168,7 +167,7 @@ def test_view_deployment_managers(sqlite_uow): deployment_manager_id1, "k8s1", ocloud_id1, config.get_api_url()+"/k8s1") with sqlite_uow as uow: - uow.oclouds.add(deployment_manager1) + uow.deployment_managers.add(deployment_manager1) uow.commit() deployment_manager_list = ocloud_view.deployment_managers(uow) @@ -189,7 +188,7 @@ def test_view_deployment_manager_one(sqlite_uow): assert deployment_manager_res is None with sqlite_uow as uow: - uow.oclouds.add(deployment_manager1) + uow.deployment_managers.add(deployment_manager1) uow.commit() deployment_manager_res = ocloud_view.deployment_manager_one( @@ -198,35 +197,60 @@ def test_view_deployment_manager_one(sqlite_uow): "deploymentManagerId")) == deployment_manager_id1 -def test_view_subscriptions(mock_uow): - session, uow = mock_uow +def test_view_subscriptions(sqlite_uow): subscription_id1 = str(uuid.uuid4()) - session.return_value.execute.return_value = [{ - "subscriptionId": subscription_id1, - }] + subscription1 = ocloud.Subscription( + subscription_id1, "https://callback/uri/write/here") + with sqlite_uow as uow: + uow.subscriptions.add(subscription1) + uow.commit() - deployment_manager_list = ocloud_view.subscriptions(uow) - assert str(deployment_manager_list[0].get( + subscription_list = ocloud_view.subscriptions(uow) + assert str(subscription_list[0].get( "subscriptionId")) == subscription_id1 -def test_view_subscription_one(mock_uow): - session, uow = mock_uow +def test_view_subscription_one(sqlite_uow): subscription_id1 = str(uuid.uuid4()) - session.return_value.execute.return_value.first.return_value = None + subscription1 = ocloud.Subscription( + subscription_id1, "https://callback/uri/write/here") # Query return None - deployment_manager_res = ocloud_view.subscription_one( - subscription_id1, uow) - assert deployment_manager_res is None + subscription_res = ocloud_view.subscription_one( + subscription_id1, sqlite_uow) + assert subscription_res is None - session.return_value.execute.return_value.first.return_value = { - "deploymentManagerId": subscription_id1, - } + with sqlite_uow as uow: + uow.subscriptions.add(subscription1) + uow.commit() - deployment_manager_res = ocloud_view.subscription_one( - subscription_id1, uow) - assert str(deployment_manager_res.get( - "deploymentManagerId")) == subscription_id1 + subscription_res = ocloud_view.subscription_one( + subscription_id1, sqlite_uow) + assert str(subscription_res.get( + "subscriptionId")) == subscription_id1 + + +def test_view_subscription_delete(sqlite_uow): + + subscription_id1 = str(uuid.uuid4()) + subscription1 = ocloud.Subscription( + subscription_id1, "https://callback/uri/write/here") + + with sqlite_uow as uow: + uow.subscriptions.add(subscription1) + uow.commit() + + subscription_res = ocloud_view.subscription_one( + subscription_id1, sqlite_uow) + assert str(subscription_res.get( + "subscriptionId")) == subscription_id1 + + with sqlite_uow as uow: + uow.subscriptions.delete(subscription_id1) + uow.commit() + + subscription_res = ocloud_view.subscription_one( + subscription_id1, sqlite_uow) + assert subscription_res is None diff --git a/tests/unit/test_ocloud.py b/tests/unit/test_ocloud.py index 5c9a26d..a556295 100644 --- a/tests/unit/test_ocloud.py +++ b/tests/unit/test_ocloud.py @@ -261,8 +261,8 @@ def test_view_subscriptions(mock_uow): "subscriptionId": subscription_id1, }] - deployment_manager_list = ocloud_view.subscriptions(uow) - assert str(deployment_manager_list[0].get( + subscription_list = ocloud_view.subscriptions(uow) + assert str(subscription_list[0].get( "subscriptionId")) == subscription_id1 @@ -273,18 +273,18 @@ def test_view_subscription_one(mock_uow): session.return_value.execute.return_value.first.return_value = None # Query return None - deployment_manager_res = ocloud_view.subscription_one( + subscription_res = ocloud_view.subscription_one( subscription_id1, uow) - assert deployment_manager_res is None + assert subscription_res is None session.return_value.execute.return_value.first.return_value = { - "deploymentManagerId": subscription_id1, + "subscriptionId": subscription_id1, } - deployment_manager_res = ocloud_view.subscription_one( + subscription_res = ocloud_view.subscription_one( subscription_id1, uow) - assert str(deployment_manager_res.get( - "deploymentManagerId")) == subscription_id1 + assert str(subscription_res.get( + "subscriptionId")) == subscription_id1 def test_flask_get_list(mock_flask_uow): @@ -294,9 +294,6 @@ def test_flask_get_list(mock_flask_uow): # Get list and return empty list ########################## - resp = client.get(apibase+"/") - assert resp.get_data() == b'[]\n' - resp = client.get(apibase+"/resourceTypes") assert resp.get_data() == b'[]\n' @@ -318,6 +315,9 @@ def test_flask_get_one(mock_flask_uow): # Get one and return 404 ########################### + resp = client.get(apibase+"/") + assert resp.status_code == 404 + resource_type_id1 = str(uuid.uuid4()) resp = client.get(apibase+"/resourceTypes/"+resource_type_id1) assert resp.status_code == 404 @@ -440,8 +440,6 @@ def test_flask_not_allowed(mock_flask_uow): # Testing subscriptions not support method ########################## uri = apibase + "/subscriptions" - resp = client.post(uri) - assert resp.status == '405 METHOD NOT ALLOWED' resp = client.put(uri) assert resp.status == '405 METHOD NOT ALLOWED' resp = client.patch(uri) @@ -457,5 +455,3 @@ def test_flask_not_allowed(mock_flask_uow): assert resp.status == '405 METHOD NOT ALLOWED' resp = client.patch(uri) assert resp.status == '405 METHOD NOT ALLOWED' - resp = client.delete(uri) - assert resp.status == '405 METHOD NOT ALLOWED'