(List (= scope= flags=0 words=[] bindings=[('DIR', {[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]} {[VarSub DIR] [LIT_CHARS /testenv.sh]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "testenv.sh not found!"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (= scope= flags=2 words=[] bindings=[('PLATFORM', {[DQ [ComSub (Pipeline (Com {[LIT_CHARS uname]} {[LIT_CHARS -s]}) (Com {[LIT_CHARS tr]} {[SQ ]} {[SQ ]}) )]]})]) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub PLATFORM]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS darwin]]} {[LIT_OTHER "]"]}) (= scope= flags=2 words=[] bindings=[('MAGIC_TIMESTAMP', {[DQ [ComSub (Com {[LIT_CHARS date]} {[LIT_CHARS -r]} {[LIT_CHARS 0]} {[DQ [LIT_CHARS "+%b %e %Y"]]})]]})]) (ElseTrue) (= scope= flags=2 words=[] bindings=[('MAGIC_TIMESTAMP', {[DQ [ComSub (Com {[LIT_CHARS date]} {[LIT_CHARS --date] [LIT_OTHER "="] [LIT_OTHER "@"] [LIT_CHARS 0]} {[DQ [LIT_CHARS "+%F %R"]]})]]})]) ) (FunctionDef EXPECT_CONTAINS [] (List (= scope= flags=0 words=[] bindings=[('complete', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('substring', {[DQ [VarSub 2]]})]) (= scope= flags=0 words=[] bindings=[('message', {[DQ [VarSub 3 test_op=VS_TEST_COLON_HYPHEN {[LIT_CHARS "Expected '"] [VarSub substring] [LIT_CHARS "' not found in '"] [VarSub complete] [LIT_CHARS "'"]}]]})]) (AndOr OP_OR_IF (Pipeline (Com {[LIT_CHARS echo]} {[DQ [VarSub complete]]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS -Fsq]} {[LIT_CHARS --]} {[DQ [VarSub substring]]}) ) (Com {[LIT_CHARS fail]} {[DQ [VarSub message]]}) ) ) ) (FunctionDef check_property [] (List (= scope= flags=0 words=[] bindings=[('property', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('tarball', {[DQ [VarSub 2]]})]) (= scope= flags=0 words=[] bindings=[('layer', {[DQ [VarSub 3]]})]) (= scope= flags=0 words=[] bindings=[('expected', {[DQ [VarSub 4]]})]) (= scope= flags=0 words=[] bindings=[('test_data', {[DQ [VarSub TEST_DATA_DIR][LIT_CHARS /][VarSub tarball][LIT_CHARS .tar]]})]) (= scope= flags=0 words=[] bindings=[('metadata', {[DQ [ComSub (Com {[LIT_CHARS tar]} {[LIT_CHARS xOf]} {[DQ [VarSub test_data]]} {[DQ [LIT_CHARS ./][VarSub layer][LIT_CHARS /json]]})]]})]) (Com {[LIT_CHARS EXPECT_CONTAINS]} {[DQ [VarSub metadata]]} {[DQ [\ LIT_ESCAPED_CHAR "\\\""][VarSub property][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS ": "][VarSub expected]]}) ) ) (FunctionDef check_no_property [] (List (= scope= flags=0 words=[] bindings=[('property', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('tarball', {[DQ [VarSub 2]]})]) (= scope= flags=0 words=[] bindings=[('layer', {[DQ [VarSub 3]]})]) (= scope= flags=0 words=[] bindings=[('test_data', {[DQ [VarSub TEST_DATA_DIR][LIT_CHARS /][VarSub tarball][LIT_CHARS .tar]]})]) (Com {[LIT_CHARS tar]} {[LIT_CHARS xOf]} {[DQ [VarSub test_data]]} {[DQ [LIT_CHARS ./][VarSub layer][LIT_CHARS /json]]} < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS expect_not_log]} {[DQ [\ LIT_ESCAPED_CHAR "\\\""][VarSub property][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS ":"]]}) (= scope= flags=0 words=[] bindings=[('test_data', {[DQ [VarSub TEST_DATA_DIR][LIT_CHARS /notop_][VarSub tarball][LIT_CHARS .tar]]})]) (Com {[LIT_CHARS tar]} {[LIT_CHARS xOf]} {[DQ [VarSub test_data]]} {[DQ [LIT_CHARS ./][VarSub layer][LIT_CHARS /json]]} < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS expect_not_log]} {[DQ [\ LIT_ESCAPED_CHAR "\\\""][VarSub property][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS ":"]]}) ) ) (FunctionDef check_size [] (Com {[LIT_CHARS check_property]} {[LIT_CHARS Size]} {[DQ [VarSub @]]}) ) (FunctionDef check_id [] (Com {[LIT_CHARS check_property]} {[LIT_CHARS id]} {[DQ [VarSub @]]}) ) (FunctionDef check_parent [] (Com {[LIT_CHARS check_property]} {[LIT_CHARS parent]} {[DQ [VarSub @]]}) ) (FunctionDef check_entrypoint [] (List (= scope= flags=0 words=[] bindings=[('input', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (Com {[LIT_CHARS check_property]} {[LIT_CHARS Entrypoint]} {[DQ [VarSub input]]} {[DQ [VarSub @]]}) (Com {[LIT_CHARS check_property]} {[LIT_CHARS Entrypoint]} {[DQ [LIT_CHARS notop_][VarSub input]]} {[DQ [VarSub @]]}) ) ) (FunctionDef check_cmd [] (List (= scope= flags=0 words=[] bindings=[('input', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (Com {[LIT_CHARS check_property]} {[LIT_CHARS Cmd]} {[DQ [VarSub input]]} {[DQ [VarSub @]]}) (Com {[LIT_CHARS check_property]} {[LIT_CHARS Cmd]} {[DQ [LIT_CHARS notop_][VarSub input]]} {[DQ [VarSub @]]}) ) ) (FunctionDef check_ports [] (List (= scope= flags=0 words=[] bindings=[('input', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (Com {[LIT_CHARS check_property]} {[LIT_CHARS ExposedPorts]} {[DQ [VarSub input]]} {[DQ [VarSub @]]}) (Com {[LIT_CHARS check_property]} {[LIT_CHARS ExposedPorts]} {[DQ [VarSub input]]} {[DQ [VarSub @]]}) ) ) (FunctionDef check_volumes [] (List (= scope= flags=0 words=[] bindings=[('input', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (Com {[LIT_CHARS check_property]} {[LIT_CHARS Volumes]} {[DQ [VarSub input]]} {[DQ [VarSub @]]}) (Com {[LIT_CHARS check_property]} {[LIT_CHARS Volumes]} {[DQ [LIT_CHARS notop_][VarSub input]]} {[DQ [VarSub @]]}) ) ) (FunctionDef check_env [] (List (= scope= flags=0 words=[] bindings=[('input', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (Com {[LIT_CHARS check_property]} {[LIT_CHARS Env]} {[DQ [VarSub input]]} {[DQ [VarSub @]]}) (Com {[LIT_CHARS check_property]} {[LIT_CHARS Env]} {[DQ [LIT_CHARS notop_][VarSub input]]} {[DQ [VarSub @]]}) ) ) (FunctionDef check_label [] (List (= scope= flags=0 words=[] bindings=[('input', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (Com {[LIT_CHARS check_property]} {[LIT_CHARS Label]} {[DQ [VarSub input]]} {[DQ [VarSub @]]}) (Com {[LIT_CHARS check_property]} {[LIT_CHARS Label]} {[DQ [LIT_CHARS notop_][VarSub input]]} {[DQ [VarSub @]]}) ) ) (FunctionDef check_workdir [] (List (= scope= flags=0 words=[] bindings=[('input', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (Com {[LIT_CHARS check_property]} {[LIT_CHARS WorkingDir]} {[DQ [VarSub input]]} {[DQ [VarSub @]]}) (Com {[LIT_CHARS check_property]} {[LIT_CHARS WorkingDir]} {[DQ [LIT_CHARS notop_][VarSub input]]} {[DQ [VarSub @]]}) ) ) (FunctionDef check_user [] (List (= scope= flags=0 words=[] bindings=[('input', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (Com {[LIT_CHARS check_property]} {[LIT_CHARS User]} {[DQ [VarSub input]]} {[DQ [VarSub @]]}) (Com {[LIT_CHARS check_property]} {[LIT_CHARS User]} {[DQ [LIT_CHARS notop_][VarSub input]]} {[DQ [VarSub @]]}) ) ) (FunctionDef check_layers_aux [] (List (= scope= flags=0 words=[] bindings=[('input', {[VarSub 1]})]) (Com {[LIT_CHARS shift]} {[LIT_CHARS 1]}) (= scope= flags=0 words=[] bindings=[('expected_layers', {[Array {[VarSub *]}]})]) (= scope= flags=0 words=[] bindings=[('expected_layers_sorted', {[Array {OP_NEWLINE "\n"} {[ComSub (Pipeline (For i [{[VarSub expected_layers bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_STAR "*"}})]}]) (Com {[LIT_CHARS echo]} {[VarSub i]}) ) (Com {[LIT_CHARS sort]}) )]} {OP_NEWLINE "\n"}]})]) (= scope= flags=0 words=[] bindings=[('test_data', {[DQ [VarSub TEST_DATA_DIR][LIT_CHARS /][VarSub input][LIT_CHARS .tar]]})]) (Com {[LIT_CHARS tar]} {[LIT_CHARS tvf]} {[DQ [VarSub test_data]]}) (= scope= flags=0 words=[] bindings=[('actual_layers', {[Array {OP_NEWLINE "\n"} {[ComSub (Pipeline (Com {[LIT_CHARS tar]} {[LIT_CHARS tvf]} {[VarSub test_data]}) (Com {[LIT_CHARS tr]} {[LIT_CHARS -s]} {[SQ ]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f]} {[LIT_CHARS 4-]}) (Com {[LIT_CHARS sort]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f]} {[LIT_CHARS 2]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS -E]} {[SQ ]}) (Com {[LIT_CHARS sort]}) (Com {[LIT_CHARS uniq]}) )]}]})]) (Com {[LIT_CHARS echo]} {[LIT_CHARS Expected] [LIT_OTHER ":"]} {[VarSub expected_layers_sorted bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}})]}) (Com {[LIT_CHARS echo]} {[LIT_CHARS Actual] [LIT_OTHER ":"]} {[VarSub actual_layers bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}})]}) (Com {[LIT_CHARS check_eq]} {[DQ [VarSub expected_layers bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}}) transform_ops=[(#len)]]]} {[DQ [VarSub actual_layers bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}}) transform_ops=[(#len)]]]}) (= scope= flags=0 words=[] bindings=[('index', {[LIT_CHARS 0]})]) (= scope= flags=0 words=[] bindings=[('parent', {[SQ ]})]) (While (Com {[LIT_OTHER "["]} {[DQ [VarSub index]]} {[LIT_CHARS -lt]} {[DQ [VarSub expected_layers bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}}) transform_ops=[(#len)]]]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS check_eq]} {[DQ [VarSub expected_layers_sorted bracket_op=(Index {A Atom NODE_ARITH_WORD {[VarSub index]}})]]} {[DQ [VarSub actual_layers bracket_op=(Index {A Atom NODE_ARITH_WORD {[VarSub index]}})]]}) (= scope= flags=0 words=[] bindings=[('layer', {[DQ [VarSub expected_layers bracket_op=(Index {A Atom NODE_ARITH_WORD {[VarSub index]}})]]})]) (Com {[LIT_CHARS echo]} {[LIT_CHARS Checking]} {[LIT_CHARS layer] [LIT_OTHER ":"]} {[DQ [VarSub layer]]}) (= scope= flags=0 words=[] bindings=[('listing', {[DQ [ComSub (Pipeline (Com {[LIT_CHARS tar]} {[LIT_CHARS xOf]} {[DQ [VarSub test_data]]} {[DQ [LIT_CHARS ./][VarSub layer][LIT_CHARS /layer.tar]]}) (Com {[LIT_CHARS tar]} {[LIT_CHARS tv]}) )]]})]) (Com {[LIT_CHARS check_eq]} {[DQ [ComSub (AndOr OP_OR_IF (Pipeline (Com {[LIT_CHARS echo]} {[DQ [VarSub listing]]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS -Fv]} {[DQ [VarSub MAGIC_TIMESTAMP]]}) ) (Com {[LIT_CHARS true]}) )]]} {[DQ ]}) (Com {[LIT_CHARS check_id]} {[DQ [VarSub input]]} {[DQ [VarSub layer]]} {[DQ [\ LIT_ESCAPED_CHAR "\\\""][VarSub layer][\ LIT_ESCAPED_CHAR "\\\""]]}) (If (DBracket {B1 UNARY_STRING_n {[DQ [VarSub parent]]}}) (Com {[LIT_CHARS check_parent]} {[DQ [VarSub input]]} {[DQ [VarSub layer]]} {[DQ [\ LIT_ESCAPED_CHAR "\\\""][VarSub parent][\ LIT_ESCAPED_CHAR "\\\""]]}) ) (= scope= flags=0 words=[] bindings=[('layer_size', {[ComSub (Pipeline (Com {[LIT_CHARS tar]} {[LIT_CHARS xOf]} {[DQ [VarSub test_data]]} {[DQ [LIT_CHARS ./][VarSub layer][LIT_CHARS /layer.tar]]}) (Com {[LIT_CHARS wc]} {[LIT_CHARS -c]}) (Com {[LIT_CHARS xargs]}) )]})]) (Com {[LIT_CHARS check_size]} {[DQ [VarSub input]]} {[DQ [VarSub layer]]} {[DQ [VarSub layer_size]]}) (= scope= flags=0 words=[] bindings=[('index', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub index]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) (= scope= flags=0 words=[] bindings=[('parent', {[VarSub layer]})]) ) ) ) ) (FunctionDef check_layers [] (List (= scope= flags=0 words=[] bindings=[('input', {[VarSub 1]})]) (Com {[LIT_CHARS shift]}) (Com {[LIT_CHARS check_layers_aux]} {[DQ [VarSub input]]} {[DQ [VarSub @]]}) (Com {[LIT_CHARS check_layers_aux]} {[DQ [LIT_CHARS notop_][VarSub input]]} {[DQ [VarSub @]]}) ) ) (FunctionDef test_gen_image [] (AndOr OP_OR_IF (Com {[LIT_CHARS grep]} {[LIT_CHARS -Fsq]} {[DQ [LIT_CHARS ./gen.out]]} {[DQ [VarSub TEST_DATA_DIR][LIT_CHARS /gen_image.tar]]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "'./gen.out' not found in '"][VarSub TEST_DATA_DIR][LIT_CHARS "/gen_image.tar'"]]}) ) ) (FunctionDef test_dummy_repository [] (List (= scope= flags=0 words=[] bindings=[('layer', {[DQ [LIT_CHARS 0279f3ce8b08d10506abcf452393b3e48439f5eca41b836fae59a0d509fbafea]]})]) (= scope= flags=0 words=[] bindings=[('test_data', {[DQ [VarSub TEST_DATA_DIR][LIT_CHARS /dummy_repository.tar]]})]) (Com {[LIT_CHARS check_layers_aux]} {[DQ [LIT_CHARS dummy_repository]]} {[DQ [VarSub layer]]}) (= scope= flags=0 words=[] bindings=[('repositories', {[DQ [ComSub (Com {[LIT_CHARS tar]} {[LIT_CHARS xOf]} {[DQ [VarSub test_data]]} {[DQ [LIT_CHARS ./repositories]]})]]})]) (AndOr OP_OR_IF (Pipeline (Com {[LIT_CHARS echo]} {[DQ [VarSub repositories]]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS -Esq]} {[LIT_CHARS --]} {[DQ [\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS "gcr.io/dummy/[a-zA-Z_]*_docker_testdata"][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS ": {"]]}) ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Cannot find image in repository gcr.io/dummy in '"][VarSub repositories][LIT_CHARS "'"]]}) ) (Com {[LIT_CHARS EXPECT_CONTAINS]} {[DQ [VarSub repositories]]} {[DQ [\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS dummy_repository][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS ": "][\ LIT_ESCAPED_CHAR "\\\""][VarSub layer][\ LIT_ESCAPED_CHAR "\\\""]]}) ) ) (FunctionDef test_files_base [] (Com {[LIT_CHARS check_layers]} {[DQ [LIT_CHARS files_base]]} {[DQ [LIT_CHARS 82ca3945f7d07df82f274d7fafe83fd664c2154e5c64c988916ccd5b217bb710]]}) ) (FunctionDef test_files_with_files_base [] (Com {[LIT_CHARS check_layers]} {[DQ [LIT_CHARS files_with_files_base]]} {[DQ [LIT_CHARS 82ca3945f7d07df82f274d7fafe83fd664c2154e5c64c988916ccd5b217bb710]]} {[DQ [LIT_CHARS 84c0d09919ae8b06cb6b064d8cd5eab63341a46f11ccc7ecbe270ad3e1f52744]]}) ) (FunctionDef test_tar_base [] (List (Com {[LIT_CHARS check_layers]} {[DQ [LIT_CHARS tar_base]]} {[DQ [LIT_CHARS 8b9e4db9dd4b990ee6d8adc2843ad64702ad9063ae6c22e8ca5f94aa54e71277]]}) (Com {[LIT_CHARS check_no_property]} {[DQ [LIT_CHARS Entrypoint]]} {[DQ [LIT_CHARS tar_base]]} {[DQ [LIT_CHARS 8b9e4db9dd4b990ee6d8adc2843ad64702ad9063ae6c22e8ca5f94aa54e71277]]}) ) ) (FunctionDef test_tar_with_tar_base [] (Com {[LIT_CHARS check_layers]} {[DQ [LIT_CHARS tar_with_tar_base]]} {[DQ [LIT_CHARS 8b9e4db9dd4b990ee6d8adc2843ad64702ad9063ae6c22e8ca5f94aa54e71277]]} {[DQ [LIT_CHARS 1cc81a2aaec2e3727d98d48bf9ba09d3ac96ef48adf5edae861d15dd0191dc40]]}) ) (FunctionDef test_directory_with_tar_base [] (Com {[LIT_CHARS check_layers]} {[DQ [LIT_CHARS directory_with_tar_base]]} {[DQ [LIT_CHARS 8b9e4db9dd4b990ee6d8adc2843ad64702ad9063ae6c22e8ca5f94aa54e71277]]} {[DQ [LIT_CHARS e56ddeb8279698484f50d480f71cb5380223ad0f451766b7b9a9348129d02542]]}) ) (FunctionDef test_files_with_tar_base [] (Com {[LIT_CHARS check_layers]} {[DQ [LIT_CHARS files_with_tar_base]]} {[DQ [LIT_CHARS 8b9e4db9dd4b990ee6d8adc2843ad64702ad9063ae6c22e8ca5f94aa54e71277]]} {[DQ [LIT_CHARS f099727fa58f9b688e77b511b3cc728b86ae0e84d197b9330bd51082ad5589f2]]}) ) (FunctionDef test_workdir_with_tar_base [] (Com {[LIT_CHARS check_layers]} {[DQ [LIT_CHARS workdir_with_tar_base]]} {[DQ [LIT_CHARS 8b9e4db9dd4b990ee6d8adc2843ad64702ad9063ae6c22e8ca5f94aa54e71277]]} {[DQ [LIT_CHARS f24cbe53bd1b78909c6dba0bd47016354f3488b35b85aeee68ecc423062b927e]]}) ) (FunctionDef test_tar_with_files_base [] (Com {[LIT_CHARS check_layers]} {[DQ [LIT_CHARS tar_with_files_base]]} {[DQ [LIT_CHARS 82ca3945f7d07df82f274d7fafe83fd664c2154e5c64c988916ccd5b217bb710]]} {[DQ [LIT_CHARS bee1a325e4b51a1dcfd7e447987b4e130590815865ab22e8744878053d525f20]]}) ) (FunctionDef test_base_with_entrypoint [] (List (Com {[LIT_CHARS check_layers]} {[DQ [LIT_CHARS base_with_entrypoint]]} {[DQ [LIT_CHARS 4acbeb0495918726c0107e372b421e1d2a6fd4825d58fc3f0b0b2a719fb3ce1b]]}) (Com {[LIT_CHARS check_entrypoint]} {[DQ [LIT_CHARS base_with_entrypoint]]} {[DQ [LIT_CHARS 4acbeb0495918726c0107e372b421e1d2a6fd4825d58fc3f0b0b2a719fb3ce1b]]} {[SQ ]}) (Com {[LIT_CHARS check_ports]} {[DQ [LIT_CHARS base_with_entrypoint]]} {[DQ [LIT_CHARS 4acbeb0495918726c0107e372b421e1d2a6fd4825d58fc3f0b0b2a719fb3ce1b]]} {[SQ ]}) ) ) (FunctionDef test_derivative_with_shadowed_cmd [] (Com {[LIT_CHARS check_layers]} {[DQ [LIT_CHARS derivative_with_shadowed_cmd]]} {[DQ [LIT_CHARS 4acbeb0495918726c0107e372b421e1d2a6fd4825d58fc3f0b0b2a719fb3ce1b]]} {[DQ [LIT_CHARS e35f57dc6c1e84ae67dcaaf3479a3a3c0f52ac4d194073bd6214e04c05beab42]]}) ) (FunctionDef test_derivative_with_cmd [] (List (Com {[LIT_CHARS check_layers]} {[DQ [LIT_CHARS derivative_with_cmd]]} {[DQ [LIT_CHARS 4acbeb0495918726c0107e372b421e1d2a6fd4825d58fc3f0b0b2a719fb3ce1b]]} {[DQ [LIT_CHARS e35f57dc6c1e84ae67dcaaf3479a3a3c0f52ac4d194073bd6214e04c05beab42]]} {[DQ [LIT_CHARS 186289545131e34510006ac79498078dcf41736a5eb9a36920a6b30d3f45bc01]]}) (Com {[LIT_CHARS check_entrypoint]} {[DQ [LIT_CHARS derivative_with_cmd]]} {[DQ [LIT_CHARS 186289545131e34510006ac79498078dcf41736a5eb9a36920a6b30d3f45bc01]]} {[SQ ]}) (Com {[LIT_CHARS check_cmd]} {[DQ [LIT_CHARS derivative_with_cmd]]} {[DQ [LIT_CHARS e35f57dc6c1e84ae67dcaaf3479a3a3c0f52ac4d194073bd6214e04c05beab42]]} {[SQ ]}) (Com {[LIT_CHARS check_cmd]} {[DQ [LIT_CHARS derivative_with_cmd]]} {[DQ [LIT_CHARS 186289545131e34510006ac79498078dcf41736a5eb9a36920a6b30d3f45bc01]]} {[SQ ]}) (Com {[LIT_CHARS check_ports]} {[DQ [LIT_CHARS derivative_with_cmd]]} {[DQ [LIT_CHARS 186289545131e34510006ac79498078dcf41736a5eb9a36920a6b30d3f45bc01]]} {[SQ ]}) ) ) (FunctionDef test_derivative_with_volume [] (List (Com {[LIT_CHARS check_layers]} {[DQ [LIT_CHARS derivative_with_volume]]} {[DQ [LIT_CHARS 125e7cfb9d4a6d803a57b88bcdb05d9a6a47ac0d6312a8b4cff52a2685c5c858]]} {[DQ [LIT_CHARS 08424283ad3a7e020e210bec22b166d7ebba57f7ba2d0713c2fd7bd1e2038f88]]}) (Com {[LIT_CHARS check_volumes]} {[DQ [LIT_CHARS derivative_with_volume]]} {[DQ [LIT_CHARS 125e7cfb9d4a6d803a57b88bcdb05d9a6a47ac0d6312a8b4cff52a2685c5c858]]} {[SQ ]}) (Com {[LIT_CHARS check_volumes]} {[DQ [LIT_CHARS derivative_with_volume]]} {[DQ [LIT_CHARS 08424283ad3a7e020e210bec22b166d7ebba57f7ba2d0713c2fd7bd1e2038f88]]} {[SQ ]}) ) ) (FunctionDef test_generated_tarball [] (Com {[LIT_CHARS check_layers]} {[DQ [LIT_CHARS generated_tarball]]} {[DQ [LIT_CHARS 54b8328604115255cc76c12a2a51939be65c40bf182ff5a898a5fb57c38f7772]]}) ) (FunctionDef test_with_env [] (List (Com {[LIT_CHARS check_layers]} {[DQ [LIT_CHARS with_env]]} {[DQ [LIT_CHARS 125e7cfb9d4a6d803a57b88bcdb05d9a6a47ac0d6312a8b4cff52a2685c5c858]]} {[DQ [LIT_CHARS 42a1bd0f449f61a23b8a7776875ffb6707b34ee99c87d6428a7394f5e55e8624]]}) (Com {[LIT_CHARS check_env]} {[DQ [LIT_CHARS with_env]]} {[DQ [LIT_CHARS 42a1bd0f449f61a23b8a7776875ffb6707b34ee99c87d6428a7394f5e55e8624]]} {[SQ ]}) ) ) (FunctionDef test_with_double_env [] (List (Com {[LIT_CHARS check_layers]} {[DQ [LIT_CHARS with_double_env]]} {[DQ [LIT_CHARS 125e7cfb9d4a6d803a57b88bcdb05d9a6a47ac0d6312a8b4cff52a2685c5c858]]} {[DQ [LIT_CHARS 42a1bd0f449f61a23b8a7776875ffb6707b34ee99c87d6428a7394f5e55e8624]]} {[DQ [LIT_CHARS 576a9fd9c690be04dc7aacbb9dbd1f14816e32dbbcc510f4d42325bbff7163dd]]}) (Com {[LIT_CHARS check_env]} {[DQ [LIT_CHARS with_double_env]]} {[DQ [LIT_CHARS 576a9fd9c690be04dc7aacbb9dbd1f14816e32dbbcc510f4d42325bbff7163dd]]} {[SQ ]}) ) ) (FunctionDef test_with_label [] (List (Com {[LIT_CHARS check_layers]} {[DQ [LIT_CHARS with_label]]} {[DQ [LIT_CHARS 125e7cfb9d4a6d803a57b88bcdb05d9a6a47ac0d6312a8b4cff52a2685c5c858]]} {[DQ [LIT_CHARS eba6abda3d259ab6ed5f4d48b76df72a5193fad894d4ae78fbf0a363d8f9e8fd]]}) (Com {[LIT_CHARS check_label]} {[DQ [LIT_CHARS with_label]]} {[DQ [LIT_CHARS eba6abda3d259ab6ed5f4d48b76df72a5193fad894d4ae78fbf0a363d8f9e8fd]]} {[SQ ]}) ) ) (FunctionDef test_with_double_label [] (List (Com {[LIT_CHARS check_layers]} {[DQ [LIT_CHARS with_double_label]]} {[DQ [LIT_CHARS 125e7cfb9d4a6d803a57b88bcdb05d9a6a47ac0d6312a8b4cff52a2685c5c858]]} {[DQ [LIT_CHARS eba6abda3d259ab6ed5f4d48b76df72a5193fad894d4ae78fbf0a363d8f9e8fd]]} {[DQ [LIT_CHARS bfe88fbb5e24fc5bff138f7a1923d53a2ee1bbc8e54b6f5d9c371d5f48b6b023]]}) (Com {[LIT_CHARS check_label]} {[DQ [LIT_CHARS with_double_label]]} {[DQ [LIT_CHARS bfe88fbb5e24fc5bff138f7a1923d53a2ee1bbc8e54b6f5d9c371d5f48b6b023]]} {[SQ ]}) ) ) (FunctionDef test_with_user [] (Com {[LIT_CHARS check_user]} {[DQ [LIT_CHARS with_user]]} {[DQ [LIT_CHARS 65664d4d78ff321684e2a8bf165792ce562c5990c9ba992e6288dcb1ec7f675c]]} {[DQ [\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS nobody][\ LIT_ESCAPED_CHAR "\\\""]]}) ) (FunctionDef get_layer_listing [] (List (= scope= flags=0 words=[] bindings=[('input', {[VarSub 1]})]) (= scope= flags=0 words=[] bindings=[('layer', {[VarSub 2]})]) (= scope= flags=0 words=[] bindings=[('test_data', {[DQ [VarSub TEST_DATA_DIR][LIT_CHARS /][VarSub input][LIT_CHARS .tar]]})]) (Pipeline (Com {[LIT_CHARS tar]} {[LIT_CHARS xOf]} {[DQ [VarSub test_data]]} {[DQ [LIT_CHARS ./][VarSub layer][LIT_CHARS /layer.tar]]}) (Com {[LIT_CHARS tar]} {[LIT_CHARS tv]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[SQ ]}) ) ) ) (FunctionDef test_data_path [] (List (= scope= flags=0 words=[] bindings=[('no_data_path_sha', {[DQ [LIT_CHARS 451d182e5c71840f00ba9726dc0239db73a21b7e89e79c77f677e3f7c5c23d44]]})]) (= scope= flags=0 words=[] bindings=[('data_path_sha', {[DQ [LIT_CHARS 9a41c9e1709558f7ef06f28f66e9056feafa7e0f83990801e1b27c987278d8e8]]})]) (= scope= flags=0 words=[] bindings=[('absolute_data_path_sha', {[DQ [LIT_CHARS f196c42ab4f3eb850d9655b950b824db2c99c01527703ac486a7b48bb2a34f44]]})]) (= scope= flags=0 words=[] bindings=[('root_data_path_sha', {[DQ [LIT_CHARS 19d7fd26d67bfaeedd6232dcd441f14ee163bc81c56ed565cc20e73311c418b6]]})]) (Com {[LIT_CHARS check_layers_aux]} {[DQ [LIT_CHARS no_data_path_image]]} {[DQ [VarSub no_data_path_sha]]}) (Com {[LIT_CHARS check_layers_aux]} {[DQ [LIT_CHARS data_path_image]]} {[DQ [VarSub data_path_sha]]}) (Com {[LIT_CHARS check_layers_aux]} {[DQ [LIT_CHARS absolute_data_path_image]]} {[DQ [VarSub absolute_data_path_sha]]}) (Com {[LIT_CHARS check_layers_aux]} {[DQ [LIT_CHARS root_data_path_image]]} {[DQ [VarSub root_data_path_sha]]}) (Com {[LIT_CHARS check_eq]} {[DQ [ComSub (Com {[LIT_CHARS get_layer_listing]} {[DQ [LIT_CHARS no_data_path_image]]} {[DQ [VarSub no_data_path_sha]]})]]} {[SQ ]}) (Com {[LIT_CHARS check_eq]} {[DQ [ComSub (Com {[LIT_CHARS get_layer_listing]} {[DQ [LIT_CHARS data_path_image]]} {[DQ [VarSub data_path_sha]]})]]} {[SQ ]}) (Com {[LIT_CHARS check_eq]} {[DQ [ComSub (Com {[LIT_CHARS get_layer_listing]} {[DQ [LIT_CHARS absolute_data_path_image]]} {[DQ [VarSub absolute_data_path_sha]]})]]} {[SQ ]}) (Com {[LIT_CHARS check_eq]} {[DQ [ComSub (Com {[LIT_CHARS get_layer_listing]} {[DQ [LIT_CHARS root_data_path_image]]} {[DQ [VarSub root_data_path_sha]]})]]} {[DQ [LIT_CHARS "./\n"][LIT_CHARS "./tools/\n"][LIT_CHARS "./tools/build_defs/\n"][LIT_CHARS "./tools/build_defs/docker/\n"][LIT_CHARS "./tools/build_defs/docker/testdata/\n"][LIT_CHARS "./tools/build_defs/docker/testdata/test/\n"][LIT_CHARS ./tools/build_defs/docker/testdata/test/test]]}) ) ) (FunctionDef test_extras_with_deb [] (List (= scope= flags=0 words=[] bindings=[('test_data', {[DQ [VarSub TEST_DATA_DIR][LIT_CHARS /extras_with_deb.tar]]})]) (= scope= flags=0 words=[] bindings=[('sha', {[ComSub (Com {[LIT_CHARS tar]} {[LIT_CHARS xOf]} {[VarSub test_data]} {[LIT_CHARS ./top]})]})]) (= scope= flags=0 words=[] bindings=[('layer_listing', {[DQ [ComSub (Pipeline (Com {[LIT_CHARS get_layer_listing]} {[DQ [LIT_CHARS extras_with_deb]]} {[DQ [VarSub sha]]}) (Com {[LIT_CHARS sort]}) )]]})]) (Com {[LIT_CHARS check_eq]} {[DQ [VarSub layer_listing]]} {[DQ [LIT_CHARS "./\n"][LIT_CHARS "./etc/\n"][LIT_CHARS "./etc/nsswitch.conf\n"][LIT_CHARS "./tmp/\n"][LIT_CHARS "./usr/\n"][LIT_CHARS "./usr/bin/\n"][LIT_CHARS "./usr/bin/java -> /path/to/bin/java\n"][LIT_CHARS ./usr/titi]]}) ) ) (Com {[LIT_CHARS run_suite]} {[DQ [LIT_CHARS build_test]]}) )