(List (Com {[LIT_CHARS set]} {[LIT_CHARS -o]} {[LIT_CHARS errexit]} ) (Com {[LIT_CHARS set]} {[LIT_CHARS -o]} {[LIT_CHARS nounset]} ) (Com {[LIT_CHARS set]} {[LIT_CHARS -o]} {[LIT_CHARS pipefail]} ) (= scope= flags=0 words=[] bindings=[('KUBE_ROOT', {[ComSub (Com {[LIT_CHARS dirname]} {[DQ [VarSub BASH_SOURCE]]})] [LIT_CHARS /..]})]) (Com {[LIT_CHARS source]} {[DQ [VarSub KUBE_ROOT][LIT_CHARS /hack/lib/init.sh]]} ) (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS golang] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS setup_env]} ) (FunctionDef kube::test::find_dirs [] (Subshell (List (Com {[LIT_CHARS cd]} {[VarSub KUBE_ROOT]} ) (Pipeline (Com {[LIT_CHARS find]} {[LIT_CHARS .]} {[LIT_CHARS -not]} {[\ LIT_ESCAPED_CHAR "\\("]} {[\ LIT_ESCAPED_CHAR "\\("]} {[LIT_CHARS -wholename]} {[SQ ]} {[LIT_CHARS -o]} {[LIT_CHARS -wholename]} {[SQ ]} {[LIT_CHARS -o]} {[LIT_CHARS -wholename]} {[SQ ]} {[LIT_CHARS -o]} {[LIT_CHARS -wholename]} {[SQ ]} {[LIT_CHARS -o]} {[LIT_CHARS -wholename]} {[SQ ]} {[LIT_CHARS -o]} {[LIT_CHARS -wholename]} {[SQ ]} {[\ LIT_ESCAPED_CHAR "\\)"]} {[LIT_CHARS -prune]} {[\ LIT_ESCAPED_CHAR "\\)"]} {[LIT_CHARS -name]} {[SQ ]} {[LIT_CHARS -print0]} ) (Com {[LIT_CHARS xargs]} {[LIT_CHARS -0n1]} {[LIT_CHARS dirname]} ) (Com {[LIT_CHARS sed]} {[SQ ]} ) (Com {[LIT_CHARS sort]} {[LIT_CHARS -u]} ) ) ) ) ) (FunctionDef kube::test::find_pkgs [] (Pipeline (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS test] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS find_dirs]} ) (Com {[LIT_CHARS xargs]} {[LIT_CHARS -n1]} {[LIT_CHARS printf]} {[DQ [VarSub KUBE_GO_PACKAGE][LIT_CHARS "/%s"][\ LIT_ESCAPED_CHAR "\\n"]]} ) ) ) (= scope= flags=0 words=[] bindings=[('KUBE_COVER', {[VarSub KUBE_COVER test_op=VS_TEST_COLON_HYPHEN {[LIT_CHARS "-cover -covermode=atomic"]}]})]) (= scope= flags=0 words=[] bindings=[('KUBE_TIMEOUT', {[VarSub KUBE_TIMEOUT test_op=VS_TEST_COLON_HYPHEN {[LIT_CHARS "-timeout 120s"]}]})]) (= scope= flags=0 words=[] bindings=[('KUBE_RACE', {[VarSub KUBE_RACE test_op=VS_TEST_COLON_HYPHEN {[LIT_CHARS -race]}]})]) (FunctionDef kube::test::usage [] (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS log] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS usage_from_stdin]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "usage: "][VarSub 0][LIT_CHARS " [OPTIONS] [TARGETS]\n"][LIT_CHARS "\n"][LIT_CHARS "OPTIONS:\n"][LIT_CHARS " -i : number of times to run each test, must be >= 1\n"]]} 0), > ) ) (FunctionDef isnum [] (DBracket {B2 BINARY_STRING_TILDE_EQUAL {[DQ [VarSub 1]]} {[LIT_OTHER "^"] [LIT_DBRACKET_LIKE "["] [LIT_CHARS 0-9] [LIT_DBRACKET_LIKE "]"] [LIT_OTHER "+"] [LIT_OTHER "$"]}}) ) (= scope= flags=0 words=[] bindings=[('iterations', {[LIT_CHARS 1]})]) (While (Com {[LIT_CHARS getopts]} {[DQ [LIT_CHARS "hi:"]]} {[LIT_CHARS opt]} ) (Case to_match={[VarSub opt]}, pat_word_list=[[{[LIT_CHARS h]}], [{[LIT_CHARS i]}], [{[LIT_OTHER "?"]}], [{[LIT_OTHER ":"]}]] (List (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS test] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS usage]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]} ) ) (List (= scope= flags=0 words=[] bindings=[('iterations', {[DQ [VarSub OPTARG]]})]) (If (AndOr OP_OR_IF (Pipeline! (Com {[LIT_CHARS isnum]} {[DQ [VarSub iterations]]} ) ) (DBracket {B2 BINARY_INT_LE {[DQ [VarSub iterations]]} {[LIT_CHARS 0]}}) ) (List (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS log] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS usage]} {[DQ [LIT_CHARS "'"][VarSub 0][LIT_CHARS "': argument to -i must be numeric and greater than 0"]]} ) (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS test] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS usage]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) ) (List (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS test] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS usage]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) (List (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS log] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS usage]} {[DQ [LIT_CHARS "Option -"][VarSub OPTARG][LIT_CHARS " "]]} ) (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS test] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS usage]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) ) (Com {[LIT_CHARS shift]} {[ArithSub {A2 AS_OP_MINUS {A Atom NODE_ARITH_WORD {[VarSub OPTIND]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]} ) (Com {[LIT_CHARS eval]} {[DQ [LIT_CHARS "goflags=("][VarSub KUBE_GOFLAGS test_op=VS_TEST_COLON_HYPHEN {}][LIT_CHARS ")"]]} ) (= scope= flags=0 words=[] bindings=[('testcases', {[Array ]})]) (For arg do_arg_iter) (If (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub arg]]} {[LIT_CHARS -] [LIT_OTHER "*"]}}) (= scope= flags=0 words=[] bindings=[('goflags+', {[Array {[DQ [VarSub arg]]}]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('testcases+', {[Array {[DQ [VarSub arg]]}]})]) ) ) (Com {[LIT_CHARS set]} {[LIT_CHARS --]} {[DQ [VarSub testcases bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}}) test_op=VS_TEST_PLUS {[VarSub testcases bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}})]}]]} ) (If (DBracket {B2 BINARY_INT_GT {[VarSub iterations]} {[LIT_CHARS 1]}}) (List (If (DBracket {B2 BINARY_INT_EQ {[VarSub #]} {[LIT_CHARS 0]}}) (Com {[LIT_CHARS set]} {[LIT_CHARS --]} {[ComSub (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS test] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS find_dirs]})]} ) ) (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS log] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS status]} {[DQ [LIT_CHARS "Running "][VarSub iterations][LIT_CHARS " times"]]} ) (= scope= flags=0 words=[] bindings=[('fails', {[LIT_CHARS 0]})]) (For arg do_arg_iter) (List (Com {[LIT_CHARS trap]} {[SQ ]} {[LIT_CHARS SIGINT]} ) (= scope= flags=0 words=[] bindings=[('pkg', {[VarSub KUBE_GO_PACKAGE] [LIT_CHARS /] [VarSub arg]})]) (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS log] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS status]} {[DQ [VarSub pkg]]} ) (= scope= flags=0 words=[] bindings=[('pass', {[LIT_CHARS 0]})]) (= scope= flags=0 words=[] bindings=[('count', {[LIT_CHARS 0]})]) (For i [{[ComSub (Com {[LIT_CHARS seq]} {[LIT_CHARS 1]} {[VarSub iterations]})]}]) (List (If (Com {[LIT_CHARS go]} {[LIT_CHARS test]} {[DQ [VarSub goflags bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}}) test_op=VS_TEST_COLON_PLUS {[VarSub goflags bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}})]}]]} {[VarSub KUBE_RACE]} {[VarSub KUBE_TIMEOUT]} {[DQ [VarSub pkg]]} ) (= scope= flags=0 words=[] bindings=[('pass', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub pass]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('fails', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub fails]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) ) (= scope= flags=0 words=[] bindings=[('count', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub count]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) ) ) (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS log] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS status]} {[DQ [VarSub pass][LIT_CHARS " / "][VarSub count][LIT_CHARS " passed"]]} ) ) ) (If (DBracket {B2 BINARY_INT_GT {[VarSub fails]} {[LIT_CHARS 0]}}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) (ElseTrue) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]} ) ) ) ) (If (DBracket {B1 UNARY_STRING_n {[DQ [VarSub 1 test_op=VS_TEST_HYPHEN {}]]}}) (List (= scope= flags=0 words=[] bindings=[('covdir', {[DQ [LIT_CHARS /tmp/k8s_coverage/][ComSub (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS util] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS sortable_date]})]]})]) (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS log] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS status]} {[DQ [LIT_CHARS "Saving coverage output in '"][VarSub covdir][LIT_CHARS "'"]]} ) (For arg do_arg_iter) (List (Com {[LIT_CHARS trap]} {[SQ ]} {[LIT_CHARS SIGINT]} ) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[DQ [VarSub covdir][LIT_CHARS /][VarSub arg]]} ) (= scope= flags=0 words=[] bindings=[('pkg', {[VarSub KUBE_GO_PACKAGE] [LIT_CHARS /] [VarSub arg]})]) (Com {[LIT_CHARS go]} {[LIT_CHARS test]} {[DQ [VarSub goflags bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}}) test_op=VS_TEST_COLON_PLUS {[VarSub goflags bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}})]}]]} {[VarSub KUBE_RACE]} {[VarSub KUBE_TIMEOUT]} {[VarSub KUBE_COVER]} {[LIT_CHARS -coverprofile] [LIT_DBRACKET_LIKE "="] [DQ [VarSub covdir][LIT_CHARS /][VarSub arg][LIT_CHARS /coverage.out]]} {[DQ [VarSub pkg]]} ) ) ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]} ) ) ) (Pipeline (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS test] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS find_pkgs]} ) (Com {[LIT_CHARS xargs]} {[LIT_CHARS go]} {[LIT_CHARS test]} {[DQ [VarSub goflags bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}}) test_op=VS_TEST_COLON_PLUS {[VarSub goflags bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}})]}]]} {[VarSub KUBE_RACE]} {[VarSub KUBE_TIMEOUT]} {[VarSub KUBE_COVER]} ) ) )