blob: e03b54b4a9e83e698a1d5e024021cea52affa064 [file] [log] [blame]
#!/usr/bin/env python
# Copyright (c) 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import argparse
import json
import os
import sys
tracing_path = os.path.abspath(os.path.join(os.path.dirname(__file__),
'..', '..'))
if tracing_path not in sys.path:
sys.path.append(tracing_path)
from tracing import tracing_project
from build import dev_server
def getFilesIn(basedir):
data_files = []
for dirpath, dirnames, filenames in os.walk(basedir, followlinks=True):
new_dirnames = [d for d in dirnames if not d.startswith('.')]
del dirnames[:]
dirnames += new_dirnames
for f in filenames:
if f.startswith('.'):
continue
if f == 'README.md':
continue
full_f = os.path.join(dirpath, f)
rel_f = os.path.relpath(full_f, basedir)
data_files.append(rel_f)
data_files.sort()
return data_files
def do_GET_json_examples(request):
data_files = getFilesIn(request.server.data_dir)
files_as_json = json.dumps(data_files)
request.send_response(200)
request.send_header('Content-Type', 'application/json')
request.send_header('Content-Length', len(files_as_json))
request.end_headers()
request.wfile.write(files_as_json)
def do_GET_json_examples_skp(request):
data_files = getFilesIn(request.server.skp_data_dir)
files_as_json = json.dumps(data_files)
request.send_response(200)
request.send_header('Content-Type', 'application/json')
request.send_header('Content-Length', len(files_as_json))
request.end_headers()
request.wfile.write(files_as_json)
def do_GET_json_tests(self):
test_module_resources = self.server.project.FindAllTestModuleResources()
test_relpaths = [x.unix_style_relative_path
for x in test_module_resources]
tests = {'test_relpaths': test_relpaths}
tests_as_json = json.dumps(tests)
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.send_header('Content-Length', len(tests_as_json))
self.end_headers()
self.wfile.write(tests_as_json)
def do_POST_report_test_results(request):
request.send_response(200)
request.send_header('Content-Length', '0')
request.end_headers()
msg = request.rfile.read()
ostream = sys.stdout if 'PASSED' in msg else sys.stderr
ostream.write(msg + '\n')
def do_POST_report_test_completion(request):
request.send_response(200)
request.send_header('Content-Length', '0')
request.end_headers()
msg = request.rfile.read()
sys.stdout.write(msg + '\n')
request.server.RequestShutdown(exit_code=(0 if 'ALL_PASSED' in msg else 1))
def Main(args):
project = tracing_project.TracingProject()
parser = argparse.ArgumentParser(description='Run tracing development server')
parser.add_argument(
'-d', '--data-dir',
default=os.path.abspath(os.path.join(project.test_data_path)))
parser.add_argument(
'-s', '--skp-data-dir',
default=os.path.abspath(os.path.join(project.skp_data_path)))
parser.add_argument('-p', '--port', default=8003, type=int)
args = parser.parse_args(args=args)
server = dev_server.DevServer(port=args.port, project=project)
server.data_dir = os.path.abspath(args.data_dir)
server.skp_data_dir = os.path.abspath(args.skp_data_dir)
project.source_paths.append(server.data_dir)
server.AddPathHandler('/json/examples', do_GET_json_examples)
server.AddPathHandler('/tr/json/tests', do_GET_json_tests)
server.AddPathHandler('/json/examples/skp', do_GET_json_examples_skp)
server.AddSourcePathMapping(project.tracing_root_path)
server.AddPathHandler('/test_automation/notify_test_result',
do_POST_report_test_results, supports_post=True)
server.AddPathHandler('/test_automation/notify_completion',
do_POST_report_test_completion, supports_post=True)
server.serve_forever()