(List (= scope= flags=0 words=[] bindings=[('CURRENT_DIR', {[DQ [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]}) )]]})]) (AndOr OP_OR_IF (Com {[LIT_CHARS source]} {[DQ [VarSub CURRENT_DIR][LIT_CHARS /../integration_test_setup.sh]]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "integration_test_setup.sh not found!"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS source]} {[VarSub CURRENT_DIR] [LIT_CHARS /bazel_sandboxing_test_utils.sh]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "bazel_sandboxing_test_utils.sh not found!"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS source]} {[VarSub CURRENT_DIR] [LIT_CHARS /remote_helpers.sh]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "remote_helpers.sh not found!"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /bazelrc]} >"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "# Testing the sandboxed strategy requires using the sandboxed strategy. While it is the default,\n"] [LIT_CHARS "# we want to make sure that this explicitly fails when the strategy is not available on the system\n"] [LIT_CHARS "# running the test.\n"] [LIT_CHARS "build --spawn_strategy=sandboxed --genrule_strategy=sandboxed\n"]} 0), > ) (FunctionDef set_up [] (List (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[LIT_CHARS examples/genrule]}) (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "foo bar bz\n"]} 0), (FilenameRedirectNode filename={[LIT_CHARS examples/genrule/a.txt]} "> 1), > ) (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "apples oranges bananas\n"]} 0), (FilenameRedirectNode filename={[LIT_CHARS examples/genrule/b.txt]} "> 1), > ) (Com {[LIT_CHARS ln]} {[LIT_CHARS -sf]} {[LIT_CHARS cyclic2]} {[LIT_CHARS examples/genrule/cyclic1]}) (Com {[LIT_CHARS ln]} {[LIT_CHARS -sf]} {[LIT_CHARS cyclic1]} {[LIT_CHARS examples/genrule/cyclic2]}) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[LIT_CHARS examples/genrule/symlinks/] [LIT_LBRACE "{"] [LIT_CHARS a] [LIT_COMMA ","] [LIT_CHARS ok/sub] [LIT_RBRACE "}"]}) (Com {[LIT_CHARS echo]} {[LIT_CHARS OK]} < (FilenameRedirectNode filename={[LIT_CHARS examples/genrule/symlinks/ok/x.txt]} "> 1), > ) (Com {[LIT_CHARS ln]} {[LIT_CHARS -s]} {[VarSub PWD] [LIT_CHARS /examples/genrule/symlinks/ok/sub]} {[LIT_CHARS examples/genrule/symlinks/a/b]}) (Com {[LIT_CHARS ln]} {[LIT_CHARS -s]} {[LIT_CHARS ../x.txt]} {[LIT_CHARS examples/genrule/symlinks/a/b/x.txt]}) (Com {[LIT_CHARS echo]} {[SQ ]} < (FilenameRedirectNode filename={[LIT_CHARS file_to_serve]} "> 1), > ) (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "genrule(\n"] [LIT_CHARS " name = \"works\",\n"] [LIT_CHARS " srcs = [ \"a.txt\" ],\n"] [LIT_CHARS " outs = [ \"works.txt\" ],\n"] [LIT_CHARS " cmd = \"wc $(location :a.txt) > $@\",\n"] [LIT_CHARS ")\n"] [LIT_CHARS "\n"] [LIT_CHARS "sh_binary(\n"] [LIT_CHARS " name = \"tool\",\n"] [LIT_CHARS " srcs = [\"tool.sh\"],\n"] [LIT_CHARS " data = [\"datafile\"],\n"] [LIT_CHARS ")\n"] [LIT_CHARS "\n"] [LIT_CHARS "genrule(\n"] [LIT_CHARS " name = \"tools_work\",\n"] [LIT_CHARS " srcs = [],\n"] [LIT_CHARS " outs = [\"tools.txt\"],\n"] [LIT_CHARS " cmd = \"$(location :tool) $@\",\n"] [LIT_CHARS " tools = [\":tool\"],\n"] [LIT_CHARS ")\n"] [LIT_CHARS "\n"] [LIT_CHARS "genrule(\n"] [LIT_CHARS " name = \"tooldir\",\n"] [LIT_CHARS " srcs = [],\n"] [LIT_CHARS " outs = [\"tooldir.txt\"],\n"] [LIT_CHARS " cmd = \"ls -l external/bazel_tools/tools/genrule | tee $@ >&2; \" +\n"] [LIT_CHARS " \"cat external/bazel_tools/tools/genrule/genrule-setup.sh >&2\",\n"] [LIT_CHARS ")\n"] [LIT_CHARS "\n"] [LIT_CHARS "genrule(\n"] [LIT_CHARS " name = \"relative_symlinks\",\n"] [LIT_CHARS " srcs = [ \"symlinks/a/b/x.txt\" ],\n"] [LIT_CHARS " outs = [ \"relative_symlinks.txt\" ],\n"] [LIT_CHARS " cmd = \"cat $(location :symlinks/a/b/x.txt) > $@\",\n"] [LIT_CHARS ")\n"] [LIT_CHARS "\n"] [LIT_CHARS "genrule(\n"] [LIT_CHARS " name = \"breaks1\",\n"] [LIT_CHARS " srcs = [ \"a.txt\" ],\n"] [LIT_CHARS " outs = [ \"breaks1.txt\" ],\n"] [LIT_CHARS " cmd = \"wc $(location :a.txt) `dirname $(location :a.txt)`/b.txt &> $@\",\n"] [LIT_CHARS ")\n"] [LIT_CHARS "\n"] [LIT_CHARS "genrule(\n"] [LIT_CHARS " name = \"breaks1_works_with_local\",\n"] [LIT_CHARS " srcs = [ \"a.txt\" ],\n"] [LIT_CHARS " outs = [ \"breaks1_works_with_local.txt\" ],\n"] [LIT_CHARS " cmd = \"wc $(location :a.txt) `dirname $(location :a.txt)`/b.txt > $@\",\n"] [LIT_CHARS " local = 1,\n"] [LIT_CHARS ")\n"] [LIT_CHARS "\n"] [LIT_CHARS "genrule(\n"] [LIT_CHARS " name = \"breaks1_works_with_local_tag\",\n"] [LIT_CHARS " srcs = [ \"a.txt\" ],\n"] [LIT_CHARS " outs = [ \"breaks1_works_with_local_tag.txt\" ],\n"] [LIT_CHARS " cmd = \"wc $(location :a.txt) `dirname $(location :a.txt)`/b.txt > $@\",\n"] [LIT_CHARS " tags = [ \"local\" ],\n"] [LIT_CHARS ")\n"] [LIT_CHARS "\n"] [LIT_CHARS "load('/examples/genrule/skylark', 'skylark_breaks1')\n"] [LIT_CHARS "\n"] [LIT_CHARS "skylark_breaks1(\n"] [LIT_CHARS " name = \"skylark_breaks1\",\n"] [LIT_CHARS " input = \"a.txt\",\n"] [LIT_CHARS " output = \"skylark_breaks1.txt\",\n"] [LIT_CHARS ")\n"] [LIT_CHARS "\n"] [LIT_CHARS "skylark_breaks1(\n"] [LIT_CHARS " name = \"skylark_breaks1_works_with_local_tag\",\n"] [LIT_CHARS " input = \"a.txt\",\n"] [LIT_CHARS " output = \"skylark_breaks1_works_with_local_tag.txt\",\n"] [LIT_CHARS " action_tags = [ \"local\" ],\n"] [LIT_CHARS ")\n"] [LIT_CHARS "\n"] [LIT_CHARS "genrule(\n"] [LIT_CHARS " name = \"breaks2\",\n"] [LIT_CHARS " srcs = [ \"a.txt\" ],\n"] [LIT_CHARS " outs = [ \"breaks2.txt\" ],\n"] [LIT_CHARS " # The point of this test is to attempt to read something from the filesystem\n"] [LIT_CHARS " # that resides outside the sandbox by using an absolute path to that file.\n"] [LIT_CHARS " #\n"] [LIT_CHARS " # /var/log is an arbitrary choice of directory (we don't mount it in the\n"] [LIT_CHARS " # sandbox and it should exist on every linux) which could be changed in\n"] [LIT_CHARS " # case it turns out it's necessary to put it in sandbox.\n"] [LIT_CHARS " #\n"] [LIT_CHARS " cmd = \"ls /var/log &> $@\",\n"] [LIT_CHARS ")\n"] [LIT_CHARS "\n"] [LIT_CHARS "genrule(\n"] [LIT_CHARS " name = \"breaks3\",\n"] [LIT_CHARS " srcs = [ \"cyclic1\", \"cyclic2\" ],\n"] [LIT_CHARS " outs = [ \"breaks3.txt\" ],\n"] [LIT_CHARS " cmd = \"wc $(location :cyclic1) > $@\",\n"] [LIT_CHARS ")\n"] [LIT_CHARS "\n"] [LIT_CHARS "genrule(\n"] [LIT_CHARS " name = \"check_sandbox_contain_WORKSPACE\",\n"] [LIT_CHARS " outs = [ \"check_sandbox_contain_WORKSPACE.txt\" ],\n"] [LIT_CHARS " cmd = \"ls -l $$(dirname \\\"$$(pwd)\\\") &> $@\",\n"] [LIT_CHARS ")\n"] [LIT_CHARS "\n"]} 0), (FilenameRedirectNode filename={[LIT_CHARS examples/genrule/BUILD]} "> 1), > ) (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "this is a datafile\n"]} 0), (FilenameRedirectNode filename={[LIT_CHARS examples/genrule/datafile]} >"> 1), > ) (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "#!/bin/sh\n"] [LIT_CHARS "\n"] [LIT_CHARS "set -e\n"] [LIT_CHARS "cp $(dirname $0)/tool.runfiles/__main__/examples/genrule/datafile $1\n"] [LIT_CHARS "echo \"Tools work!\"\n"]} 0), (FilenameRedirectNode filename={[LIT_CHARS examples/genrule/tool.sh]} >"> 1), > ) (Com {[LIT_CHARS chmod]} {[LIT_OTHER "+"] [LIT_CHARS x]} {[LIT_CHARS examples/genrule/tool.sh]}) (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "def _skylark_breaks1_impl(ctx):\n"] [LIT_CHARS " print(ctx.outputs.output.path)\n"] [LIT_CHARS " ctx.action(\n"] [LIT_CHARS " inputs = [ ctx.file.input ],\n"] [LIT_CHARS " outputs = [ ctx.outputs.output ],\n"] [LIT_CHARS " command = \"wc %s `dirname %s`/b.txt &> %s\" % (ctx.file.input.path,\n"] [LIT_CHARS " ctx.file.input.path,\n"] [LIT_CHARS " ctx.outputs.output.path),\n"] [LIT_CHARS " execution_requirements = { tag: '' for tag in ctx.attr.action_tags },\n"] [LIT_CHARS " )\n"] [LIT_CHARS "\n"] [LIT_CHARS "skylark_breaks1 = rule(\n"] [LIT_CHARS " _skylark_breaks1_impl,\n"] [LIT_CHARS " attrs = {\n"] [LIT_CHARS " \"input\": attr.label(mandatory=True, allow_files=True, single_file=True),\n"] [LIT_CHARS " \"output\": attr.output(mandatory=True),\n"] [LIT_CHARS " \"action_tags\": attr.string_list(),\n"] [LIT_CHARS " },\n"] [LIT_CHARS ")\n"]} 0), (FilenameRedirectNode filename={[LIT_CHARS examples/genrule/skylark.bzl]} >"> 1), > ) ) ) (FunctionDef test_sandboxed_genrule [] (List (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS examples/genrule] [LIT_OTHER ":"] [LIT_CHARS works]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Hermetic genrule failed: examples/genrule:works"]]}) ) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[DQ [VarSub BAZEL_GENFILES_DIR][LIT_CHARS /examples/genrule/works.txt]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Genrule did not produce output: examples/genrule:works"]]}) ) ) ) (FunctionDef test_sandboxed_tooldir [] (List (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS examples/genrule] [LIT_OTHER ":"] [LIT_CHARS tooldir]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Hermetic genrule failed: examples/genrule:tooldir"]]}) ) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[DQ [VarSub BAZEL_GENFILES_DIR][LIT_CHARS /examples/genrule/tooldir.txt]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Genrule did not produce output: examples/genrule:works"]]}) ) (Com {[LIT_CHARS cat]} {[DQ [VarSub BAZEL_GENFILES_DIR][LIT_CHARS /examples/genrule/tooldir.txt]]} < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS genrule-setup.sh]]}) ) ) (FunctionDef test_sandboxed_genrule_with_tools [] (List (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS examples/genrule] [LIT_OTHER ":"] [LIT_CHARS tools_work]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Hermetic genrule failed: examples/genrule:tools_work"]]}) ) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[DQ [VarSub BAZEL_GENFILES_DIR][LIT_CHARS /examples/genrule/tools.txt]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Genrule did not produce output: examples/genrule:tools_work"]]}) ) ) ) (FunctionDef test_sandbox_cleanup [] (List (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS --batch]} {[LIT_CHARS clean]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "bazel clean failed"]]}) ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS examples/genrule] [LIT_OTHER ":"] [LIT_CHARS tools_work]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Hermetic genrule failed: examples/genrule:tools_work"]]}) ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS shutdown]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "bazel shutdown failed"]]}) ) (If (DBracket {B1 UNARY_STRING_n {[DQ [ComSub (Com {[LIT_CHARS ls]} {[LIT_CHARS -A]} {[DQ [ComSub (Com {[LIT_CHARS bazel]} {[LIT_CHARS info]} {[LIT_CHARS output_base]})][LIT_CHARS /bazel-sandbox]]})]]}}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Build left files around afterwards"]]}) ) ) ) (FunctionDef test_sandbox_relative_symlink_in_inputs [] (List (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS examples/genrule] [LIT_OTHER ":"] [LIT_CHARS relative_symlinks]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Hermetic genrule failed: examples/genrule:relative_symlinks"]]}) ) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[DQ [VarSub BAZEL_GENFILES_DIR][LIT_CHARS /examples/genrule/relative_symlinks.txt]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Genrule did not produce output: examples/genrule:relative_symlinks"]]}) ) ) ) (FunctionDef test_sandbox_undeclared_deps [] (List (= scope= flags=0 words=[] bindings=[('output_file', {[DQ [VarSub BAZEL_GENFILES_DIR][LIT_CHARS /examples/genrule/breaks1.txt]]})]) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS examples/genrule] [LIT_OTHER ":"] [LIT_CHARS breaks1]}) ) (AndOr OP_AND_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (AndOr OP_OR_IF (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Non-hermetic genrule succeeded: examples/genrule:breaks1"]]}) (Com {[LIT_CHARS true]}) ) ) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[DQ [VarSub output_file]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Action did not produce output: "][VarSub output_file]]}) ) (If (Com {[LIT_OTHER "["]} {[ComSub (Com {[LIT_CHARS wc]} {[LIT_CHARS -l]} {[VarSub output_file]})]} {[LIT_CHARS -gt]} {[LIT_CHARS 1]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Output contained more than one line: "][VarSub output_file]]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS fgrep]} {[DQ [LIT_CHARS "No such file or directory"]]} {[VarSub output_file]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Output did not contain expected error message: "][VarSub output_file]]}) ) ) ) (FunctionDef test_sandbox_undeclared_deps_with_local [] (List (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS examples/genrule] [LIT_OTHER ":"] [LIT_CHARS breaks1_works_with_local]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Non-hermetic genrule failed even though local=1: examples/genrule:breaks1_works_with_local"]]}) ) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[DQ [VarSub BAZEL_GENFILES_DIR][LIT_CHARS /examples/genrule/breaks1_works_with_local.txt]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Genrule did not produce output: examples/genrule:breaks1_works_with_local"]]}) ) ) ) (FunctionDef test_sandbox_undeclared_deps_with_local_tag [] (List (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS examples/genrule] [LIT_OTHER ":"] [LIT_CHARS breaks1_works_with_local_tag]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Non-hermetic genrule failed even though tags=['local']: examples/genrule:breaks1_works_with_local_tag"]]}) ) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[DQ [VarSub BAZEL_GENFILES_DIR][LIT_CHARS /examples/genrule/breaks1_works_with_local_tag.txt]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Genrule did not produce output: examples/genrule:breaks1_works_with_local_tag"]]}) ) ) ) (FunctionDef test_sandbox_undeclared_deps_skylark [] (List (= scope= flags=0 words=[] bindings=[('output_file', {[DQ [VarSub BAZEL_BIN_DIR][LIT_CHARS /examples/genrule/skylark_breaks1.txt]]})]) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS examples/genrule] [LIT_OTHER ":"] [LIT_CHARS skylark_breaks1]}) ) (AndOr OP_AND_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (AndOr OP_OR_IF (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Non-hermetic genrule succeeded: examples/genrule:skylark_breaks1"]]}) (Com {[LIT_CHARS true]}) ) ) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[DQ [VarSub output_file]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Action did not produce output: "][VarSub output_file]]}) ) (If (Com {[LIT_OTHER "["]} {[ComSub (Com {[LIT_CHARS wc]} {[LIT_CHARS -l]} {[VarSub output_file]})]} {[LIT_CHARS -gt]} {[LIT_CHARS 1]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Output contained more than one line: "][VarSub output_file]]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS fgrep]} {[DQ [LIT_CHARS "No such file or directory"]]} {[VarSub output_file]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Output did not contain expected error message: "][VarSub output_file]]}) ) ) ) (FunctionDef test_sandbox_undeclared_deps_skylark_with_local_tag [] (List (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS examples/genrule] [LIT_OTHER ":"] [LIT_CHARS skylark_breaks1_works_with_local_tag]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Non-hermetic genrule failed even though tags=['local']: examples/genrule:skylark_breaks1_works_with_local_tag"]]}) ) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[DQ [VarSub BAZEL_BIN_DIR][LIT_CHARS /examples/genrule/skylark_breaks1_works_with_local_tag.txt]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Action did not produce output: examples/genrule:skylark_breaks1_works_with_local_tag"]]}) ) ) ) (FunctionDef test_sandbox_block_filesystem [] (List (= scope= flags=0 words=[] bindings=[('output_file', {[DQ [VarSub BAZEL_GENFILES_DIR][LIT_CHARS /examples/genrule/breaks2.txt]]})]) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS --sandbox_block_path] [LIT_OTHER "="] [LIT_CHARS /var/log]} {[LIT_CHARS examples/genrule] [LIT_OTHER ":"] [LIT_CHARS breaks2]}) ) (AndOr OP_AND_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (AndOr OP_OR_IF (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Non-hermetic genrule succeeded: examples/genrule:breaks2"]]}) (Com {[LIT_CHARS true]}) ) ) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[DQ [VarSub output_file]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Action did not produce output: "][VarSub output_file]]}) ) (If (Com {[LIT_OTHER "["]} {[ComSub (Com {[LIT_CHARS wc]} {[LIT_CHARS -l]} {[VarSub output_file]})]} {[LIT_CHARS -gt]} {[LIT_CHARS 1]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Output contained more than one line: "][VarSub output_file]]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS fgrep]} {[DQ [LIT_CHARS "Permission denied"]]} {[VarSub output_file]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Output did not contain expected error message: "][VarSub output_file]]}) ) ) ) (FunctionDef test_sandbox_cyclic_symlink_in_inputs [] (List (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS examples/genrule] [LIT_OTHER ":"] [LIT_CHARS breaks3]}) ) (AndOr OP_AND_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (AndOr OP_OR_IF (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Genrule with cyclic symlinks succeeded: examples/genrule:breaks3"]]}) (Com {[LIT_CHARS true]}) ) ) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[DQ [VarSub BAZEL_GENFILES_DIR][LIT_CHARS /examples/genrule/breaks3.txt]]} {[LIT_OTHER "]"]}) (List (= scope= flags=0 words=[] bindings=[('output', {[ComSub (Com {[LIT_CHARS cat]} {[DQ [VarSub BAZEL_GENFILES_DIR][LIT_CHARS /examples/genrule/breaks3.txt]]})]})]) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Genrule with cyclic symlinks breaks3 succeeded with following output: "][VarSub output]]}) ) ) ) ) (FunctionDef test_sandbox_network_access [] (List (Com {[LIT_CHARS serve_file]} {[LIT_CHARS file_to_serve]}) (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "\n"][LIT_CHARS "genrule(\n"][LIT_CHARS " name = "][RIGHT_D_QUOTE "\""][LIT_CHARS sandbox_network_access][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " outs = [ "][RIGHT_D_QUOTE "\""][LIT_CHARS sandbox_network_access.txt][RIGHT_D_QUOTE "\""][LIT_CHARS " ],\n"][LIT_CHARS " cmd = "][RIGHT_D_QUOTE "\""][LIT_CHARS "curl -o "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "@ localhost:"][VarSub nc_port][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS ")\n"]]} 0), (FilenameRedirectNode filename={[LIT_CHARS examples/genrule/BUILD]} >"> 1), > ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS examples/genrule] [LIT_OTHER ":"] [LIT_CHARS sandbox_network_access]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "genrule 'sandbox_network_access' trying to use network failed, but should have succeeded"]]}) ) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[DQ [VarSub BAZEL_GENFILES_DIR][LIT_CHARS /examples/genrule/sandbox_network_access.txt]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "genrule 'sandbox_network_access' did not produce output"]]}) ) (Com {[LIT_CHARS kill_nc]}) ) ) (FunctionDef test_sandbox_network_access_with_local [] (List (Com {[LIT_CHARS serve_file]} {[LIT_CHARS file_to_serve]}) (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "\n"][LIT_CHARS "genrule(\n"][LIT_CHARS " name = "][RIGHT_D_QUOTE "\""][LIT_CHARS sandbox_network_access_with_local][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " outs = [ "][RIGHT_D_QUOTE "\""][LIT_CHARS sandbox_network_access_with_local.txt][RIGHT_D_QUOTE "\""][LIT_CHARS " ],\n"][LIT_CHARS " cmd = "][RIGHT_D_QUOTE "\""][LIT_CHARS "curl -o "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "@ localhost:"][VarSub nc_port][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " tags = [ "][RIGHT_D_QUOTE "\""][LIT_CHARS local][RIGHT_D_QUOTE "\""][LIT_CHARS " ],\n"][LIT_CHARS ")\n"]]} 0), (FilenameRedirectNode filename={[LIT_CHARS examples/genrule/BUILD]} >"> 1), > ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS examples/genrule] [LIT_OTHER ":"] [LIT_CHARS sandbox_network_access_with_local]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "genrule 'sandbox_network_access_with_local' trying to use network failed, but should have succeeded"]]}) ) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[DQ [VarSub BAZEL_GENFILES_DIR][LIT_CHARS /examples/genrule/sandbox_network_access_with_local.txt]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "genrule 'sandbox_network_access_with_local' did not produce output"]]}) ) (Com {[LIT_CHARS kill_nc]}) ) ) (FunctionDef test_sandbox_network_access_with_block_network [] (List (Com {[LIT_CHARS serve_file]} {[LIT_CHARS file_to_serve]}) (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "\n"][LIT_CHARS "genrule(\n"][LIT_CHARS " name = "][RIGHT_D_QUOTE "\""][LIT_CHARS sandbox_network_access_with_block_network][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " outs = [ "][RIGHT_D_QUOTE "\""][LIT_CHARS sandbox_network_access_with_block_network.txt][RIGHT_D_QUOTE "\""][LIT_CHARS " ],\n"][LIT_CHARS " cmd = "][RIGHT_D_QUOTE "\""][LIT_CHARS "curl -o "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "@ localhost:"][VarSub nc_port][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " tags = [ "][RIGHT_D_QUOTE "\""][LIT_CHARS block-network][RIGHT_D_QUOTE "\""][LIT_CHARS " ],\n"][LIT_CHARS ")\n"]]} 0), (FilenameRedirectNode filename={[LIT_CHARS examples/genrule/BUILD]} >"> 1), > ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS examples/genrule] [LIT_OTHER ":"] [LIT_CHARS sandbox_network_access_with_block_network]}) ) (AndOr OP_AND_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (AndOr OP_OR_IF (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "genrule 'sandbox_network_access_with_block_network' trying to use network succeeded, but should have failed"]]}) (Com {[LIT_CHARS true]}) ) ) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[DQ [VarSub BAZEL_GENFILES_DIR][LIT_CHARS /examples/genrule/breaks4_works_with_requires_network.txt]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "genrule 'sandbox_network_access_with_block_network' produced output, but was expected to fail"]]}) ) (Com {[LIT_CHARS kill_nc]}) ) ) (FunctionDef DISABLED_test_sandbox_different_nobody_uid [] (List (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS /etc/passwd]}) (Com {[LIT_CHARS sed]} {[SQ ]} < (FilenameRedirectNode filename={[DQ [VarSub TEST_TMPDIR][LIT_CHARS /passwd]]} "> 1), > ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS unshare]} {[LIT_CHARS --user]} {[LIT_CHARS --mount]} {[LIT_CHARS --map-root-user]} {[LIT_CHARS --]} {[LIT_CHARS bash]} {[LIT_CHARS -]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "set -u\n"][LIT_CHARS "\n"][LIT_CHARS "mount --bind "][VarSub TEST_TMPDIR][LIT_CHARS "/passwd /etc/passwd\n"][LIT_CHARS "bazel build examples/genrule:works &> "][VarSub TEST_log][LIT_CHARS "\n"]]} 0), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Hermetic genrule with different UID for nobody failed"]]} {[LIT_CHARS set]} {[LIT_CHARS -e]}) ) ) ) (FunctionDef test_succeeding_action_with_ioexception_while_copying_outputs_throws_correct_exception [] (List (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS BUILD]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "genrule(\n"] [LIT_CHARS " name = \"test\",\n"] [LIT_CHARS " outs = [\"readonlydir/output.txt\"],\n"] [LIT_CHARS " cmd = \"touch $(location readonlydir/output.txt); chmod 0 $(location readonlydir/output.txt); chmod 0500 `dirname $(location readonlydir/output.txt)`\",\n"] [LIT_CHARS ")\n"]} 0), > ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_OTHER ":"] [LIT_CHARS test]}) ) (AndOr OP_AND_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (AndOr OP_OR_IF (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build should have failed"]]}) (Com {[LIT_CHARS true]}) ) ) (Com {[LIT_CHARS expect_not_log]} {[DQ [LIT_CHARS "I/O error during sandboxed execution"]]}) (Com {[LIT_CHARS expect_not_log]} {[DQ [LIT_CHARS "Executing genrule //:test failed: linux-sandbox failed: error executing command"]]}) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "Could not move output artifacts from sandboxed execution.*(Permission denied)"]]}) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "ERROR:.*Executing genrule //:test failed"]]}) ) ) (FunctionDef test_failing_action_with_ioexception_while_copying_outputs_throws_correct_exception [] (List (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS BUILD]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "genrule(\n"] [LIT_CHARS " name = \"test\",\n"] [LIT_CHARS " outs = [\"readonlydir/output.txt\"],\n"] [LIT_CHARS " cmd = \"touch $(location readonlydir/output.txt); chmod 0 $(location readonlydir/output.txt); chmod 0500 `dirname $(location readonlydir/output.txt)`; exit 1\",\n"] [LIT_CHARS ")\n"]} 0), > ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_OTHER ":"] [LIT_CHARS test]}) ) (AndOr OP_AND_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (AndOr OP_OR_IF (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build should have failed"]]}) (Com {[LIT_CHARS true]}) ) ) (Com {[LIT_CHARS expect_not_log]} {[DQ [LIT_CHARS "I/O error during sandboxed execution"]]}) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "ERROR: I/O exception while extracting output artifacts from sandboxed execution.*(Permission denied)"]]}) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "Executing genrule //:test failed: linux-sandbox failed: error executing command"]]}) ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS check_supported_platform]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) (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 sandbox]]}) )