Index: tools/execute_recorded_testcases.py |
diff --git a/tools/execute_recorded_testcases.py b/tools/execute_recorded_testcases.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..f30727779f02cb850b2a07d93d2d4f324c415ac0 |
--- /dev/null |
+++ b/tools/execute_recorded_testcases.py |
@@ -0,0 +1,67 @@ |
+#!/usr/bin/env python |
+ |
+import sys |
+import json |
+import subprocess |
+import time |
+import threading |
+ |
+def run_command(name, executable, arguments, timeout_in_seconds): |
+ print "Running %s: '%s'" % (name, [executable] + arguments) |
+ |
+ # The timeout_handler will set this to True if the command times out. |
+ timeout_value = {'did_timeout' : False} |
+ |
+ start = time.time() |
+ |
+ process = subprocess.Popen([executable] + arguments, |
+ stdout=subprocess.PIPE, |
+ stderr=subprocess.PIPE) |
+ def timeout_handler(): |
+ timeout_value['did_timeout'] = True |
+ process.kill() |
+ timer = threading.Timer(timeout_in_seconds, timeout_handler) |
+ timer.start() |
+ |
+ stdout, stderr = process.communicate() |
+ exit_code = process.wait() |
+ timer.cancel() |
+ |
+ end = time.time() |
+ |
+ return (exit_code, stdout, stderr, end - start, timeout_value['did_timeout']) |
+ |
+def main(args): |
+ recording_file = args[0] |
+ result_file = args[1] |
+ |
+ with open(recording_file) as fd: |
+ test_cases = json.load(fd) |
+ |
+ for test_case in test_cases: |
+ name = test_case['name'] |
+ command = test_case['command'] |
+ executable = command['executable'] |
+ arguments = command['arguments'] |
+ timeout_limit = command['timeout_limit'] |
+ |
+ exit_code, stdout, stderr, duration, did_timeout = ( |
+ run_command(name, executable, arguments, timeout_limit)) |
+ |
+ test_case['command_output'] = { |
+ 'exit_code' : exit_code, |
+ 'stdout' : stdout, |
+ 'stderr' : stderr, |
+ 'duration' : duration, |
+ 'did_timeout' : did_timeout, |
+ } |
+ with open(result_file, 'w') as fd: |
+ json.dump(test_cases, fd) |
+ |
+if __name__ == '__main__': |
+ if len(sys.argv) != 3: |
+ print >> sys.stderr, ("Usage: %s <input-file.json> <output-file.json>" |
+ % sys.argv[0]) |
+ sys.exit(1) |
+ sys.exit(main(sys.argv[1:])) |
+ |