Chris Craik | 93216d0 | 2015-03-05 13:58:42 -0800 | [diff] [blame] | 1 | #!/usr/bin/env python |
| 2 | # Copyright (c) 2014 The Chromium Authors. All rights reserved. |
| 3 | # Use of this source code is governed by a BSD-style license that can be |
| 4 | # found in the LICENSE file. |
Chris Craik | f516a62 | 2015-04-01 17:52:39 -0700 | [diff] [blame] | 5 | import json |
Chris Craik | 93216d0 | 2015-03-05 13:58:42 -0800 | [diff] [blame] | 6 | import os |
| 7 | import sys |
Chris Craik | 93216d0 | 2015-03-05 13:58:42 -0800 | [diff] [blame] | 8 | |
| 9 | from trace_viewer import trace_viewer_project |
| 10 | import tvcm |
| 11 | |
| 12 | _ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) |
| 13 | |
| 14 | def getFilesIn(basedir): |
| 15 | data_files = [] |
| 16 | for dirpath, dirnames, filenames in os.walk(basedir, followlinks=True): |
| 17 | new_dirnames = [d for d in dirnames if not d.startswith('.')] |
| 18 | del dirnames[:] |
| 19 | dirnames += new_dirnames |
| 20 | |
| 21 | for f in filenames: |
| 22 | if f.startswith('.'): |
| 23 | continue |
| 24 | full_f = os.path.join(dirpath, f) |
| 25 | rel_f = os.path.relpath(full_f, basedir) |
| 26 | data_files.append(rel_f) |
| 27 | |
| 28 | data_files.sort() |
| 29 | return data_files |
| 30 | |
| 31 | |
| 32 | def do_GET_json_examples(request): |
| 33 | test_data_path = os.path.abspath(os.path.join(_ROOT_PATH, 'test_data')) |
| 34 | data_files = getFilesIn(test_data_path) |
| 35 | files_as_json = json.dumps(data_files) |
| 36 | |
| 37 | request.send_response(200) |
| 38 | request.send_header('Content-Type', 'application/json') |
| 39 | request.send_header('Content-Length', len(files_as_json)) |
| 40 | request.end_headers() |
| 41 | request.wfile.write(files_as_json) |
| 42 | |
| 43 | def do_GET_json_examples_skp(request): |
| 44 | skp_data_path = os.path.abspath(os.path.join(_ROOT_PATH, 'skp_data')) |
| 45 | data_files = getFilesIn(skp_data_path) |
| 46 | files_as_json = json.dumps(data_files) |
| 47 | |
| 48 | request.send_response(200) |
| 49 | request.send_header('Content-Type', 'application/json') |
| 50 | request.send_header('Content-Length', len(files_as_json)) |
| 51 | request.end_headers() |
| 52 | request.wfile.write(files_as_json) |
| 53 | |
| 54 | def do_GET_json_tests(self): |
| 55 | test_module_resources = self.server.project.FindAllTestModuleResources() |
| 56 | |
Chris Craik | 44c2820 | 2015-05-12 17:25:16 -0700 | [diff] [blame^] | 57 | test_relpaths = [x.unix_style_relative_path |
| 58 | for x in test_module_resources] |
Chris Craik | 93216d0 | 2015-03-05 13:58:42 -0800 | [diff] [blame] | 59 | |
Chris Craik | 44c2820 | 2015-05-12 17:25:16 -0700 | [diff] [blame^] | 60 | tests = {'test_relpaths': test_relpaths, |
Chris Craik | 93216d0 | 2015-03-05 13:58:42 -0800 | [diff] [blame] | 61 | 'test_links': self.server.test_links} |
| 62 | tests_as_json = json.dumps(tests); |
| 63 | |
| 64 | self.send_response(200) |
| 65 | self.send_header('Content-Type', 'application/json') |
| 66 | self.send_header('Content-Length', len(tests_as_json)) |
| 67 | self.end_headers() |
| 68 | self.wfile.write(tests_as_json) |
| 69 | |
Chris Craik | f516a62 | 2015-04-01 17:52:39 -0700 | [diff] [blame] | 70 | def do_POST_report_test_results(request): |
| 71 | request.send_response(200) |
| 72 | request.send_header('Content-Length', '0') |
| 73 | request.end_headers() |
| 74 | msg = request.rfile.read() |
| 75 | ostream = sys.stdout if 'PASSED' in msg else sys.stderr |
| 76 | ostream.write(msg + '\n') |
| 77 | |
| 78 | def do_POST_report_test_completion(request): |
| 79 | request.send_response(200) |
| 80 | request.send_header('Content-Length', '0') |
| 81 | request.end_headers() |
| 82 | msg = request.rfile.read() |
| 83 | sys.stdout.write(msg + '\n') |
| 84 | request.server.RequestShutdown(exit_code=(0 if 'ALL_PASSED' in msg else 1)) |
| 85 | |
Chris Craik | 93216d0 | 2015-03-05 13:58:42 -0800 | [diff] [blame] | 86 | def Main(args): |
| 87 | port = 8003 |
| 88 | project = trace_viewer_project.TraceViewerProject() |
| 89 | |
| 90 | server = tvcm.DevServer(port=port, project=project) |
| 91 | server.AddPathHandler('/json/examples', do_GET_json_examples) |
| 92 | server.AddPathHandler('/tv/json/tests', do_GET_json_tests) |
| 93 | server.AddPathHandler('/json/examples/skp', do_GET_json_examples_skp) |
| 94 | |
| 95 | server.AddSourcePathMapping(project.trace_viewer_path) |
| 96 | server.AddTestLink('/examples/skia_debugger.html', 'Skia Debugger') |
| 97 | server.AddTestLink('/examples/trace_viewer.html', 'Trace File Viewer') |
Chris Craik | f516a62 | 2015-04-01 17:52:39 -0700 | [diff] [blame] | 98 | |
| 99 | server.AddPathHandler('/test_automation/notify_test_result', |
| 100 | do_POST_report_test_results, supports_post=True) |
| 101 | server.AddPathHandler('/test_automation/notify_completion', |
| 102 | do_POST_report_test_completion, supports_post=True) |
| 103 | |
| 104 | |
Chris Craik | 93216d0 | 2015-03-05 13:58:42 -0800 | [diff] [blame] | 105 | server.serve_forever() |