OLD | NEW |
---|---|
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2015 The Chromium Authors. All rights reserved. | 2 # Copyright 2015 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Runs an isolate bundled Telemetry benchmark. | 6 """Runs an isolate bundled Telemetry benchmark. |
7 | 7 |
8 This script attempts to emulate the contract of gtest-style tests | 8 This script attempts to emulate the contract of gtest-style tests |
9 invoked via recipes. The main contract is that the caller passes the | 9 invoked via recipes. The main contract is that the caller passes the |
10 argument: | 10 argument: |
11 | 11 |
12 --isolated-script-test-output=[FILENAME] | 12 --isolated-script-test-output=[FILENAME] |
13 | 13 |
14 json is written to that file in the format produced by | 14 json is written to that file in the format produced by |
15 common.parse_common_test_results. | 15 common.parse_common_test_results. |
16 | 16 |
17 This script is intended to be the base command invoked by the isolate, | 17 This script is intended to be the base command invoked by the isolate, |
18 followed by a subsequent Python script. It could be generalized to | 18 followed by a subsequent Python script. It could be generalized to |
19 invoke an arbitrary executable. | 19 invoke an arbitrary executable. |
20 """ | 20 """ |
21 | 21 import logging |
22 import argparse | 22 import argparse |
23 import json | 23 import json |
24 import os | 24 import os |
25 import shutil | 25 import shutil |
26 import sys | 26 import sys |
27 import tempfile | 27 import tempfile |
28 import traceback | 28 import traceback |
29 | 29 |
30 import common | 30 import common |
31 | 31 |
32 # Add src/testing/ into sys.path for importing xvfb. | 32 # Add src/testing/ into sys.path for importing xvfb. |
33 sys.path.append(os.path.join(os.path.dirname(__file__), '..')) | 33 sys.path.append(os.path.join(os.path.dirname(__file__), '..')) |
34 import xvfb | 34 import xvfb |
35 | 35 |
36 # Unfortunately we need to copy these variables from ../test_env.py. | 36 # Unfortunately we need to copy these variables from ../test_env.py. |
37 # Importing it and using its get_sandbox_env breaks test runs on Linux | 37 # Importing it and using its get_sandbox_env breaks test runs on Linux |
38 # (it seems to unset DISPLAY). | 38 # (it seems to unset DISPLAY). |
39 CHROME_SANDBOX_ENV = 'CHROME_DEVEL_SANDBOX' | 39 CHROME_SANDBOX_ENV = 'CHROME_DEVEL_SANDBOX' |
40 CHROME_SANDBOX_PATH = '/opt/chromium/chrome_sandbox' | 40 CHROME_SANDBOX_PATH = '/opt/chromium/chrome_sandbox' |
41 | 41 |
42 def main(): | 42 def main(): |
43 logging.info("1: IN THE SCRIPT") | |
dtu
2016/09/01 05:18:38
Are these intentional?
eyaich1
2016/09/01 14:19:35
lol definitely not. this file sholdn't be include
| |
43 parser = argparse.ArgumentParser() | 44 parser = argparse.ArgumentParser() |
44 parser.add_argument( | 45 parser.add_argument( |
45 '--isolated-script-test-output', type=argparse.FileType('w'), | 46 '--isolated-script-test-output', type=argparse.FileType('w'), |
46 required=True) | 47 required=True) |
47 parser.add_argument('--xvfb', help='Start xvfb.', action='store_true') | 48 parser.add_argument('--xvfb', help='Start xvfb.', action='store_true') |
48 args, rest_args = parser.parse_known_args() | 49 args, rest_args = parser.parse_known_args() |
50 logging.info("2: PARSED ARGS") | |
49 xvfb_proc = None | 51 xvfb_proc = None |
50 openbox_proc = None | 52 openbox_proc = None |
51 xcompmgr_proc = None | 53 xcompmgr_proc = None |
52 env = os.environ.copy() | 54 env = os.environ.copy() |
53 # Assume we want to set up the sandbox environment variables all the | 55 # Assume we want to set up the sandbox environment variables all the |
54 # time; doing so is harmless on non-Linux platforms and is needed | 56 # time; doing so is harmless on non-Linux platforms and is needed |
55 # all the time on Linux. | 57 # all the time on Linux. |
56 env[CHROME_SANDBOX_ENV] = CHROME_SANDBOX_PATH | 58 env[CHROME_SANDBOX_ENV] = CHROME_SANDBOX_PATH |
57 if args.xvfb and xvfb.should_start_xvfb(env): | 59 if args.xvfb and xvfb.should_start_xvfb(env): |
58 xvfb_proc, openbox_proc, xcompmgr_proc = xvfb.start_xvfb(env=env, | 60 xvfb_proc, openbox_proc, xcompmgr_proc = xvfb.start_xvfb(env=env, |
59 build_dir='.') | 61 build_dir='.') |
60 assert xvfb_proc and openbox_proc and xcompmgr_proc, 'Failed to start xvfb' | 62 assert xvfb_proc and openbox_proc and xcompmgr_proc, 'Failed to start xvfb' |
63 logging.info("3: ABOUT TO TRY") | |
61 try: | 64 try: |
62 tempfile_dir = tempfile.mkdtemp('telemetry') | 65 tempfile_dir = tempfile.mkdtemp('telemetry') |
63 valid = True | 66 valid = True |
64 failures = [] | 67 failures = [] |
65 try: | 68 try: |
69 logging.info("4: TRY AGAIN") | |
66 rc = common.run_command([sys.executable] + rest_args + [ | 70 rc = common.run_command([sys.executable] + rest_args + [ |
67 '--output-dir', tempfile_dir, | 71 '--output-dir', tempfile_dir, |
68 '--output-format=json' | 72 '--output-format=json' |
69 ], env=env) | 73 ], env=env) |
74 logging.info("5: AFTER COMMAND") | |
70 tempfile_name = os.path.join(tempfile_dir, 'results.json') | 75 tempfile_name = os.path.join(tempfile_dir, 'results.json') |
71 with open(tempfile_name) as f: | 76 with open(tempfile_name) as f: |
72 results = json.load(f) | 77 results = json.load(f) |
78 logging.info("6: ABOUT TO WRITE RESULTS") | |
73 for value in results['per_page_values']: | 79 for value in results['per_page_values']: |
74 if value['type'] == 'failure': | 80 if value['type'] == 'failure': |
75 failures.append(results['pages'][str(value['page_id'])]['name']) | 81 failures.append(results['pages'][str(value['page_id'])]['name']) |
76 valid = bool(rc == 0 or failures) | 82 valid = bool(rc == 0 or failures) |
77 except Exception: | 83 except Exception: |
78 traceback.print_exc() | 84 traceback.print_exc() |
79 valid = False | 85 valid = False |
80 finally: | 86 finally: |
81 shutil.rmtree(tempfile_dir) | 87 shutil.rmtree(tempfile_dir) |
82 | 88 |
83 if not valid and not failures: | 89 if not valid and not failures: |
84 failures = ['(entire test suite)'] | 90 failures = ['(entire test suite)'] |
85 if rc == 0: | 91 if rc == 0: |
86 rc = 1 # Signal an abnormal exit. | 92 rc = 1 # Signal an abnormal exit. |
87 | 93 |
94 logging.info("7: ABOUT TO DUMP") | |
88 json.dump({ | 95 json.dump({ |
89 'valid': valid, | 96 'valid': valid, |
90 'failures': failures, | 97 'failures': failures, |
91 }, args.isolated_script_test_output) | 98 }, args.isolated_script_test_output) |
92 return rc | 99 return rc |
93 | 100 |
94 finally: | 101 finally: |
95 xvfb.kill(xvfb_proc) | 102 xvfb.kill(xvfb_proc) |
96 xvfb.kill(openbox_proc) | 103 xvfb.kill(openbox_proc) |
97 xvfb.kill(xcompmgr_proc) | 104 xvfb.kill(xcompmgr_proc) |
98 | 105 |
99 | 106 |
100 # This is not really a "script test" so does not need to manually add | 107 # This is not really a "script test" so does not need to manually add |
101 # any additional compile targets. | 108 # any additional compile targets. |
102 def main_compile_targets(args): | 109 def main_compile_targets(args): |
103 json.dump([], args.output) | 110 json.dump([], args.output) |
104 | 111 |
105 | 112 |
106 if __name__ == '__main__': | 113 if __name__ == '__main__': |
107 # Conform minimally to the protocol defined by ScriptTest. | 114 # Conform minimally to the protocol defined by ScriptTest. |
108 if 'compile_targets' in sys.argv: | 115 if 'compile_targets' in sys.argv: |
109 funcs = { | 116 funcs = { |
110 'run': None, | 117 'run': None, |
111 'compile_targets': main_compile_targets, | 118 'compile_targets': main_compile_targets, |
112 } | 119 } |
113 sys.exit(common.run_script(sys.argv[1:], funcs)) | 120 sys.exit(common.run_script(sys.argv[1:], funcs)) |
114 sys.exit(main()) | 121 sys.exit(main()) |
OLD | NEW |