[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