[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