diff options
Diffstat (limited to 'test/mocks/ran-nssmf-simulator/RanNssmfSimulator/MainApp.py')
-rw-r--r-- | test/mocks/ran-nssmf-simulator/RanNssmfSimulator/MainApp.py | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/test/mocks/ran-nssmf-simulator/RanNssmfSimulator/MainApp.py b/test/mocks/ran-nssmf-simulator/RanNssmfSimulator/MainApp.py new file mode 100644 index 000000000..05edfa872 --- /dev/null +++ b/test/mocks/ran-nssmf-simulator/RanNssmfSimulator/MainApp.py @@ -0,0 +1,150 @@ +#! /usr/bin/python3 + +# ============LICENSE_START======================================================= +# Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. +# Contribution (C) 2022 Aarna Networks, Inc. All rights reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END========================================================= + +import json +from flask import Flask, request, Response +from schematics.exceptions import DataError + +from .utils import REST_PORT, LOGGING_LEVEL +from .SliceDataType import AllocateNssi, DeAllocateNssi, ActivateNssi, DeActivateNssi +from . import AuthManager +from . import NssManager + + +app = Flask(__name__) +app.logger.setLevel(LOGGING_LEVEL) + + +@app.errorhandler(DataError) +def handleRequestException(e): + app.logger.error(e) + response = Response() + response.status_code = 400 + return response + + +@app.errorhandler(AuthManager.AuthError) +def handleAuthException(e): + app.logger.error(e) + response = Response() + response.status_code = 400 + return response + + +@app.errorhandler(AuthManager.TokenError) +def handleAuthException(e): + app.logger.error(e) + response = Response() + response.status_code = 401 + return response + + +@app.errorhandler(NssManager.NssError) +def handleNssException(e): + app.logger.error(e) + response = Response() + response.status_code = 400 + return response + + +@app.route("/api/rest/securityManagement/v1/oauth/token", methods=['POST']) +def handleAuthToken(): + """ + Used to get Access Token by SO NSSMF adapter. + """ + app.logger.debug("Receive request:\n%s" % json.dumps(request.json, indent=2)) + + AuthManager.AuthRequest(request.json).validate() + AuthManager.checkAuth(request.json) + + return AuthManager.generateAuthToken(request.json), 201 + + +@app.route("/ObjectManagement/NSS/SliceProfiles", methods=['POST']) +def handleAllocateNssi(): + AuthManager.checkAuthToken(request.headers) + + app.logger.info("Receive AllocateNssi request:\n%s" % json.dumps(request.json, indent=2)) + + AllocateNssi(request.json).validate() + + return NssManager.allocateNssi(request.json), 200 + + +@app.route("/ObjectManagement/NSS/SliceProfiles/<string:sliceProfileId>", methods=['DELETE']) +def handleDeallocateNssi(sliceProfileId): + AuthManager.checkAuthToken(request.headers) + + app.logger.info("Receive DeallocateNssi request for sliceProfileId %s:\n%s" + % (sliceProfileId, json.dumps(request.json, indent=2))) + + DeAllocateNssi(request.json).validate() + + return NssManager.deallocateNssi(sliceProfileId, request.json), 200 + +@app.route("/api/rest/provMns/v1/an/NSS/<string:snssai>/activations", methods=['PUT']) +def handleActivateNssi(snssai): + """ + Method: handleActivateNssi + This method handles slice activation event generated by SO NSSMF adapter. + As part of this event, SO NSSMF adapter will send the associated 'snssai'. + 'snssai' is string type value and example is: "01-2557D9". Wherein, + sst: "01" and sd: "2557D9". + Argument: snssai + 'sst': Identifies the service (e.g eMBB, URLLC,...) + 'sd' : service differentiator within sst. + Return value: http status 200 + """ + AuthManager.checkAuthToken(request.headers) + + app.logger.info("Receive ActivateNssi request for snssai:%s\n%s" + % (snssai, json.dumps(request.json, indent=2))) + + ActivateNssi(request.json).validate() + + return NssManager.activateNssi(snssai, request.json), 200 + +@app.route("/api/rest/provMns/v1/an/NSS/<string:snssai>/deactivation", methods=['PUT']) +def handleDeActivateNssi(snssai): + """ + Method: handleDeActivateNssi + This method handles slice deactivation event generated by SO NSSMF adapter. + As part of this event, SO NSSMF adapter will send the associated 'snssai'. + Example 'snssai' : "01-2557D9". + Argument: snssai + 'sst': Identifies the service (e.g eMBB, URLLC,...) + 'sd' : service differentiator within sst. + Return value: http status 200 + """ + AuthManager.checkAuthToken(request.headers) + + app.logger.info("Receive DeActivateNssi request for snssai:%s\n%s" + % (snssai, json.dumps(request.json, indent=2))) + + DeActivateNssi(request.json).validate() + + return NssManager.deactivateNssi(snssai, request.json), 200 + +def main(): + AuthManager.startAuthManagerJob() + app.run("0.0.0.0", REST_PORT, False, ssl_context="adhoc") + + +if __name__ == '__main__': + main() |