[LNT] r308204 - api: Implement POST request to rename machines
Matthias Braun via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 17 11:39:58 PDT 2017
Author: matze
Date: Mon Jul 17 11:39:58 2017
New Revision: 308204
URL: http://llvm.org/viewvc/llvm-project?rev=308204&view=rev
Log:
api: Implement POST request to rename machines
Added:
lnt/trunk/tests/server/ui/test_api_modify.py
- copied, changed from r308201, lnt/trunk/tests/server/ui/test_api_deletes.py
Removed:
lnt/trunk/tests/server/ui/test_api_deletes.py
Modified:
lnt/trunk/lnt/server/ui/api.py
Modified: lnt/trunk/lnt/server/ui/api.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/api.py?rev=308204&r1=308203&r2=308204&view=diff
==============================================================================
--- lnt/trunk/lnt/server/ui/api.py (original)
+++ lnt/trunk/lnt/server/ui/api.py Mon Jul 17 11:39:58 2017
@@ -119,13 +119,18 @@ class Machine(Resource):
method_decorators = [in_db]
@staticmethod
+ def _get_machine(machine_id):
+ ts = request.get_testsuite()
+ machine = ts.query(ts.Machine).filter(ts.Machine.id == machine_id) \
+ .first()
+ if machine is None:
+ abort(404, msg="Did not find machine " + str(machine_id))
+ return machine
+
+ @staticmethod
def get(machine_id):
ts = request.get_testsuite()
- try:
- this_machine = ts.query(ts.Machine).filter(
- ts.Machine.id == machine_id).one()
- except NoResultFound:
- abort(404, message="Invalid machine: {}".format(machine_id))
+ this_machine = Machine._get_machine(machine_id)
machine = common_fields_factory()
machine['machines'] = [common_machine_format(this_machine)]
machine_runs = ts.query(ts.Run) \
@@ -146,13 +151,31 @@ class Machine(Resource):
@requires_auth_token
def delete(machine_id):
ts = request.get_testsuite()
- machine = ts.query(ts.Machine).filter(ts.Machine.id == machine_id) \
- .first()
- if machine is None:
- abort(404, msg="Did not find machine " + str(machine_id))
+ machine = Machine._get_machine(machine_id)
ts.session.delete(machine)
ts.commit()
- return
+
+ @staticmethod
+ @requires_auth_token
+ def post(machine_id):
+ ts = request.get_testsuite()
+ machine = Machine._get_machine(machine_id)
+
+ action = request.values.get('action', None)
+ if action is None:
+ abort(400, msg="No 'action' specified")
+ elif action == 'rename':
+ name = request.values.get('name', None)
+ if name is None:
+ abort(400, msg="Expected 'name' for rename request")
+ existing = ts.query(ts.Machine).filter(ts.Machine.name == name) \
+ .first()
+ if existing is not None:
+ abort(400, msg="Machine with name '%s' already exists" % name)
+ machine.name = name
+ ts.session.commit()
+ else:
+ abort(400, msg="Unknown action '%s'" % action)
class Runs(Resource):
@@ -303,7 +326,7 @@ class Graph(Resource):
q = q.filter((field.status_field.column == PASS) |
(field.status_field.column.is_(None)))
- limit = request.args.get('limit', None)
+ limit = request.values.get('limit', None)
if limit:
limit = int(limit)
if limit:
Removed: lnt/trunk/tests/server/ui/test_api_deletes.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/tests/server/ui/test_api_deletes.py?rev=308203&view=auto
==============================================================================
--- lnt/trunk/tests/server/ui/test_api_deletes.py (original)
+++ lnt/trunk/tests/server/ui/test_api_deletes.py (removed)
@@ -1,98 +0,0 @@
-# Check that the LNT REST JSON API is working.
-# create temporary instance
-# RUN: rm -rf %t.instance
-# RUN: python %{shared_inputs}/create_temp_instance.py \
-# RUN: %s %{shared_inputs}/SmallInstance \
-# RUN: %t.instance %S/Inputs/V4Pages_extra_records.sql
-#
-# RUN: python %s %t.instance
-
-import logging
-import sys
-import unittest
-
-import lnt.server.db.migrate
-import lnt.server.ui.app
-from V4Pages import check_json
-
-logging.basicConfig(level=logging.DEBUG)
-
-
-class JSONAPIDeleteTester(unittest.TestCase):
- """Test the REST api."""
-
- def setUp(self):
- """Bind to the LNT test instance."""
- _, instance_path = sys.argv
- app = lnt.server.ui.app.App.create_standalone(instance_path)
- app.testing = True
- self.client = app.test_client()
-
- def test_runs_api(self):
- """Check /runs/n can be deleted."""
- client = self.client
-
- j = check_json(client, 'api/db_default/v4/nts/runs/1')
- sample_ids = [s['id'] for s in j['samples']]
- self.assertNotEqual(len(sample_ids), 0)
- for sid in sample_ids:
- resp = client.get('api/db_default/v4/nts/samples/{}'.format(sid))
- self.assertEqual(resp.status_code, 200)
-
- resp = client.delete('api/db_default/v4/nts/runs/1')
- self.assertEqual(resp.status_code, 401)
-
- resp = client.delete('api/db_default/v4/nts/runs/1',
- headers={'AuthToken': 'wrong token'})
- self.assertEqual(resp.status_code, 401)
-
- resp = client.delete('api/db_default/v4/nts/runs/1',
- headers={'AuthToken': 'test_token'})
- self.assertEqual(resp.status_code, 200)
-
- resp = client.get('api/db_default/v4/nts/runs/1')
- self.assertEqual(resp.status_code, 404)
-
- for sid in sample_ids:
- resp = client.get('api/db_default/v4/nts/samples/{}'.format(sid))
- self.assertEqual(resp.status_code, 404)
-
- def test_machines_api(self):
- """Check /machines/n can be deleted."""
- client = self.client
-
- j = check_json(client, 'api/db_default/v4/nts/machines/2')
- run_ids = [s['id'] for s in j['runs']]
- self.assertNotEqual(len(run_ids), 0)
- sample_ids = []
- for run_id in run_ids:
- resp = check_json(client,
- 'api/db_default/v4/nts/runs/{}'.format(run_id))
- sample_ids.append([s['id'] for s in resp['samples']])
- self.assertNotEqual(len(sample_ids), 0)
-
- resp = client.delete('api/db_default/v4/nts/machines/2')
- self.assertEqual(resp.status_code, 401)
-
- resp = client.delete('api/db_default/v4/nts/machines/2',
- headers={'AuthToken': 'wrong token'})
- self.assertEqual(resp.status_code, 401)
-
- resp = client.delete('api/db_default/v4/nts/machines/2',
- headers={'AuthToken': 'test_token'})
- self.assertEqual(resp.status_code, 200)
-
- resp = client.get('api/db_default/v4/nts/machines/2')
- self.assertEqual(resp.status_code, 404)
-
- for run_id in run_ids:
- resp = client.get('api/db_default/v4/nts/runs/{}'.format(run_id))
- self.assertEqual(resp.status_code, 404)
-
- for sid in sample_ids:
- resp = client.get('api/db_default/v4/nts/samples/{}'.format(sid))
- self.assertEqual(resp.status_code, 404)
-
-
-if __name__ == '__main__':
- unittest.main(argv=[sys.argv[0], ])
Copied: lnt/trunk/tests/server/ui/test_api_modify.py (from r308201, lnt/trunk/tests/server/ui/test_api_deletes.py)
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/tests/server/ui/test_api_modify.py?p2=lnt/trunk/tests/server/ui/test_api_modify.py&p1=lnt/trunk/tests/server/ui/test_api_deletes.py&r1=308201&r2=308204&rev=308204&view=diff
==============================================================================
--- lnt/trunk/tests/server/ui/test_api_deletes.py (original)
+++ lnt/trunk/tests/server/ui/test_api_modify.py Mon Jul 17 11:39:58 2017
@@ -28,7 +28,34 @@ class JSONAPIDeleteTester(unittest.TestC
app.testing = True
self.client = app.test_client()
- def test_runs_api(self):
+ def test_00_rename_machine(self):
+ """Check rename POST request to /machines/n"""
+ client = self.client
+
+ # Make sure the environment is as expected.
+ j = check_json(client, 'api/db_default/v4/nts/machines/1')
+ self.assertEqual(j['machines'][0]['name'], 'localhost__clang_DEV__x86_64')
+
+ data = {
+ 'action': 'rename',
+ 'name': 'new_machine_name',
+ }
+ resp = client.post('api/db_default/v4/nts/machines/1', data=data)
+ self.assertEqual(resp.status_code, 401)
+
+ resp = client.post('api/db_default/v4/nts/machines/1', data=data,
+ headers={'AuthToken': 'wrong token'})
+ self.assertEqual(resp.status_code, 401)
+
+ resp = client.post('api/db_default/v4/nts/machines/1', data=data,
+ headers={'AuthToken': 'test_token'})
+ self.assertEqual(resp.status_code, 200)
+
+ # Machine should be renamed now.
+ j = check_json(client, 'api/db_default/v4/nts/machines/1')
+ self.assertEqual(j['machines'][0]['name'], 'new_machine_name')
+
+ def test_01_delete_run(self):
"""Check /runs/n can be deleted."""
client = self.client
@@ -57,7 +84,7 @@ class JSONAPIDeleteTester(unittest.TestC
resp = client.get('api/db_default/v4/nts/samples/{}'.format(sid))
self.assertEqual(resp.status_code, 404)
- def test_machines_api(self):
+ def test_02_delete_machine(self):
"""Check /machines/n can be deleted."""
client = self.client
@@ -95,4 +122,5 @@ class JSONAPIDeleteTester(unittest.TestC
if __name__ == '__main__':
+ unittest.TestLoader.sortTestMethodsUsing = lambda _, x, y: cmp(x, y)
unittest.main(argv=[sys.argv[0], ])
More information about the llvm-commits
mailing list