[LNT] r308342 - api: Implement POST method for runs
Matthias Braun via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 18 11:56:24 PDT 2017
Author: matze
Date: Tue Jul 18 11:56:24 2017
New Revision: 308342
URL: http://llvm.org/viewvc/llvm-project?rev=308342&view=rev
Log:
api: Implement POST method for runs
Add POST method to /runs REST endpoint.
Modified:
lnt/trunk/lnt/server/ui/api.py
lnt/trunk/tests/server/ui/test_api_modify.py
Modified: lnt/trunk/lnt/server/ui/api.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/api.py?rev=308342&r1=308341&r2=308342&view=diff
==============================================================================
--- lnt/trunk/lnt/server/ui/api.py (original)
+++ lnt/trunk/lnt/server/ui/api.py Tue Jul 18 11:56:24 2017
@@ -1,5 +1,6 @@
+import lnt.util.ImportData
import sqlalchemy
-from flask import current_app, g
+from flask import current_app, g, Response
from flask import jsonify
from flask import request
from flask_restful import Resource, abort
@@ -178,7 +179,7 @@ class Machine(Resource):
abort(400, msg="Unknown action '%s'" % action)
-class Runs(Resource):
+class Run(Resource):
method_decorators = [in_db]
@staticmethod
@@ -227,6 +228,30 @@ class Runs(Resource):
return
+class Runs(Resource):
+ """Detailed results about a particular machine, including runs on it."""
+ method_decorators = [in_db]
+
+ @staticmethod
+ @requires_auth_token
+ def post():
+ '''Add a new run into the lnt database'''
+ ts = request.get_testsuite()
+ db = request.get_db()
+ data = request.data
+ result = lnt.util.ImportData.import_from_string(current_app.old_config,
+ g.db_name, db, g.testsuite_name, data)
+
+ new_url = ('%sapi/db_%s/v4/%s/runs/%s' %
+ (request.url_root, g.db_name, g.testsuite_name,
+ result['run_id']))
+ result['result_url'] = new_url
+ response = jsonify(result)
+ response.status = '301'
+ response.headers.add('Location', new_url)
+ return response
+
+
class Order(Resource):
method_decorators = [in_db]
@@ -391,7 +416,8 @@ def ts_path(path):
def load_api_resources(api):
api.add_resource(Machines, ts_path("machines"), ts_path("machines/"))
api.add_resource(Machine, ts_path("machines/<machine_id>"))
- api.add_resource(Runs, ts_path("runs/<int:run_id>"))
+ api.add_resource(Runs, ts_path("runs"), ts_path("runs/"))
+ api.add_resource(Run, ts_path("runs/<int:run_id>"))
api.add_resource(SamplesData, ts_path("samples"), ts_path("samples/"))
api.add_resource(SampleData, ts_path("samples/<sample_id>"))
api.add_resource(Order, ts_path("orders/<int:order_id>"))
Modified: lnt/trunk/tests/server/ui/test_api_modify.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/tests/server/ui/test_api_modify.py?rev=308342&r1=308341&r2=308342&view=diff
==============================================================================
--- lnt/trunk/tests/server/ui/test_api_modify.py (original)
+++ lnt/trunk/tests/server/ui/test_api_modify.py Tue Jul 18 11:56:24 2017
@@ -5,8 +5,9 @@
# RUN: %s %{shared_inputs}/SmallInstance \
# RUN: %t.instance %S/Inputs/V4Pages_extra_records.sql
#
-# RUN: python %s %t.instance
+# RUN: python %s %t.instance %{shared_inputs}
+import json
import logging
import sys
import unittest
@@ -23,10 +24,11 @@ class JSONAPIDeleteTester(unittest.TestC
def setUp(self):
"""Bind to the LNT test instance."""
- _, instance_path = sys.argv
+ _, instance_path, shared_inputs = sys.argv
app = lnt.server.ui.app.App.create_standalone(instance_path)
app.testing = True
self.client = app.test_client()
+ self.shared_inputs = shared_inputs
def test_00_rename_machine(self):
"""Check rename POST request to /machines/n"""
@@ -120,6 +122,26 @@ class JSONAPIDeleteTester(unittest.TestC
resp = client.get('api/db_default/v4/nts/samples/{}'.format(sid))
self.assertEqual(resp.status_code, 404)
+ def test_03_post_run(self):
+ """Check POST to /runs."""
+ client = self.client
+
+ resp = client.get('api/db_default/v4/nts/runs/5')
+ self.assertEqual(resp.status_code, 404)
+
+ data = open('%s/sample-report.json' % self.shared_inputs).read()
+
+ resp = client.post('api/db_default/v4/nts/runs', data=data)
+ self.assertEqual(resp.status_code, 401)
+
+ resp = client.post('api/db_default/v4/nts/runs', data=data,
+ headers={'AuthToken': 'test_token'})
+ self.assertEqual(resp.status_code, 301)
+ self.assertEqual(resp.headers['Location'],
+ 'http://localhost/api/db_default/v4/nts/runs/5')
+ resp_json = json.loads(resp.data)
+ self.assertEqual(resp_json['run_id'], 5)
+
if __name__ == '__main__':
unittest.TestLoader.sortTestMethodsUsing = lambda _, x, y: cmp(x, y)
More information about the llvm-commits
mailing list