blob: 3e8a41de89c6115d65dfc3b63593a5defe5f3bb4 [file] [log] [blame]
#!/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:]))