summaryrefslogtreecommitdiffstats
path: root/dovetail/api/app/routes.py
diff options
context:
space:
mode:
Diffstat (limited to 'dovetail/api/app/routes.py')
-rw-r--r--dovetail/api/app/routes.py79
1 files changed, 78 insertions, 1 deletions
diff --git a/dovetail/api/app/routes.py b/dovetail/api/app/routes.py
index 6c327323..b1557b67 100644
--- a/dovetail/api/app/routes.py
+++ b/dovetail/api/app/routes.py
@@ -1,6 +1,12 @@
#!flask/bin/python
-from flask import Flask, jsonify
+import json
+import os
+import subprocess
+import time
+import uuid
+
+from flask import Flask, jsonify, request
from flask_cors import CORS
import server
@@ -19,3 +25,74 @@ def get_all_testsuites():
def get_testcases():
testcases = server.list_testcases()
return jsonify({'testcases': testcases}), 200
+
+
+@app.route('/api/v1/scenario/nfvi/execution', methods=['POST'])
+def run_testcases():
+ requestId = request.args.get('requestId')
+ if not requestId:
+ requestId = uuid.uuid1()
+ if os.getenv('DOVETAIL_HOME'):
+ dovetail_home = os.getenv('DOVETAIL_HOME')
+ else:
+ return 'No DOVETAIL_HOME found in env.\n', 500
+
+ msg, ret = server.set_conf_files(request.json, dovetail_home, requestId)
+ if not ret:
+ return msg, 500
+
+ msg, ret = server.set_vm_images(request.json, dovetail_home, requestId)
+ if not ret:
+ return msg, 500
+
+ input_str = server.parse_request(request.json)
+
+ repo_dir = os.path.abspath(os.path.join(os.path.dirname(__file__),
+ os.pardir, os.pardir))
+ run_script = os.path.join(repo_dir, 'run.py')
+
+ cmd = 'python {} {}'.format(run_script, input_str)
+ api_home = os.path.join(dovetail_home, str(requestId))
+ subprocess.Popen(cmd, shell=True, env={'DOVETAIL_HOME': api_home})
+
+ testcases_file = os.path.join(dovetail_home, str(requestId),
+ 'results', 'testcases.json')
+ for loop in range(60):
+ if not os.path.isfile(testcases_file):
+ time.sleep(1)
+ else:
+ break
+ else:
+ return 'Can not get file testcases.json.\n', 500
+
+ with open(testcases_file, "r") as f:
+ for jsonfile in f:
+ data = json.loads(jsonfile)
+ testcases = data['testcases']
+ testsuite = data['testsuite']
+
+ result = server.get_execution_status(dovetail_home, testsuite,
+ testcases, requestId)
+
+ return jsonify({'result': result}), 200
+
+
+@app.route('/api/v1/scenario/nfvi/execution/status/<exec_id>',
+ methods=['POST'])
+def get_testcases_status(exec_id):
+ if 'testcase' not in request.json:
+ return 'Need testcases list as input.\n', 400
+
+ testcases = request.json['testcase']
+ dovetail_home = os.getenv('DOVETAIL_HOME')
+
+ testcases_file = os.path.join(dovetail_home, str(exec_id),
+ 'results', 'testcases.json')
+ with open(testcases_file, "r") as f:
+ for jsonfile in f:
+ data = json.loads(jsonfile)
+ testsuite = data['testsuite']
+
+ result = server.get_execution_status(dovetail_home, testsuite,
+ testcases, data['testcases'], exec_id)
+ return jsonify({'result': result}), 200