Chromium Code Reviews| Index: tools/ipc_fuzzer/play_testcase.py |
| diff --git a/tools/ipc_fuzzer/play_testcase.py b/tools/ipc_fuzzer/play_testcase.py |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..a977a0fb0e4c177d530982d75073d9e6e43f9a77 |
| --- /dev/null |
| +++ b/tools/ipc_fuzzer/play_testcase.py |
| @@ -0,0 +1,85 @@ |
| +#!/usr/bin/env python |
| +# Copyright (c) 2013 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. |
| + |
| +"""Wrapper around chrome. |
| + |
| +Replaces all the child processes (renderer, GPU, plugins and utility) with the |
| +IPC fuzzer. The fuzzer will then play back a specified testcase. |
| + |
| +Depends on ipc_fuzzer being available on the same directory as chrome. |
| +""" |
| + |
| +import os |
| +import platform |
| +import subprocess |
| +import sys |
| + |
| +def main(): |
| + if len(sys.argv) <= 1: |
| + print 'Usage: play_testcase.py [chrome_flag...] testcase' |
| + sys.exit(1) |
|
jochen (gone - plz use gerrit)
2013/10/31 10:47:00
return 1
aedla
2013/11/26 17:09:50
Done.
|
| + |
| + script_path = os.path.realpath(__file__) |
| + ipc_fuzzer_dir = os.path.dirname(script_path) |
| + out_dir = os.path.abspath(os.path.join(ipc_fuzzer_dir, os.pardir, |
| + os.pardir, 'out')); |
| + build_dir = '' |
| + chrome_path = '' |
| + chrome_binary = 'chrome' |
| + |
| + for build in ['Debug', 'Release']: |
| + try_build = os.path.join(out_dir, build) |
| + try_chrome = os.path.join(try_build, chrome_binary) |
| + if os.path.exists(try_chrome): |
| + build_dir = try_build |
| + chrome_path = try_chrome |
| + |
| + if not chrome_path: |
| + print 'chrome executable not found.' |
| + sys.exit(1) |
| + |
| + fuzzer_path = os.path.join(build_dir, 'ipc_fuzzer') |
| + if not os.path.exists(fuzzer_path): |
| + print fuzzer_path + ' not found.' |
| + print ('Please use enable_ipc_fuzzer=1 GYP define and ' |
| + 'build ipc_fuzzer target.') |
| + sys.exit(1) |
| + |
| + prefixes = { |
| + '--renderer-cmd-prefix', |
| + '--gpu-launcher', |
| + '--plugin-launcher', |
| + '--ppapi-plugin-launcher', |
| + '--utility-cmd-prefix', |
| + } |
| + |
| + args = [ |
| + chrome_path, |
| + '--ipc-fuzzer-testcase=' + sys.argv[-1], |
| + '--no-sandbox', |
| + ] |
| + |
| + launchers = {} |
| + for prefix in prefixes: |
| + launchers[prefix] = fuzzer_path |
| + |
| + for arg in sys.argv[1:-1]: |
| + if arg.find('=') != -1: |
| + switch, value = arg.split('=', 1) |
| + if switch in prefixes: |
| + launchers[switch] = value + ' ' + launchers[switch] |
| + continue |
| + args.append(arg) |
| + |
| + for switch, value in launchers.items(): |
| + args.append(switch + '=' + value) |
| + |
| + print args |
| + |
| + return subprocess.call(args) |
| + |
| + |
| +if __name__ == "__main__": |
| + sys.exit(main()) |