(List (AndOr OP_OR_IF (Com {[LIT_CHARS source]} {[ComSub (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[DQ [ComSub (Com {[LIT_CHARS dirname]} {[DQ [VarSub BASH_SOURCE bracket_op=(Index {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 0]}})]]})]]}) (Com {[LIT_CHARS pwd]}) )] [LIT_CHARS /test-setup.sh]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "test-setup.sh not found!"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (= scope= flags=2 words=[] bindings=[('WRAPPER', {[DQ [VarSub bazel_data][LIT_CHARS /src/main/tools/namespace-sandbox]]})]) (= scope= flags=2 words=[] bindings=[('OUT_DIR', {[DQ [VarSub TEST_TMPDIR][LIT_CHARS /out]]})]) (= scope= flags=2 words=[] bindings=[('OUT', {[DQ [VarSub OUT_DIR][LIT_CHARS /outfile]]})]) (= scope= flags=2 words=[] bindings=[('ERR', {[DQ [VarSub OUT_DIR][LIT_CHARS /errfile]]})]) (= scope= flags=2 words=[] bindings=[('SANDBOX_DIR', {[DQ [VarSub OUT_DIR][LIT_CHARS /sandbox]]})]) (= scope= flags=0 words=[] bindings=[('WRAPPER_DEFAULT_OPTS', {[DQ [LIT_CHARS "-S "][VarSub SANDBOX_DIR]]})]) (For dir [{[LIT_CHARS /bin] [LIT_OTHER "*"]}, {[LIT_CHARS /lib] [LIT_OTHER "*"]}, {[LIT_CHARS /usr/bin] [LIT_OTHER "*"]}, {[LIT_CHARS /usr/lib] [LIT_OTHER "*"]}]) (= scope= flags=0 words=[] bindings=[('WRAPPER_DEFAULT_OPTS', {[DQ [VarSub WRAPPER_DEFAULT_OPTS][LIT_CHARS " -M "][VarSub dir][LIT_CHARS " -m "][VarSub SANDBOX_DIR][VarSub dir]]})]) ) (FunctionDef check_kernel_version [] (List (If (Com {[LIT_OTHER "["]} {[DQ [VarSub PLATFORM test_op=VS_TEST_HYPHEN {}]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS darwin]]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Test will skip: sandbox is not yet supported on Darwin."]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) ) (= scope= flags=0 words=[] bindings=[('MAJOR', {[ComSub (Pipeline (Com {[LIT_CHARS uname]} {[LIT_CHARS -r]}) (Com {[LIT_CHARS sed]} {[SQ ]}) )]})]) (= scope= flags=0 words=[] bindings=[('MINOR', {[ComSub (Pipeline (Com {[LIT_CHARS uname]} {[LIT_CHARS -r]}) (Com {[LIT_CHARS sed]} {[SQ ]}) )]})]) (If (Com {[LIT_OTHER "["]} {[VarSub MAJOR]} {[LIT_CHARS -lt]} {[LIT_CHARS 3]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Test will skip: sandbox requires kernel >= 3.8; got "][ComSub (Com {[LIT_CHARS uname]} {[LIT_CHARS -r]})]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) ) (If (AndOr OP_AND_IF (Com {[LIT_OTHER "["]} {[VarSub MAJOR]} {[LIT_CHARS -eq]} {[LIT_CHARS 3]} {[LIT_OTHER "]"]}) (Com {[LIT_OTHER "["]} {[VarSub MINOR]} {[LIT_CHARS -lt]} {[LIT_CHARS 8]} {[LIT_OTHER "]"]}) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Test will skip: sandbox requires kernel >= 3.8; got "][ComSub (Com {[LIT_CHARS uname]} {[LIT_CHARS -r]})]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) ) ) ) (FunctionDef check_sandbox_allowed [] (List (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[LIT_CHARS test]}) (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "#define _GNU_SOURCE\n"] [LIT_CHARS "#include \n"] [LIT_CHARS "int main() {\n"] [LIT_CHARS " return unshare(CLONE_NEWNS | CLONE_NEWUTS | CLONE_NEWIPC | CLONE_NEWUSER);\n"] [LIT_CHARS "}\n"]} 0), (FilenameRedirectNode filename={[LIT_CHARS test/test.c]} "> 1), > ) (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "cc_test(name = \"sandbox_enabled\", srcs = [\"test.c\"], copts = [\"-std=c99\"])\n"]} 0), (FilenameRedirectNode filename={[LIT_CHARS test/BUILD]} "> 1), > ) (AndOr OP_OR_IF (Com {[LIT_CHARS bazel]} {[LIT_CHARS test]} {[LIT_CHARS //test] [LIT_OTHER ":"] [LIT_CHARS sandbox_enabled]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Sandboxing disabled, skipping..."]]}) (Com {[LIT_CHARS return]} {[LIT_CHARS false]}) ) ) ) ) (FunctionDef set_up [] (List (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[VarSub OUT_DIR]}) (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[VarSub SANDBOX_DIR]}) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[VarSub OUT_DIR]}) (Com {[LIT_CHARS mkdir]} {[VarSub SANDBOX_DIR]}) ) ) (FunctionDef assert_stdout [] (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub 1]]} {[DQ [ComSub (Com {[LIT_CHARS cat]} {[VarSub OUT]})]]}) ) (FunctionDef assert_output [] (List (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub 1]]} {[DQ [ComSub (Com {[LIT_CHARS cat]} {[VarSub OUT]})]]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub 2]]} {[DQ [ComSub (Com {[LIT_CHARS cat]} {[VarSub ERR]})]]}) ) ) (FunctionDef test_basic_functionality [] (List (AndOr OP_OR_IF (Com {[VarSub WRAPPER]} {[VarSub WRAPPER_DEFAULT_OPTS]} {[LIT_CHARS -l]} {[VarSub OUT]} {[LIT_CHARS -L]} {[VarSub ERR]} {[LIT_CHARS --]} {[LIT_CHARS /bin/echo]} {[LIT_CHARS hi]} {[LIT_CHARS there]}) (Com {[LIT_CHARS fail]}) ) (Com {[LIT_CHARS assert_output]} {[DQ [LIT_CHARS "hi there"]]} {[DQ ]}) ) ) (FunctionDef test_to_stderr [] (List (AndOr OP_OR_IF (Com {[VarSub WRAPPER]} {[VarSub WRAPPER_DEFAULT_OPTS]} {[LIT_CHARS -l]} {[VarSub OUT]} {[LIT_CHARS -L]} {[VarSub ERR]} {[LIT_CHARS --]} {[LIT_CHARS /bin/bash]} {[LIT_CHARS -c]} {[DQ [LIT_CHARS "/bin/echo hi there >&2"]]}) (Com {[LIT_CHARS fail]}) ) (Com {[LIT_CHARS assert_output]} {[DQ ]} {[DQ [LIT_CHARS "hi there"]]}) ) ) (FunctionDef test_exit_code [] (List (AndOr OP_OR_IF (Com {[VarSub WRAPPER]} {[VarSub WRAPPER_DEFAULT_OPTS]} {[LIT_CHARS -l]} {[VarSub OUT]} {[LIT_CHARS -L]} {[VarSub ERR]} {[LIT_CHARS --]} {[LIT_CHARS /bin/bash]} {[LIT_CHARS -c]} {[DQ [LIT_CHARS "exit 71"]]}) (= scope= flags=0 words=[] bindings=[('code', {[VarSub ?]})]) ) (Com {[LIT_CHARS assert_equals]} {[LIT_CHARS 71]} {[DQ [VarSub code]]}) ) ) (FunctionDef test_signal_death [] (List (AndOr OP_OR_IF (Com {[VarSub WRAPPER]} {[VarSub WRAPPER_DEFAULT_OPTS]} {[LIT_CHARS -l]} {[VarSub OUT]} {[LIT_CHARS -L]} {[VarSub ERR]} {[LIT_CHARS --]} {[LIT_CHARS /bin/bash]} {[LIT_CHARS -c]} {[SQ ]}) (= scope= flags=0 words=[] bindings=[('code', {[VarSub ?]})]) ) (Com {[LIT_CHARS assert_equals]} {[LIT_CHARS 134]} {[DQ [VarSub code]]}) ) ) (FunctionDef test_signal_catcher [] (List (AndOr OP_OR_IF (Com {[VarSub WRAPPER]} {[VarSub WRAPPER_DEFAULT_OPTS]} {[LIT_CHARS -T]} {[LIT_CHARS 2]} {[LIT_CHARS -t]} {[LIT_CHARS 3]} {[LIT_CHARS -l]} {[VarSub OUT]} {[LIT_CHARS -L]} {[VarSub ERR]} {[LIT_CHARS --]} {[LIT_CHARS /bin/bash]} {[LIT_CHARS -c]} {[SQ ]}) (= scope= flags=0 words=[] bindings=[('code', {[VarSub ?]})]) ) (Com {[LIT_CHARS assert_equals]} {[LIT_CHARS 142]} {[DQ [VarSub code]]}) (Com {[LIT_CHARS assert_stdout]} {[DQ [LIT_CHARS later]]}) ) ) (FunctionDef test_basic_timeout [] (List (AndOr OP_AND_IF (Com {[VarSub WRAPPER]} {[VarSub WRAPPER_DEFAULT_OPTS]} {[LIT_CHARS -T]} {[LIT_CHARS 3]} {[LIT_CHARS -t]} {[LIT_CHARS 3]} {[LIT_CHARS -l]} {[VarSub OUT]} {[LIT_CHARS -L]} {[VarSub ERR]} {[LIT_CHARS --]} {[LIT_CHARS /bin/bash]} {[LIT_CHARS -c]} {[DQ [LIT_CHARS "echo before; sleep 1000; echo after"]]}) (Com {[LIT_CHARS fail]}) ) (Com {[LIT_CHARS assert_output]} {[DQ [LIT_CHARS before]]} {[DQ ]}) ) ) (FunctionDef test_timeout_grace [] (List (AndOr OP_OR_IF (Com {[VarSub WRAPPER]} {[VarSub WRAPPER_DEFAULT_OPTS]} {[LIT_CHARS -T]} {[LIT_CHARS 2]} {[LIT_CHARS -t]} {[LIT_CHARS 3]} {[LIT_CHARS -l]} {[VarSub OUT]} {[LIT_CHARS -L]} {[VarSub ERR]} {[LIT_CHARS --]} {[LIT_CHARS /bin/bash]} {[LIT_CHARS -c]} {[SQ ]}) (= scope= flags=0 words=[] bindings=[('code', {[VarSub ?]})]) ) (Com {[LIT_CHARS assert_equals]} {[LIT_CHARS 142]} {[DQ [VarSub code]]}) (Com {[LIT_CHARS assert_stdout]} {[DQ [LIT_CHARS beforeafter]]}) ) ) (FunctionDef test_timeout_kill [] (List (AndOr OP_OR_IF (Com {[VarSub WRAPPER]} {[VarSub WRAPPER_DEFAULT_OPTS]} {[LIT_CHARS -T]} {[LIT_CHARS 2]} {[LIT_CHARS -t]} {[LIT_CHARS 3]} {[LIT_CHARS -l]} {[VarSub OUT]} {[LIT_CHARS -L]} {[VarSub ERR]} {[LIT_CHARS --]} {[LIT_CHARS /bin/bash]} {[LIT_CHARS -c]} {[SQ ]}) (= scope= flags=0 words=[] bindings=[('code', {[VarSub ?]})]) ) (Com {[LIT_CHARS assert_equals]} {[LIT_CHARS 142]} {[DQ [VarSub code]]}) (Com {[LIT_CHARS assert_stdout]} {[DQ [LIT_CHARS before]]}) ) ) (Com {[LIT_CHARS check_kernel_version]}) (AndOr OP_OR_IF (Com {[LIT_CHARS check_sandbox_allowed]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) (Com {[LIT_CHARS run_suite]} {[DQ [LIT_CHARS namespace-runner]]}) )