(List (Com {[LIT_CHARS set]} {[LIT_CHARS -u]}) (= scope= flags=0 words=[] bindings=[('ADDITIONAL_BUILD_FLAGS', {[VarSub 1]})]) (= scope= flags=0 words=[] bindings=[('WORKER_TYPE_LOG_STRING', {[VarSub 2]})]) (Com {[LIT_CHARS shift]} {[LIT_CHARS 2]}) (= 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]}) ) ) (= scope= flags=0 words=[] bindings=[('example_worker', {[ComSub (Com {[LIT_CHARS find]} {[VarSub BAZEL_RUNFILES]} {[LIT_CHARS -name]} {[LIT_CHARS ExampleWorker_deploy.jar]})]})]) (FunctionDef set_up [] (List (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS --worker_quit_after_build]}) ) (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) ) ) (FunctionDef write_hello_library_files [] (List (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[LIT_CHARS java/main]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS java/main/BUILD]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "java_binary(name = 'main',\n"][LIT_CHARS " deps = ['//java/hello_library'],\n"][LIT_CHARS " srcs = ['Main.java'],\n"][LIT_CHARS " main_class = 'main.Main')\n"]]} 0), > ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS java/main/Main.java]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "package main;\n"][LIT_CHARS "import hello_library.HelloLibrary;\n"][LIT_CHARS "public class Main {\n"][LIT_CHARS " public static void main(String[] args) {\n"][LIT_CHARS " HelloLibrary.funcHelloLibrary();\n"][LIT_CHARS " System.out.println("][RIGHT_D_QUOTE "\""][LIT_CHARS "Hello, World!"][RIGHT_D_QUOTE "\""][LIT_CHARS ");\n"][LIT_CHARS " }\n"][LIT_CHARS "}\n"]]} 0), > ) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[LIT_CHARS java/hello_library]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS java/hello_library/BUILD]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "package(default_visibility=['//visibility:public'])\n"][LIT_CHARS "java_library(name = 'hello_library',\n"][LIT_CHARS " srcs = ['HelloLibrary.java']);\n"]]} 0), > ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS java/hello_library/HelloLibrary.java]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "package hello_library;\n"][LIT_CHARS "public class HelloLibrary {\n"][LIT_CHARS " public static void funcHelloLibrary() {\n"][LIT_CHARS " System.out.print("][RIGHT_D_QUOTE "\""][LIT_CHARS "Hello, Library!;"][RIGHT_D_QUOTE "\""][LIT_CHARS ");\n"][LIT_CHARS " }\n"][LIT_CHARS "}\n"]]} 0), > ) ) ) (FunctionDef test_compiles_hello_library_using_persistent_javac [] (List (Com {[LIT_CHARS write_hello_library_files]}) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Javac="] [LIT_CHARS worker]} {[LIT_CHARS //java/main] [LIT_OTHER ":"] [LIT_CHARS main]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "Created new "][VarSub WORKER_TYPE_LOG_STRING][LIT_CHARS " Javac worker (id [0-9]"][\ LIT_ESCAPED_CHAR "\\+"][LIT_CHARS ")"]]}) (AndOr OP_OR_IF (Pipeline (Com {[LIT_CHARS bazel-bin/java/main/main]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS -q]} {[DQ [LIT_CHARS "Hello, Library!;Hello, World!"]]}) ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "comparison failed"]]}) ) ) ) (FunctionDef prepare_example_worker [] (List (Com {[LIT_CHARS cp]} {[VarSub example_worker]} {[LIT_CHARS worker_lib.jar]}) (Com {[LIT_CHARS chmod]} {[LIT_OTHER "+"] [LIT_CHARS w]} {[LIT_CHARS worker_lib.jar]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS exampledata]]} < (FilenameRedirectNode filename={[LIT_CHARS worker_data.txt]} "> 1), > ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS work.bzl]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "def _impl(ctx):\n"] [LIT_CHARS " worker = ctx.executable.worker\n"] [LIT_CHARS " output = ctx.outputs.out\n"] [LIT_CHARS "\n"] [LIT_CHARS " # Generate the \"@\"-file containing the command-line args for the unit of work.\n"] [LIT_CHARS " argfile = ctx.new_file(ctx.bin_dir, \"%s_worker_input\" % ctx.label.name)\n"] [LIT_CHARS " argfile_contents = \"\\n\".join([\"--output_file=\" + output.path] + ctx.attr.args)\n"] [LIT_CHARS " ctx.file_action(output=argfile, content=argfile_contents)\n"] [LIT_CHARS "\n"] [LIT_CHARS " ctx.action(\n"] [LIT_CHARS " inputs=[argfile] + ctx.files.srcs,\n"] [LIT_CHARS " outputs=[output],\n"] [LIT_CHARS " executable=worker,\n"] [LIT_CHARS " progress_message=\"Working on %s\" % ctx.label.name,\n"] [LIT_CHARS " mnemonic=\"Work\",\n"] [LIT_CHARS " execution_requirements={\"supports-workers\": \"1\"},\n"] [LIT_CHARS " arguments=ctx.attr.worker_args + [\"@\" + argfile.path],\n"] [LIT_CHARS " )\n"] [LIT_CHARS "\n"] [LIT_CHARS "work = rule(\n"] [LIT_CHARS " implementation=_impl,\n"] [LIT_CHARS " attrs={\n"] [LIT_CHARS " \"worker\": attr.label(cfg=\"host\", mandatory=True, allow_files=True, executable=True),\n"] [LIT_CHARS " \"worker_args\": attr.string_list(),\n"] [LIT_CHARS " \"args\": attr.string_list(),\n"] [LIT_CHARS " \"srcs\": attr.label_list(allow_files=True),\n"] [LIT_CHARS " },\n"] [LIT_CHARS " outputs = {\"out\": \"%{name}.out\"},\n"] [LIT_CHARS ")\n"]} 0), > ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS BUILD]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "load("][RIGHT_D_QUOTE "\""][LIT_CHARS work][RIGHT_D_QUOTE "\""][LIT_CHARS ", "][RIGHT_D_QUOTE "\""][LIT_CHARS work][RIGHT_D_QUOTE "\""][LIT_CHARS ")\n"][LIT_CHARS "\n"][LIT_CHARS "java_import(\n"][LIT_CHARS " name = "][RIGHT_D_QUOTE "\""][LIT_CHARS worker_lib][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " jars = ["][RIGHT_D_QUOTE "\""][LIT_CHARS worker_lib.jar][RIGHT_D_QUOTE "\""][LIT_CHARS "],\n"][LIT_CHARS ")\n"][LIT_CHARS "\n"][LIT_CHARS "java_binary(\n"][LIT_CHARS " name = "][RIGHT_D_QUOTE "\""][LIT_CHARS worker][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " main_class = "][RIGHT_D_QUOTE "\""][LIT_CHARS com.google.devtools.build.lib.worker.ExampleWorker][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " runtime_deps = [\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS ":worker_lib"][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " ],\n"][LIT_CHARS " data = [\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS ":worker_data.txt"][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS " ]\n"][LIT_CHARS ")\n"]]} 0), > ) ) ) (FunctionDef test_example_worker [] (List (Com {[LIT_CHARS prepare_example_worker]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS BUILD]} >"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "work(\n"][LIT_CHARS " name = "][RIGHT_D_QUOTE "\""][LIT_CHARS hello_world][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " worker = "][RIGHT_D_QUOTE "\""][LIT_CHARS ":worker"][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " args = ["][RIGHT_D_QUOTE "\""][LIT_CHARS "hello world"][RIGHT_D_QUOTE "\""][LIT_CHARS "],\n"][LIT_CHARS ")\n"][LIT_CHARS "\n"][LIT_CHARS "work(\n"][LIT_CHARS " name = "][RIGHT_D_QUOTE "\""][LIT_CHARS hello_world_uppercase][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " worker = "][RIGHT_D_QUOTE "\""][LIT_CHARS ":worker"][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " args = ["][RIGHT_D_QUOTE "\""][LIT_CHARS --uppercase][RIGHT_D_QUOTE "\""][LIT_CHARS ", "][RIGHT_D_QUOTE "\""][LIT_CHARS "hello world"][RIGHT_D_QUOTE "\""][LIT_CHARS "],\n"][LIT_CHARS ")\n"]]} 0), > ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_OTHER ":"] [LIT_CHARS hello_world]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (Com {[LIT_CHARS assert_equals]} {[DQ [LIT_CHARS "hello world"]]} {[DQ [ComSub (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world.out]})]]}) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_uppercase]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (Com {[LIT_CHARS assert_equals]} {[DQ [LIT_CHARS "HELLO WORLD"]]} {[DQ [ComSub (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_uppercase.out]})]]}) ) ) (FunctionDef test_workers_quit_after_build [] (List (Com {[LIT_CHARS prepare_example_worker]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS BUILD]} >"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "[work(\n"] [LIT_CHARS " name = \"hello_world_%s\" % idx,\n"] [LIT_CHARS " worker = \":worker\",\n"] [LIT_CHARS " args = [\"--write_counter\"],\n"] [LIT_CHARS ") for idx in range(10)]\n"]} 0), > ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_CHARS --worker_quit_after_build]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_1]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (= scope= flags=0 words=[] bindings=[('work_count', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_1.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS COUNTER]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [LIT_CHARS 1]]} {[VarSub work_count]}) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_CHARS --worker_quit_after_build]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_2]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (= scope= flags=0 words=[] bindings=[('work_count', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_2.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS COUNTER]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [LIT_CHARS 1]]} {[VarSub work_count]}) ) ) (FunctionDef test_worker_restarts_after_exit [] (List (Com {[LIT_CHARS prepare_example_worker]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS BUILD]} >"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "[work(\n"] [LIT_CHARS " name = \"hello_world_%s\" % idx,\n"] [LIT_CHARS " worker = \":worker\",\n"] [LIT_CHARS " worker_args = [\"--exit_after=2\"],\n"] [LIT_CHARS " args = [\"--write_uuid\", \"--write_counter\"],\n"] [LIT_CHARS ") for idx in range(10)]\n"]} 0), > ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_1]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (= scope= flags=0 words=[] bindings=[('worker_uuid_1', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_1.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS UUID]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (= scope= flags=0 words=[] bindings=[('work_count', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_1.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS COUNTER]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [LIT_CHARS 1]]} {[VarSub work_count]}) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_2]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (= scope= flags=0 words=[] bindings=[('worker_uuid_2', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_2.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS UUID]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (= scope= flags=0 words=[] bindings=[('work_count', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_2.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS COUNTER]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [LIT_CHARS 2]]} {[VarSub work_count]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub worker_uuid_1]]} {[DQ [VarSub worker_uuid_2]]}) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_3]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (= scope= flags=0 words=[] bindings=[('worker_uuid_3', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_3.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS UUID]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (= scope= flags=0 words=[] bindings=[('work_count', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_3.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS COUNTER]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [LIT_CHARS 1]]} {[VarSub work_count]}) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "worker .* can no longer be used, because its process terminated itself or got killed"]]}) (Com {[LIT_CHARS assert_not_equals]} {[DQ [VarSub worker_uuid_2]]} {[DQ [VarSub worker_uuid_3]]}) ) ) (FunctionDef test_worker_restarts_when_worker_binary_changes [] (List (Com {[LIT_CHARS prepare_example_worker]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS BUILD]} >"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "[work(\n"] [LIT_CHARS " name = \"hello_world_%s\" % idx,\n"] [LIT_CHARS " worker = \":worker\",\n"] [LIT_CHARS " args = [\"--write_uuid\", \"--write_counter\"],\n"] [LIT_CHARS ") for idx in range(10)]\n"]} 0), > ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_1]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (= scope= flags=0 words=[] bindings=[('worker_uuid_1', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_1.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS UUID]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (= scope= flags=0 words=[] bindings=[('work_count', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_1.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS COUNTER]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [LIT_CHARS 1]]} {[VarSub work_count]}) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_2]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (= scope= flags=0 words=[] bindings=[('worker_uuid_2', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_2.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS UUID]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (= scope= flags=0 words=[] bindings=[('work_count', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_2.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS COUNTER]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [LIT_CHARS 2]]} {[VarSub work_count]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub worker_uuid_1]]} {[DQ [VarSub worker_uuid_2]]}) (Pipeline (Com {[LIT_CHARS tr]} {[LIT_CHARS -cd]} {[SQ ]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/urandom]} 0), > ) (Com {[LIT_CHARS head]} {[LIT_CHARS -c32]} < (FilenameRedirectNode filename={[LIT_CHARS dummy_file]} "> 1), > ) ) (Com {[LIT_CHARS zip]} {[LIT_CHARS worker_lib.jar]} {[LIT_CHARS dummy_file]}) (Com {[LIT_CHARS rm]} {[LIT_CHARS dummy_file]}) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_3]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (= scope= flags=0 words=[] bindings=[('worker_uuid_3', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_3.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS UUID]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (= scope= flags=0 words=[] bindings=[('work_count', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_3.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS COUNTER]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [LIT_CHARS 1]]} {[VarSub work_count]}) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "worker .* can no longer be used, because its files have changed on disk"]]}) (Com {[LIT_CHARS assert_not_equals]} {[DQ [VarSub worker_uuid_2]]} {[DQ [VarSub worker_uuid_3]]}) ) ) (FunctionDef test_worker_restarts_when_worker_runfiles_change [] (List (Com {[LIT_CHARS prepare_example_worker]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS BUILD]} >"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "[work(\n"] [LIT_CHARS " name = \"hello_world_%s\" % idx,\n"] [LIT_CHARS " worker = \":worker\",\n"] [LIT_CHARS " args = [\"--write_uuid\", \"--write_counter\"],\n"] [LIT_CHARS ") for idx in range(10)]\n"]} 0), > ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_1]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (= scope= flags=0 words=[] bindings=[('worker_uuid_1', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_1.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS UUID]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (= scope= flags=0 words=[] bindings=[('work_count', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_1.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS COUNTER]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [LIT_CHARS 1]]} {[VarSub work_count]}) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_2]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (= scope= flags=0 words=[] bindings=[('worker_uuid_2', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_2.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS UUID]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (= scope= flags=0 words=[] bindings=[('work_count', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_2.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS COUNTER]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [LIT_CHARS 2]]} {[VarSub work_count]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub worker_uuid_1]]} {[DQ [VarSub worker_uuid_2]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS changeddata]]} < (FilenameRedirectNode filename={[LIT_CHARS worker_data.txt]} "> 1), > ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_3]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (= scope= flags=0 words=[] bindings=[('worker_uuid_3', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_3.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS UUID]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (= scope= flags=0 words=[] bindings=[('work_count', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_3.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS COUNTER]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [LIT_CHARS 1]]} {[VarSub work_count]}) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "worker .* can no longer be used, because its files have changed on disk"]]}) (Com {[LIT_CHARS assert_not_equals]} {[DQ [VarSub worker_uuid_2]]} {[DQ [VarSub worker_uuid_3]]}) ) ) (FunctionDef test_bazel_recovers_from_worker_returning_junk [] (List (Com {[LIT_CHARS prepare_example_worker]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS BUILD]} >"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "[work(\n"] [LIT_CHARS " name = \"hello_world_%s\" % idx,\n"] [LIT_CHARS " worker = \":worker\",\n"] [LIT_CHARS " worker_args = [\"--poison_after=1\"],\n"] [LIT_CHARS " args = [\"--write_uuid\", \"--write_counter\"],\n"] [LIT_CHARS ") for idx in range(10)]\n"]} 0), > ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_1]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (= scope= flags=0 words=[] bindings=[('worker_uuid_1', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_1.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS UUID]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_2]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (= scope= flags=0 words=[] bindings=[('worker_uuid_2', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_2.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS UUID]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "invalidating and retrying with new worker"]]}) (Com {[LIT_CHARS assert_not_equals]} {[DQ [VarSub worker_uuid_1]]} {[DQ [VarSub worker_uuid_2]]}) ) ) (FunctionDef test_input_digests [] (List (Com {[LIT_CHARS prepare_example_worker]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS BUILD]} >"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "[work(\n"] [LIT_CHARS " name = \"hello_world_%s\" % idx,\n"] [LIT_CHARS " worker = \":worker\",\n"] [LIT_CHARS " args = [\"--write_uuid\", \"--print_inputs\"],\n"] [LIT_CHARS " srcs = [\":input.txt\"],\n"] [LIT_CHARS ") for idx in range(10)]\n"]} 0), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "hello world"]]} < (FilenameRedirectNode filename={[LIT_CHARS input.txt]} "> 1), > ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_1]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (= scope= flags=0 words=[] bindings=[('worker_uuid_1', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_1.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS UUID]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (= scope= flags=0 words=[] bindings=[('hash1', {[ComSub (Pipeline (Com {[LIT_CHARS fgrep]} {[DQ [LIT_CHARS "INPUT input.txt "]]} {[LIT_CHARS bazel-bin/hello_world_1.out]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f3]}) )]})]) (AndOr OP_OR_IF (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_2]} < (FilenameRedirectNode filename={[VarSub TEST_log]} >"> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (= scope= flags=0 words=[] bindings=[('worker_uuid_2', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_2.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS UUID]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (= scope= flags=0 words=[] bindings=[('hash2', {[ComSub (Pipeline (Com {[LIT_CHARS fgrep]} {[DQ [LIT_CHARS "INPUT input.txt "]]} {[LIT_CHARS bazel-bin/hello_world_2.out]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f3]}) )]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub worker_uuid_1]]} {[DQ [VarSub worker_uuid_2]]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub hash1]]} {[DQ [VarSub hash2]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS changeddata]]} < (FilenameRedirectNode filename={[LIT_CHARS input.txt]} "> 1), > ) (AndOr OP_OR_IF (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_3]} < (FilenameRedirectNode filename={[VarSub TEST_log]} >"> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (= scope= flags=0 words=[] bindings=[('worker_uuid_3', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[LIT_CHARS bazel-bin/hello_world_3.out]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS UUID]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f2]}) )]})]) (= scope= flags=0 words=[] bindings=[('hash3', {[ComSub (Pipeline (Com {[LIT_CHARS fgrep]} {[DQ [LIT_CHARS "INPUT input.txt "]]} {[LIT_CHARS bazel-bin/hello_world_3.out]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f3]}) )]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub worker_uuid_2]]} {[DQ [VarSub worker_uuid_3]]}) (Com {[LIT_CHARS assert_not_equals]} {[DQ [VarSub hash2]]} {[DQ [VarSub hash3]]}) ) ) (FunctionDef test_worker_verbose [] (List (Com {[LIT_CHARS prepare_example_worker]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS BUILD]} >"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "[work(\n"] [LIT_CHARS " name = \"hello_world_%s\" % idx,\n"] [LIT_CHARS " worker = \":worker\",\n"] [LIT_CHARS " args = [\"--write_uuid\", \"--write_counter\"],\n"] [LIT_CHARS ") for idx in range(10)]\n"]} 0), > ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_CHARS --worker_quit_after_build]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_1]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "Created new "][VarSub WORKER_TYPE_LOG_STRING][LIT_CHARS " Work worker (id [0-9]"][\ LIT_ESCAPED_CHAR "\\+"][LIT_CHARS ")"]]}) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "Destroying Work worker (id [0-9]"][\ LIT_ESCAPED_CHAR "\\+"][LIT_CHARS ")"]]}) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "Build completed, shutting down worker pool..."]]}) ) ) (FunctionDef test_logs_are_deleted_on_server_restart [] (List (Com {[LIT_CHARS prepare_example_worker]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS BUILD]} >"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "[work(\n"] [LIT_CHARS " name = \"hello_world_%s\" % idx,\n"] [LIT_CHARS " worker = \":worker\",\n"] [LIT_CHARS " args = [\"--write_uuid\", \"--write_counter\"],\n"] [LIT_CHARS ") for idx in range(10)]\n"]} 0), > ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS -s]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_CHARS --worker_quit_after_build]} {[LIT_OTHER ":"] [LIT_CHARS hello_world_1]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "Created new "][VarSub WORKER_TYPE_LOG_STRING][LIT_CHARS " Work worker (id [0-9]"][\ LIT_ESCAPED_CHAR "\\+"][LIT_CHARS ")"]]}) (= scope= flags=0 words=[] bindings=[('worker_log', {[ComSub (Pipeline (Com {[LIT_CHARS egrep]} {[LIT_CHARS -o]} {[LIT_CHARS --]} {[SQ ]} {[DQ [VarSub TEST_log]]}) (Com {[LIT_CHARS sed]} {[SQ ]}) )]})]) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -e]} {[DQ [VarSub worker_log]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Worker log was not found"]]}) ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS shutdown]}) ) (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]}) ) (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -e]} {[DQ [VarSub worker_log]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Worker log was not deleted"]]}) ) ) ) (FunctionDef test_missing_execution_requirements_gives_warning [] (List (Com {[LIT_CHARS prepare_example_worker]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS BUILD]} >"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "work(\n"] [LIT_CHARS " name = \"hello_world\",\n"] [LIT_CHARS " worker = \":worker\",\n"] [LIT_CHARS " args = [\"--write_uuid\", \"--write_counter\"],\n"] [LIT_CHARS ")\n"]} 0), > ) (Com {[LIT_CHARS sed]} {[LIT_CHARS -i.bak]} {[SQ ]} {[LIT_CHARS work.bzl]}) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[LIT_CHARS work.bzl.bak]}) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_CHARS --worker_quit_after_build]} {[LIT_OTHER ":"] [LIT_CHARS hello_world]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "Worker strategy cannot execute this Work action, because the action's execution info does not contain 'supports-workers=1'"]]}) (Com {[LIT_CHARS expect_not_log]} {[DQ [LIT_CHARS "Created new "][VarSub WORKER_TYPE_LOG_STRING][LIT_CHARS " Work worker (id [0-9]"][\ LIT_ESCAPED_CHAR "\\+"][LIT_CHARS ")"]]}) (Com {[LIT_CHARS expect_not_log]} {[DQ [LIT_CHARS "Destroying Work worker (id [0-9]"][\ LIT_ESCAPED_CHAR "\\+"][LIT_CHARS ")"]]}) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS bazel-bin/hello_world.out]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Worker did not produce output"]]}) ) ) ) (FunctionDef test_environment_is_clean [] (List (Com {[LIT_CHARS prepare_example_worker]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS BUILD]} >"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "work(\n"] [LIT_CHARS " name = \"hello_world\",\n"] [LIT_CHARS " worker = \":worker\",\n"] [LIT_CHARS " args = [\"--print_env\"],\n"] [LIT_CHARS ")\n"]} 0), > ) (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 "shutdown failed"]]}) ) (Fork (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[VarSub ADDITIONAL_BUILD_FLAGS]} {[LIT_CHARS --worker_verbose]} {[LIT_CHARS --strategy] [LIT_OTHER "="] [LIT_VAR_LIKE "Work="] [LIT_CHARS worker]} {[LIT_CHARS --worker_max_instances] [LIT_OTHER "="] [LIT_CHARS 1]} {[LIT_CHARS --worker_quit_after_build]} {[LIT_OTHER ":"] [LIT_CHARS hello_world]} more_env=[('CAKE', {[LIT_CHARS LIE]})] ) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (AndOr OP_AND_IF (Com {[LIT_CHARS fgrep]} {[LIT_VAR_LIKE "CAKE="] [LIT_CHARS LIE] =} {[LIT_CHARS bazel-bin/hello_world.out]}) (AndOr OP_OR_IF (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "environment variable leaked into worker env"]]}) (Com {[LIT_CHARS true]}) ) ) ) ) (Com {[LIT_CHARS run_suite]} {[DQ [LIT_CHARS "Worker integration tests"]]}) )