(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:DIR) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (AndOr children: [ (C {(cd)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(dirname)} { (DQ (BracedVarSub token: <VSub_Name BASH_SOURCE> bracket_op: (ArrayIndex expr: (ArithWord w:{(Lit_Digits 0)}) ) spids: [57 62] ) ) } ) ] ) left_token: <Left_CommandSub "$("> spids: [53 64] ) ) } ) (C {(pwd)}) ] op_id: Op_DAmp ) ] ) left_token: <Left_CommandSub "$("> spids: [49 70] ) } spids: [48] ) ] spids: [48] ) (AndOr children: [ (C {(source)} {(${ VSub_Name DIR) (/testenv.sh)}) (BraceGroup children: [ (Sentence child: (SimpleCommand words: [{(echo)} {(DQ ("testenv.sh not found!"))}] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[89])] ) terminator: <Op_Semi ";"> ) (Sentence child:(C {(exit)} {(1)}) terminator:<Op_Semi ";">) ] spids: [81] ) ] op_id: Op_DPipe ) (Assignment keyword: Assign_Readonly pairs: [ (assign_pair lhs: (LhsName name:PLATFORM) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [(C {(uname)} {(-s)}) (C {(tr)} {(SQ <A-Z>)} {(SQ <a-z>)})] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [105 121] ) ) } spids: [103] ) ] spids: [101] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(DQ (${ VSub_Name PLATFORM))} {(Lit_Other "=")} {(DQ (darwin))} {(Lit_Other "]")} ) terminator: <Op_Semi ";"> ) ] action: [ (Assignment keyword: Assign_Readonly pairs: [ (assign_pair lhs: (LhsName name:MAGIC_TIMESTAMP) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(date)} {(-r)} {(0)} {(DQ ("+%b %e %Y"))})] ) left_token: <Left_CommandSub "$("> spids: [150 160] ) ) } spids: [148] ) ] spids: [146] ) ] spids: [-1 143] ) ] else_action: [ (Assignment keyword: Assign_Readonly pairs: [ (assign_pair lhs: (LhsName name:MAGIC_TIMESTAMP) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(date)} {(--date) (Lit_Other "=") (Lit_Other "@") (0)} {(DQ ("+%F %R"))}) ] ) left_token: <Left_CommandSub "$("> spids: [170 181] ) ) } spids: [168] ) ] spids: [166] ) ] spids: [163 184] ) (FuncDef name: EXPECT_CONTAINS body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:complete) op: Equal rhs: {(DQ (${ VSub_Number 1))} spids: [198] ) ] spids: [196] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:substring) op: Equal rhs: {(DQ (${ VSub_Number 2))} spids: [208] ) ] spids: [206] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:message) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Number 3> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: {("Expected '") (${ VSub_Name substring) ("' not found in '") (${ VSub_Name complete) ("'") } ) spids: [220 232] ) ) } spids: [218] ) ] spids: [216] ) (AndOr children: [ (Pipeline children: [ (C {(echo)} {(DQ (${ VSub_Name complete))}) (C {(grep)} {(-Fsq)} {(--)} {(DQ (${ VSub_Name substring))}) ] negated: False ) (C {(fail)} {(DQ ($ VSub_Name "$message"))}) ] op_id: Op_DPipe ) ] spids: [193] ) spids: [187 192] ) (FuncDef name: check_property body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:property) op: Equal rhs: {(DQ (${ VSub_Number 1))} spids: [283] ) ] spids: [281] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:tarball) op: Equal rhs: {(DQ (${ VSub_Number 2))} spids: [293] ) ] spids: [291] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:image) op: Equal rhs: {(DQ (${ VSub_Number 3))} spids: [303] ) ] spids: [301] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:expected) op: Equal rhs: {(DQ (${ VSub_Number 4))} spids: [313] ) ] spids: [311] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:test_data) op: Equal rhs: {(DQ (${ VSub_Name TEST_DATA_DIR) (/) (${ VSub_Name tarball) (.tar))} spids: [323] ) ] spids: [321] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:config) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(tar)} {(xOf)} {(DQ (${ VSub_Name test_data))} {(DQ (./) (${ VSub_Name image) (.json))} ) ] ) left_token: <Left_CommandSub "$("> spids: [341 359] ) ) } spids: [339] ) ] spids: [337] ) (C {(EXPECT_CONTAINS)} {(DQ (${ VSub_Name config))} { (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (${ VSub_Name property) (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (": ") (${ VSub_Name expected) ) } ) ] spids: [278] ) spids: [272 277] ) (FuncDef name: check_no_property body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:property) op: Equal rhs: {(DQ (${ VSub_Number 1))} spids: [402] ) ] spids: [400] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:tarball) op: Equal rhs: {(DQ (${ VSub_Number 2))} spids: [412] ) ] spids: [410] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:image) op: Equal rhs: {(DQ (${ VSub_Number 3))} spids: [422] ) ] spids: [420] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:test_data) op: Equal rhs: {(DQ (${ VSub_Name TEST_DATA_DIR) (/) (${ VSub_Name tarball) (.tar))} spids: [432] ) ] spids: [430] ) (SimpleCommand words: [ {(tar)} {(xOf)} {(DQ (${ VSub_Name test_data))} {(DQ (./) (${ VSub_Name image) (.json))} ] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name "$TEST_log")} spids: [464] ) ] ) (C {(expect_not_log)} { (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (${ VSub_Name property) (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (":") ) } ) ] spids: [397] ) spids: [391 396] ) (FuncDef name: check_entrypoint body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:input) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [491] ) ] spids: [491] ) (C {(shift)}) (C {(check_property)} {(Entrypoint)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_At "@"))}) ] spids: [488] ) spids: [482 487] ) (FuncDef name: check_cmd body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:input) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [528] ) ] spids: [528] ) (C {(shift)}) (C {(check_property)} {(Cmd)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_At "@"))}) ] spids: [525] ) spids: [519 524] ) (FuncDef name: check_ports body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:input) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [565] ) ] spids: [565] ) (C {(shift)}) (C {(check_property)} {(ExposedPorts)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_At "@"))}) ] spids: [562] ) spids: [556 561] ) (FuncDef name: check_volumes body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:input) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [602] ) ] spids: [602] ) (C {(shift)}) (C {(check_property)} {(Volumes)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_At "@"))}) ] spids: [599] ) spids: [593 598] ) (FuncDef name: check_env body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:input) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [639] ) ] spids: [639] ) (C {(shift)}) (C {(check_property)} {(Env)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_At "@"))}) ] spids: [636] ) spids: [630 635] ) (FuncDef name: check_label body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:input) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [676] ) ] spids: [676] ) (C {(shift)}) (C {(check_property)} {(Label)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_At "@"))}) ] spids: [673] ) spids: [667 672] ) (FuncDef name: check_workdir body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:input) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [713] ) ] spids: [713] ) (C {(shift)}) (C {(check_property)} {(WorkingDir)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_At "@"))}) ] spids: [710] ) spids: [704 709] ) (FuncDef name: check_user body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:input) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [750] ) ] spids: [750] ) (C {(shift)}) (C {(check_property)} {(User)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_At "@"))}) ] spids: [747] ) spids: [741 746] ) (FuncDef name: check_images body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:input) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [789] ) ] spids: [787] ) (C {(shift)} {(1)}) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:expected_images) op: Equal rhs: {(ArrayLiteralPart words:[{(${ VSub_Star "*")}])} spids: [802] ) ] spids: [800] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:test_data) op: Equal rhs: {(DQ (${ VSub_Name TEST_DATA_DIR) (/) (${ VSub_Name input) (.tar))} spids: [812] ) ] spids: [810] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:manifest) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(tar)} {(xOf)} {(DQ (${ VSub_Name test_data))} {(DQ (./manifest.json))} ) ] ) left_token: <Left_CommandSub "$("> spids: [830 844] ) ) } spids: [828] ) ] spids: [826] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:manifest_images) op: Equal rhs: { (ArrayLiteralPart words: [ { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ (${ VSub_Name manifest))}) (C {(grep)} {(-Eo)} {(SQ <"\"Config\":[[:space:]]*\"[^\"]+\"">)}) (C {(sed)} {(-r)} {(-e)} {(SQ <"s#\"Config\":.*?\"([0-9a-f]+)\\.json\"#\\1#">)} ) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [854 886] ) } ] ) } spids: [850] ) ] spids: [848] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:manifest_parents) op: Equal rhs: { (ArrayLiteralPart words: [ { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ (${ VSub_Name manifest))}) (C {(grep)} {(-Eo)} {(SQ <"\"Parent\":[[:space:]]*\"[^\"]+\"">)}) (C {(sed)} {(-r)} {(-e)} {(SQ <"s#\"Parent\":.*?\"sha256:([0-9a-f]+)\"#\\1#">)} ) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [897 929] ) } ] ) } spids: [893] ) ] spids: [891] ) (C {(echo)} {(Expected) (Lit_Other ":")} { (DQ (BracedVarSub token: <VSub_Name expected_images> bracket_op: (WholeArray op_id:Lit_At) spids: [944 949] ) ) } ) (C {(echo)} {(Actual) (Lit_Other ":")} { (DQ (BracedVarSub token: <VSub_Name manifest_images> bracket_op: (WholeArray op_id:Lit_At) spids: [959 964] ) ) } ) (C {(echo)} {(Parents) (Lit_Other ":")} { (DQ (BracedVarSub token: <VSub_Name manifest_parents> bracket_op: (WholeArray op_id:Lit_At) spids: [974 979] ) ) } ) (C {(check_eq)} { (DQ (BracedVarSub token: <VSub_Name expected_images> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [987 993] ) ) } { (DQ (BracedVarSub token: <VSub_Name manifest_images> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [997 1003] ) ) } ) (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:index) op:Equal rhs:{(0)} spids:[1010])] spids: [1008] ) (While cond: [ (C {(Lit_Other "[")} {(DQ (${ VSub_Name index))} {(-lt)} { (DQ (BracedVarSub token: <VSub_Name expected_images> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1027 1033] ) ) } {(Lit_Other "]")} ) ] body: (DoGroup children: [ (C {(check_eq)} { (DQ (BracedVarSub token: <VSub_Name expected_images> bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$index")})) spids: [1049 1054] ) ) } { (DQ (BracedVarSub token: <VSub_Name manifest_images> bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$index")})) spids: [1058 1063] ) ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:index) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithVarRef name:index) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [1069 1076] ) } spids: [1068] ) ] spids: [1068] ) ] spids: [1039 1079] ) ) (C {(check_eq)} { (DQ (BracedVarSub token: <VSub_Name manifest_parents> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1090 1096] ) ) } { (DQ (ArithSubPart anode: (ArithBinary op_id: Arith_Minus left: (ArithWord w: { (BracedVarSub token: <VSub_Name manifest_images> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1101 1107] ) } ) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [1100 1113] ) ) } ) (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:index) op:Equal rhs:{(0)} spids:[1120])] spids: [1118] ) (While cond: [ (C {(Lit_Other "[")} {(DQ (${ VSub_Name index))} {(-lt)} { (DQ (BracedVarSub token: <VSub_Name manifest_parents> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1137 1143] ) ) } {(Lit_Other "]")} ) ] body: (DoGroup children: [ (C {(check_eq)} { (DQ (BracedVarSub token: <VSub_Name manifest_parents> bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$index")})) spids: [1159 1164] ) ) } { (DQ (BracedVarSub token: <VSub_Name manifest_images> bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$index")})) spids: [1168 1173] ) ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:index) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithVarRef name:index) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [1179 1186] ) } spids: [1178] ) ] spids: [1178] ) ] spids: [1149 1189] ) ) ] spids: [784] ) spids: [778 783] ) (FuncDef name: check_image_manifest_layers body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:input) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [1208] ) ] spids: [1206] ) (C {(shift)} {(1)}) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:expected_layers) op: Equal rhs: {(ArrayLiteralPart words:[{(${ VSub_Star "*")}])} spids: [1221] ) ] spids: [1219] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:test_data) op: Equal rhs: {(DQ (${ VSub_Name TEST_DATA_DIR) (/) (${ VSub_Name input) (.tar))} spids: [1231] ) ] spids: [1229] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:manifest) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(tar)} {(xOf)} {(DQ (${ VSub_Name test_data))} {(DQ (./manifest.json))} ) ] ) left_token: <Left_CommandSub "$("> spids: [1249 1263] ) ) } spids: [1247] ) ] spids: [1245] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:manifest_layers) op: Equal rhs: { (ArrayLiteralPart words: [ { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ (${ VSub_Name manifest))}) (C {(grep)} {(-Eo)} {(SQ <"\"Layers\":[[:space:]]*\\[[^]]+\\]">)}) (C {(grep)} {(-Eo)} {(SQ <"\\[.+\\]">)}) (C {(tail)} {(-n)} {(1)}) (C {(tr)} {(SQ <",">)} {(SQ <"\\n">)}) (C {(sed)} {(-r)} {(-e)} {(SQ <"s#.*\"([0-9a-f]+)/layer\\.tar\".*#\\1#">)} ) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [1273 1337] ) } ] ) } spids: [1269] ) ] spids: [1267] ) (C {(echo)} {(Expected) (Lit_Other ":")} { (DQ (BracedVarSub token: <VSub_Name expected_layers> bracket_op: (WholeArray op_id:Lit_At) spids: [1352 1357] ) ) } ) (C {(echo)} {(Actual) (Lit_Other ":")} { (DQ (BracedVarSub token: <VSub_Name manifest_layers> bracket_op: (WholeArray op_id:Lit_At) spids: [1367 1372] ) ) } ) (C {(check_eq)} { (DQ (BracedVarSub token: <VSub_Name expected_layers> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1380 1386] ) ) } { (DQ (BracedVarSub token: <VSub_Name manifest_layers> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1390 1396] ) ) } ) (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:index) op:Equal rhs:{(0)} spids:[1403])] spids: [1401] ) (While cond: [ (C {(Lit_Other "[")} {(DQ (${ VSub_Name index))} {(-lt)} { (DQ (BracedVarSub token: <VSub_Name expected_layers> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1420 1426] ) ) } {(Lit_Other "]")} ) ] body: (DoGroup children: [ (C {(check_eq)} { (DQ (BracedVarSub token: <VSub_Name expected_layers> bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$index")})) spids: [1442 1447] ) ) } { (DQ (BracedVarSub token: <VSub_Name manifest_layers> bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$index")})) spids: [1451 1456] ) ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:index) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithVarRef name:index) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [1462 1469] ) } spids: [1461] ) ] spids: [1461] ) ] spids: [1432 1472] ) ) ] spids: [1203] ) spids: [1197 1202] ) (FuncDef name: check_layers_aux body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:input) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [1488] ) ] spids: [1486] ) (C {(shift)} {(1)}) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:expected_layers) op: Equal rhs: {(ArrayLiteralPart words:[{(${ VSub_Star "*")}])} spids: [1501] ) ] spids: [1499] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:expected_layers_sorted) op: Equal rhs: { (ArrayLiteralPart words: [ { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (ForEach iter_name: i iter_words: [ { (BracedVarSub token: <VSub_Name expected_layers> bracket_op: (WholeArray op_id:Arith_Star) spids: [1523 1528] ) } ] do_arg_iter: False body: (DoGroup children: [ (Sentence child: (C {(echo)} {($ VSub_Name "$i")}) terminator: <Op_Semi ";"> ) ] spids: [1531 1538] ) spids: [1522 1529] ) (C {(sort)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [1516 1543] ) } ] ) } spids: [1512] ) ] spids: [1510] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:test_data) op: Equal rhs: {(DQ (${ VSub_Name TEST_DATA_DIR) (/) (${ VSub_Name input) (.tar))} spids: [1551] ) ] spids: [1549] ) (C {(tar)} {(tvf)} {(DQ (${ VSub_Name test_data))}) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:actual_layers) op: Equal rhs: { (ArrayLiteralPart words: [ { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(tar)} {(tvf)} {(${ VSub_Name test_data)}) (C {(tr)} {(-s)} {(SQ <" ">)}) (C {(cut)} {(-d) (SQ <" ">)} {(-f)} {(4-)}) (C {(sort)}) (C {(cut)} {(-d) (SQ </>)} {(-f)} {(2)}) (C {(grep)} {(-E)} {(SQ <"^[0-9a-f]+$">)}) (C {(sort)}) (C {(uniq)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [1587 1655] ) } ] ) } spids: [1583] ) ] spids: [1581] ) (C {(echo)} {(Expected) (Lit_Other ":")} { (DQ (BracedVarSub token: <VSub_Name expected_layers_sorted> bracket_op: (WholeArray op_id:Lit_At) spids: [1670 1675] ) ) } ) (C {(echo)} {(Actual) (Lit_Other ":")} { (DQ (BracedVarSub token: <VSub_Name actual_layers> bracket_op: (WholeArray op_id:Lit_At) spids: [1685 1690] ) ) } ) (C {(check_eq)} { (DQ (BracedVarSub token: <VSub_Name expected_layers> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1698 1704] ) ) } { (DQ (BracedVarSub token: <VSub_Name actual_layers> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1708 1714] ) ) } ) (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:index) op:Equal rhs:{(0)} spids:[1721])] spids: [1719] ) (While cond: [ (C {(Lit_Other "[")} {(DQ (${ VSub_Name index))} {(-lt)} { (DQ (BracedVarSub token: <VSub_Name expected_layers> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1738 1744] ) ) } {(Lit_Other "]")} ) ] body: (DoGroup children: [ (C {(check_eq)} { (DQ (BracedVarSub token: <VSub_Name expected_layers_sorted> bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$index")})) spids: [1760 1765] ) ) } { (DQ (BracedVarSub token: <VSub_Name actual_layers> bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$index")})) spids: [1769 1774] ) ) } ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:layer) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name expected_layers> bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$index")})) spids: [1787 1792] ) ) } spids: [1785] ) ] spids: [1783] ) (C {(echo)} {(Checking)} {(layer) (Lit_Other ":")} {(DQ (${ VSub_Name layer))}) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:listing) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(tar)} {(xOf)} {(DQ (${ VSub_Name test_data))} {(DQ (./) (${ VSub_Name layer) (/layer.tar))} ) (C {(tar)} {(tv)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [1820 1844] ) ) } spids: [1818] ) ] spids: [1816] ) (C {(check_eq)} { (DQ (CommandSubPart command_list: (CommandList children: [ (AndOr children: [ (Pipeline children: [ (C {(echo)} {(DQ (${ VSub_Name listing))}) (C {(grep)} {(-Fv)} {(DQ (${ VSub_Name MAGIC_TIMESTAMP))}) ] negated: False ) (C {(true)}) ] op_id: Op_DPipe ) ] ) left_token: <Left_CommandSub "$("> spids: [1856 1880] ) ) } {(DQ )} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:index) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithVarRef name:index) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [1889 1896] ) } spids: [1888] ) ] spids: [1888] ) ] spids: [1750 1899] ) ) ] spids: [1483] ) spids: [1477 1482] ) (FuncDef name: check_layers body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:input) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [1915] ) ] spids: [1913] ) (C {(shift)}) (C {(check_layers_aux)} {(DQ ($ VSub_Name "$input"))} {(DQ ($ VSub_At "$@"))}) (C {(check_image_manifest_layers)} {(DQ ($ VSub_Name "$input"))} {(DQ ($ VSub_At "$@"))}) ] spids: [1910] ) spids: [1904 1909] ) (FuncDef name: test_gen_image body: (BraceGroup children: [ (AndOr children: [ (C {(grep)} {(-Fsq)} {(DQ (./gen.out))} {(DQ ($ VSub_Name "$TEST_DATA_DIR") (/gen_image.tar))} ) (C {(fail)} { (DQ ("'./gen.out' not found in '") ($ VSub_Name "$TEST_DATA_DIR") ("/gen_image.tar'") ) } ) ] op_id: Op_DPipe ) ] spids: [1954] ) spids: [1948 1953] ) (FuncDef name: test_dummy_repository body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:layer) op: Equal rhs: {(DQ (0279f3ce8b08d10506abcf452393b3e48439f5eca41b836fae59a0d509fbafea))} spids: [1996] ) ] spids: [1994] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:test_data) op: Equal rhs: {(DQ (${ VSub_Name TEST_DATA_DIR) (/dummy_repository.tar))} spids: [2004] ) ] spids: [2002] ) (C {(check_layers_aux)} {(DQ (dummy_repository))} {(DQ ($ VSub_Name "$layer"))}) ] spids: [1991] ) spids: [1985 1990] ) (FuncDef name: test_files_base body: (BraceGroup children: [ (C {(check_layers)} {(DQ (files_base))} {(DQ (82ca3945f7d07df82f274d7fafe83fd664c2154e5c64c988916ccd5b217bb710))} ) ] spids: [2032] ) spids: [2026 2031] ) (FuncDef name: test_files_with_files_base body: (BraceGroup children: [ (C {(check_layers)} {(DQ (files_with_files_base))} {(DQ (82ca3945f7d07df82f274d7fafe83fd664c2154e5c64c988916ccd5b217bb710))} {(DQ (84c0d09919ae8b06cb6b064d8cd5eab63341a46f11ccc7ecbe270ad3e1f52744))} ) ] spids: [2056] ) spids: [2050 2055] ) (FuncDef name: test_tar_base body: (BraceGroup children: [ (C {(check_layers)} {(DQ (tar_base))} {(DQ (8b9e4db9dd4b990ee6d8adc2843ad64702ad9063ae6c22e8ca5f94aa54e71277))} ) (C {(check_no_property)} {(DQ (Entrypoint))} {(DQ (tar_base))} {(DQ (9fec194fd32c03350d6a6e60ee8ed7862471e8817aaa310306d9be6242b05d20))} ) ] spids: [2086] ) spids: [2080 2085] ) (FuncDef name: test_tar_with_tar_base body: (BraceGroup children: [ (C {(check_layers)} {(DQ (tar_with_tar_base))} {(DQ (8b9e4db9dd4b990ee6d8adc2843ad64702ad9063ae6c22e8ca5f94aa54e71277))} {(DQ (1cc81a2aaec2e3727d98d48bf9ba09d3ac96ef48adf5edae861d15dd0191dc40))} ) ] spids: [2136] ) spids: [2130 2135] ) (FuncDef name: test_directory_with_tar_base body: (BraceGroup children: [ (C {(check_layers)} {(DQ (directory_with_tar_base))} {(DQ (8b9e4db9dd4b990ee6d8adc2843ad64702ad9063ae6c22e8ca5f94aa54e71277))} {(DQ (e56ddeb8279698484f50d480f71cb5380223ad0f451766b7b9a9348129d02542))} ) ] spids: [2166] ) spids: [2160 2165] ) (FuncDef name: test_files_with_tar_base body: (BraceGroup children: [ (C {(check_layers)} {(DQ (files_with_tar_base))} {(DQ (8b9e4db9dd4b990ee6d8adc2843ad64702ad9063ae6c22e8ca5f94aa54e71277))} {(DQ (f099727fa58f9b688e77b511b3cc728b86ae0e84d197b9330bd51082ad5589f2))} ) ] spids: [2196] ) spids: [2190 2195] ) (FuncDef name: test_workdir_with_tar_base body: (BraceGroup children: [ (C {(check_layers)} {(DQ (workdir_with_tar_base))} {(DQ (8b9e4db9dd4b990ee6d8adc2843ad64702ad9063ae6c22e8ca5f94aa54e71277))} {(DQ (f24cbe53bd1b78909c6dba0bd47016354f3488b35b85aeee68ecc423062b927e))} ) ] spids: [2226] ) spids: [2220 2225] ) (FuncDef name: test_tar_with_files_base body: (BraceGroup children: [ (C {(check_layers)} {(DQ (tar_with_files_base))} {(DQ (82ca3945f7d07df82f274d7fafe83fd664c2154e5c64c988916ccd5b217bb710))} {(DQ (bee1a325e4b51a1dcfd7e447987b4e130590815865ab22e8744878053d525f20))} ) ] spids: [2256] ) spids: [2250 2255] ) (FuncDef name: test_base_with_entrypoint body: (BraceGroup children: [ (C {(check_layers)} {(DQ (base_with_entrypoint))} {(DQ (4acbeb0495918726c0107e372b421e1d2a6fd4825d58fc3f0b0b2a719fb3ce1b))} ) (C {(check_entrypoint)} {(DQ (base_with_entrypoint))} {(DQ (d59ab78d94f88b906227b8696d3065b91c71a1c6045d5103f3572c1e6fe9a1a9))} {(SQ <"[\"/bar\"]">)} ) (C {(check_ports)} {(DQ (base_with_entrypoint))} {(DQ (d59ab78d94f88b906227b8696d3065b91c71a1c6045d5103f3572c1e6fe9a1a9))} {(SQ <"{\"8080/tcp\": {}}">)} ) ] spids: [2286] ) spids: [2280 2285] ) (FuncDef name: test_derivative_with_shadowed_cmd body: (BraceGroup children: [ (C {(check_layers)} {(DQ (derivative_with_shadowed_cmd))} {(DQ (4acbeb0495918726c0107e372b421e1d2a6fd4825d58fc3f0b0b2a719fb3ce1b))} {(DQ (e35f57dc6c1e84ae67dcaaf3479a3a3c0f52ac4d194073bd6214e04c05beab42))} ) ] spids: [2354] ) spids: [2348 2353] ) (FuncDef name: test_derivative_with_cmd body: (BraceGroup children: [ (C {(check_layers)} {(DQ (derivative_with_cmd))} {(DQ (4acbeb0495918726c0107e372b421e1d2a6fd4825d58fc3f0b0b2a719fb3ce1b))} {(DQ (e35f57dc6c1e84ae67dcaaf3479a3a3c0f52ac4d194073bd6214e04c05beab42))} {(DQ (186289545131e34510006ac79498078dcf41736a5eb9a36920a6b30d3f45bc01))} ) (C {(check_images)} {(DQ (derivative_with_cmd))} {(DQ (d59ab78d94f88b906227b8696d3065b91c71a1c6045d5103f3572c1e6fe9a1a9))} {(DQ (a37fcc5dfa513987ecec8a19ebe5d17568a7d6e696771c596b110fcc30a2d8a6))} {(DQ (d3ea6e7cfc3e182a8ca43081db1e145f1bee8c5da5627639800c76abf61b5165))} ) (C {(check_entrypoint)} {(DQ (derivative_with_cmd))} {(DQ (d59ab78d94f88b906227b8696d3065b91c71a1c6045d5103f3572c1e6fe9a1a9))} {(SQ <"[\"/bar\"]">)} ) (C {(check_cmd)} {(DQ (derivative_with_cmd))} {(DQ (a37fcc5dfa513987ecec8a19ebe5d17568a7d6e696771c596b110fcc30a2d8a6))} {(SQ <"[\"shadowed-arg\"]">)} ) (C {(check_cmd)} {(DQ (derivative_with_cmd))} {(DQ (d3ea6e7cfc3e182a8ca43081db1e145f1bee8c5da5627639800c76abf61b5165))} {(SQ <"[\"arg1\", \"arg2\"]">)} ) (C {(check_ports)} {(DQ (derivative_with_cmd))} {(DQ (d3ea6e7cfc3e182a8ca43081db1e145f1bee8c5da5627639800c76abf61b5165))} {(SQ <"{\"80/tcp\": {}, \"8080/tcp\": {}}">)} ) ] spids: [2384] ) spids: [2378 2383] ) (FuncDef name: test_derivative_with_volume body: (BraceGroup children: [ (C {(check_layers)} {(DQ (derivative_with_volume))} {(DQ (125e7cfb9d4a6d803a57b88bcdb05d9a6a47ac0d6312a8b4cff52a2685c5c858))} {(DQ (08424283ad3a7e020e210bec22b166d7ebba57f7ba2d0713c2fd7bd1e2038f88))} ) (C {(check_images)} {(DQ (derivative_with_volume))} {(DQ (da0f0e314eb3187877754fd5ee1e487b93c13dbabdba18f35d130324f3c9b76d))} {(DQ (c872bf3f4c7eb5a01ae7ad6fae4c25e86ff2923bb1fe29be5edcdff1b31ed71a))} ) (C {(check_volumes)} {(DQ (derivative_with_volume))} {(DQ (da0f0e314eb3187877754fd5ee1e487b93c13dbabdba18f35d130324f3c9b76d))} {(SQ <"{\"/logs\": {}}">)} ) (C {(check_volumes)} {(DQ (derivative_with_volume))} {(DQ (c872bf3f4c7eb5a01ae7ad6fae4c25e86ff2923bb1fe29be5edcdff1b31ed71a))} {(SQ <"{\"/asdf\": {}, \"/blah\": {}, \"/logs\": {}}">)} ) ] spids: [2542] ) spids: [2536 2541] ) (FuncDef name: test_generated_tarball body: (BraceGroup children: [ (C {(check_layers)} {(DQ (generated_tarball))} {(DQ (54b8328604115255cc76c12a2a51939be65c40bf182ff5a898a5fb57c38f7772))} ) ] spids: [2640] ) spids: [2634 2639] ) (FuncDef name: test_with_env body: (BraceGroup children: [ (C {(check_layers)} {(DQ (with_env))} {(DQ (125e7cfb9d4a6d803a57b88bcdb05d9a6a47ac0d6312a8b4cff52a2685c5c858))} {(DQ (42a1bd0f449f61a23b8a7776875ffb6707b34ee99c87d6428a7394f5e55e8624))} ) (C {(check_env)} {(DQ (with_env))} {(DQ (87c0d91841f92847ec6c183810f720e5926dba0652eb5d52a807366825dd21c7))} {(SQ <"[\"bar=blah blah blah\", \"foo=/asdf\"]">)} ) ] spids: [2664] ) spids: [2658 2663] ) (FuncDef name: test_with_double_env body: (BraceGroup children: [ (C {(check_layers)} {(DQ (with_double_env))} {(DQ (125e7cfb9d4a6d803a57b88bcdb05d9a6a47ac0d6312a8b4cff52a2685c5c858))} {(DQ (42a1bd0f449f61a23b8a7776875ffb6707b34ee99c87d6428a7394f5e55e8624))} {(DQ (576a9fd9c690be04dc7aacbb9dbd1f14816e32dbbcc510f4d42325bbff7163dd))} ) (C {(check_env)} {(DQ (with_double_env))} {(DQ (273d2a6cfc25001baf9d3f7c68770ec79a1671b8249d153e7611a4f80165ecda))} {(SQ <"[\"bar=blah blah blah\", \"baz=/asdf blah blah blah\", \"foo=/asdf\"]">)} ) ] spids: [2714] ) spids: [2708 2713] ) (FuncDef name: test_with_label body: (BraceGroup children: [ (C {(check_layers)} {(DQ (with_label))} {(DQ (125e7cfb9d4a6d803a57b88bcdb05d9a6a47ac0d6312a8b4cff52a2685c5c858))} {(DQ (eba6abda3d259ab6ed5f4d48b76df72a5193fad894d4ae78fbf0a363d8f9e8fd))} ) (C {(check_label)} {(DQ (with_label))} {(DQ (83c007425faff33ac421329af9f6444b7250abfc12c28f188b47e97fb715c006))} { (SQ < "[\"com.example.bar={\\\"name\\\": \\\"blah\\\"}\", \"com.example.baz=qux\", \"com.example.foo={\\\"name\\\": \\\"blah\\\"}\"]" > ) } ) ] spids: [2774] ) spids: [2768 2773] ) (FuncDef name: test_with_double_label body: (BraceGroup children: [ (C {(check_layers)} {(DQ (with_double_label))} {(DQ (125e7cfb9d4a6d803a57b88bcdb05d9a6a47ac0d6312a8b4cff52a2685c5c858))} {(DQ (eba6abda3d259ab6ed5f4d48b76df72a5193fad894d4ae78fbf0a363d8f9e8fd))} {(DQ (bfe88fbb5e24fc5bff138f7a1923d53a2ee1bbc8e54b6f5d9c371d5f48b6b023))} ) (C {(check_label)} {(DQ (with_double_label))} {(DQ (8cfc89c83adf947cd2c18c11579559f1f48cf375a20364ec79eb14d6580dbf75))} { (SQ < "[\"com.example.bar={\\\"name\\\": \\\"blah\\\"}\", \"com.example.baz=qux\", \"com.example.foo={\\\"name\\\": \\\"blah\\\"}\", \"com.example.qux={\\\"name\\\": \\\"blah-blah\\\"}\"]" > ) } ) ] spids: [2824] ) spids: [2818 2823] ) (FuncDef name: test_with_user body: (BraceGroup children: [ (C {(check_user)} {(DQ (with_user))} {(DQ (bd6666bdde7d4a837a0685d2861822507119f7f6e565acecbbbe93f1d0cc1974))} { (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (nobody) (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) ) } ) ] spids: [2880] ) spids: [2874 2879] ) (FuncDef name: get_layer_listing body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:input) op: Equal rhs: {($ VSub_Number "$1")} spids: [2917] ) ] spids: [2915] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:layer) op: Equal rhs: {($ VSub_Number "$2")} spids: [2923] ) ] spids: [2921] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:test_data) op: Equal rhs: {(DQ (${ VSub_Name TEST_DATA_DIR) (/) (${ VSub_Name input) (.tar))} spids: [2929] ) ] spids: [2927] ) (Pipeline children: [ (C {(tar)} {(xOf)} {(DQ (${ VSub_Name test_data))} {(DQ (./) (${ VSub_Name layer) (/layer.tar))} ) (C {(tar)} {(tv)}) (C {(sed)} {(-e)} {(SQ <"s/^.*:00 //">)}) ] negated: False ) ] spids: [2912] ) spids: [2906 2911] ) (FuncDef name: test_data_path body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:no_data_path_sha) op: Equal rhs: {(DQ (451d182e5c71840f00ba9726dc0239db73a21b7e89e79c77f677e3f7c5c23d44))} spids: [2992] ) ] spids: [2990] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:data_path_sha) op: Equal rhs: {(DQ (9a41c9e1709558f7ef06f28f66e9056feafa7e0f83990801e1b27c987278d8e8))} spids: [3000] ) ] spids: [2998] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:absolute_data_path_sha) op: Equal rhs: {(DQ (f196c42ab4f3eb850d9655b950b824db2c99c01527703ac486a7b48bb2a34f44))} spids: [3008] ) ] spids: [3006] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:root_data_path_sha) op: Equal rhs: {(DQ (19d7fd26d67bfaeedd6232dcd441f14ee163bc81c56ed565cc20e73311c418b6))} spids: [3016] ) ] spids: [3014] ) (C {(check_layers_aux)} {(DQ (no_data_path_image))} {(DQ (${ VSub_Name no_data_path_sha))}) (C {(check_layers_aux)} {(DQ (data_path_image))} {(DQ (${ VSub_Name data_path_sha))}) (C {(check_layers_aux)} {(DQ (absolute_data_path_image))} {(DQ (${ VSub_Name absolute_data_path_sha))} ) (C {(check_layers_aux)} {(DQ (root_data_path_image))} {(DQ (${ VSub_Name root_data_path_sha))} ) (C {(check_eq)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(get_layer_listing)} {(DQ (no_data_path_image))} {(DQ (${ VSub_Name no_data_path_sha))} ) ] ) left_token: <Left_CommandSub "$("> spids: [3095 3107] ) ) } {(SQ <"./\n"> <./test>)} ) (C {(check_eq)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(get_layer_listing)} {(DQ (data_path_image))} {(DQ (${ VSub_Name data_path_sha))} ) ] ) left_token: <Left_CommandSub "$("> spids: [3121 3133] ) ) } {(SQ <"./\n"> <"./test/\n"> <./test/test>)} ) (C {(check_eq)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(get_layer_listing)} {(DQ (absolute_data_path_image))} {(DQ (${ VSub_Name absolute_data_path_sha))} ) ] ) left_token: <Left_CommandSub "$("> spids: [3169 3181] ) ) } { (SQ <"./\n"> <"./docker/\n"> <"./docker/testdata/\n"> <"./docker/testdata/test/\n"> <./docker/testdata/test/test> ) } ) (C {(check_eq)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(get_layer_listing)} {(DQ (root_data_path_image))} {(DQ (${ VSub_Name root_data_path_sha))} ) ] ) left_token: <Left_CommandSub "$("> spids: [3207 3219] ) ) } { (DQ ("./\n") ("./tools/\n") ("./tools/build_defs/\n") ("./tools/build_defs/docker/\n") ("./tools/build_defs/docker/testdata/\n") ("./tools/build_defs/docker/testdata/test/\n") (./tools/build_defs/docker/testdata/test/test) ) } ) ] spids: [2987] ) spids: [2981 2986] ) (FuncDef name: test_extras_with_deb body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:test_data) op: Equal rhs: {(DQ (${ VSub_Name TEST_DATA_DIR) (/extras_with_deb.tar))} spids: [3248] ) ] spids: [3246] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:sha) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(tar)} {(xOf)} {(${ VSub_Name test_data)} {(./top)})] ) left_token: <Left_CommandSub "$("> spids: [3260 3270] ) } spids: [3259] ) ] spids: [3257] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:layer_listing) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(get_layer_listing)} {(DQ (extras_with_deb))} {(DQ (${ VSub_Name sha))} ) (C {(sort)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [3282 3298] ) ) } spids: [3280] ) ] spids: [3278] ) (C {(check_eq)} {(DQ (${ VSub_Name layer_listing))} { (DQ ("./\n") ("./etc/\n") ("./etc/nsswitch.conf\n") ("./tmp/\n") ("./usr/\n") ("./usr/bin/\n") ("./usr/bin/java -> /path/to/bin/java\n") (./usr/titi) ) } ) ] spids: [3243] ) spids: [3237 3242] ) (C {(run_suite)} {(DQ (build_test_oci))}) ] )