(List (FunctionDef usage [] (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "\n"][LIT_CHARS "Run Mesos tests within a duration and attach gdb if the tests time out. This\n"][LIT_CHARS "script will run the test command under the current work directory. To put the\n"][LIT_CHARS "time limit only on tests, compile the project before running the script. This\n"][LIT_CHARS "script works only on Linux.\n"][LIT_CHARS "\n"][LIT_CHARS "Usage: "][VarSub 0][LIT_CHARS " [-h] \n"][LIT_CHARS "\n"][LIT_CHARS " test_cmd Command that runs the tests.\n"][LIT_CHARS " e.g., MESOS_VERBOSE=1 make check GTEST_SHUFFLE=1\n"][LIT_CHARS " duration Duration (in seconds) before the tests time out.\n"][LIT_CHARS " e.g., 3600, "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "((160 * 60))\n"][LIT_CHARS " -h Print this help message and exit\n"]]} 0), > ) ) (FunctionDef die [] (List (Com {[LIT_CHARS echo]} {[DQ [VarSub @]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (If (Com {[LIT_CHARS test]} {[VarSub #]} {[LIT_CHARS -ne]} {[LIT_CHARS 2]} ) (List (Com {[LIT_CHARS usage]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (= scope= flags=0 words=[] bindings=[('test_cmd', {[VarSub 1]})]) (= scope= flags=0 words=[] bindings=[('duration', {[VarSub 2]})]) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "This script runs with session id "][VarSub $][LIT_CHARS " and can be terminated by: pkill -s "][VarSub $]]} ) (Com {[LIT_CHARS printf]} {[DQ [ComSub (Com {[LIT_CHARS date]})]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS ": start running "][VarSub test_cmd]]} ) (= scope= flags=0 words=[] bindings=[('start', {[ComSub (Com {[LIT_CHARS date]} {[LIT_OTHER "+"] [DQ [LIT_CHARS "%s"]]})]})]) (Fork (Com {[LIT_CHARS eval]} {[VarSub test_cmd]} ) ) (= scope= flags=0 words=[] bindings=[('test_cmd_pid', {[VarSub !]})]) (While (Com {[LIT_DBRACKET_LIKE "["]} {[ArithSub {A2 AS_OP_MINUS {A Atom NODE_ARITH_WORD {[ComSub (Com {[LIT_CHARS date]} {[LIT_OTHER "+"] [DQ [LIT_CHARS "%s"]]})]}} {A Atom NODE_ARITH_WORD {[VarSub start]}}}]} {[LIT_CHARS -lt]} {[VarSub duration]} {[LIT_DBRACKET_LIKE "]"]} ) (List (= scope= flags=0 words=[] bindings=[('running', {[ComSub (Pipeline (Com {[LIT_CHARS ps]} {[LIT_CHARS p]} {[VarSub test_cmd_pid]} {[LIT_CHARS h]}) (Com {[LIT_CHARS wc]} {[LIT_CHARS -l]}) )]})]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub running]} {[LIT_CHARS -eq]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Test finished"]]} ) (Com {[LIT_CHARS wait]} {[VarSub test_cmd_pid]} ) (= scope= flags=0 words=[] bindings=[('exit_status', {[VarSub ?]})]) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Exit status: "][VarSub exit_status]]} ) (Com {[LIT_CHARS exit]} {[VarSub exit_status]} ) ) ) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 5]} ) ) ) (Com {[LIT_CHARS printf]} {[DQ [ComSub (Com {[LIT_CHARS date]})]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS ": process still running after "][VarSub duration][LIT_CHARS " seconds"]]} ) (= scope= flags=0 words=[] bindings=[('tmp', {[ComSub (Com {[LIT_CHARS mktemp]} {[LIT_CHARS XXXXX]})]})]) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "thread apply all bt"]]} < (FilenameRedirectNode filename={[VarSub tmp]} "> 1), > ) (For test_pid [{[ComSub (Com {[LIT_CHARS pgrep]} {[LIT_CHARS -s]} {[LIT_CHARS 0]})]}]) (List (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "==========\n"][LIT_CHARS "\n"][LIT_CHARS "Attaching gdb to "][ComSub (Com {[LIT_CHARS ps]} {[LIT_CHARS o]} {[LIT_CHARS pid] [LIT_COMMA ","] [LIT_CHARS cmd]} {[LIT_CHARS p]} {[VarSub test_pid]} {[LIT_CHARS h]})][LIT_CHARS "\n"][LIT_CHARS "\n"][LIT_CHARS "==========\n"]]} 0), > ) (Com {[LIT_CHARS gdb]} {[LIT_CHARS attach]} {[VarSub test_pid]} < (FilenameRedirectNode filename={[VarSub tmp]} 0), > ) ) ) (Com {[LIT_CHARS rm]} {[VarSub tmp]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Test failed and killing the stuck test process"]]} ) (Com {[LIT_CHARS pkill]} {[LIT_CHARS -s]} {[LIT_CHARS 0]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) )