(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]]} ) (= scope= flags=0 words=[] bindings=[('ALL_VERSIONS_CSV', {[ComSub (List (= scope= flags=0 words=[] bindings=[('IFS', {[SQ ]})]) (Com {[LIT_CHARS echo]} {[DQ [VarSub KUBE_AVAILABLE_GROUP_VERSIONS bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_STAR "*"}}) transform_ops=[PatSub {[LIT_CHARS " "]} {[LIT_CHARS ","]} do_all]]]}) (= scope= flags=0 words=[] bindings=[('IFS', {[LIT_OTHER "$"]})]) )]})]) (= scope= flags=0 words=[] bindings=[('KUBE_TEST_API_VERSIONS', {[DQ [VarSub KUBE_TEST_API_VERSIONS test_op=VS_TEST_COLON_HYPHEN {[VarSub ALL_VERSIONS_CSV]}]]})]) (= scope= flags=0 words=[] bindings=[('KUBE_TIMEOUT', {[DQ [LIT_CHARS "-timeout 600s"]]})]) (= scope= flags=0 words=[] bindings=[('KUBE_INTEGRATION_TEST_MAX_CONCURRENCY', {[VarSub KUBE_INTEGRATION_TEST_MAX_CONCURRENCY test_op=VS_TEST_COLON_HYPHEN {[DQ [LIT_CHARS -1]]}]})]) (= scope= flags=0 words=[] bindings=[('LOG_LEVEL', {[VarSub LOG_LEVEL test_op=VS_TEST_COLON_HYPHEN {[LIT_CHARS 2]}]})]) (= scope= flags=0 words=[] bindings=[('KUBE_TEST_ARGS', {[VarSub KUBE_TEST_ARGS test_op=VS_TEST_COLON_HYPHEN {}]})]) (FunctionDef kube::test::find_integration_test_dirs [] (Subshell (List (Com {[LIT_CHARS cd]} {[VarSub KUBE_ROOT]} ) (Pipeline (Com {[LIT_CHARS find]} {[LIT_CHARS test/integration/] [VarSub 1 test_op=VS_TEST_HYPHEN {}]} {[LIT_CHARS -name]} {[SQ ]} {[LIT_CHARS -print0]} ) (Com {[LIT_CHARS xargs]} {[LIT_CHARS -0n1]} {[LIT_CHARS dirname]} ) (Com {[LIT_CHARS sort]} {[LIT_CHARS -u]} more_env=[('LC_ALL', {[LIT_CHARS C]})] ) ) ) ) ) (FunctionDef cleanup [] (List (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS log] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS status]} {[DQ [LIT_CHARS "Cleaning up etcd"]]} ) (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS etcd] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS cleanup]} ) (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS log] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS status]} {[DQ [LIT_CHARS "Integration test cleanup complete"]]} ) ) ) (FunctionDef runTests [] (List (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS log] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS status]} {[DQ [LIT_CHARS "Starting etcd instance"]]} ) (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS etcd] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS start]} ) (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS log] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS status]} {[DQ [LIT_CHARS "Running integration test cases"]]} ) (Com {[LIT_CHARS make]} {[LIT_CHARS -C]} {[DQ [VarSub KUBE_ROOT]]} {[LIT_CHARS test]} {[LIT_VAR_LIKE "WHAT="] [DQ [ComSub (Pipeline (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS test] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS find_integration_test_dirs]} {[VarSub 2 test_op=VS_TEST_HYPHEN {}]}) (Com {[LIT_CHARS paste]} {[LIT_CHARS -sd] [SQ ]} {[LIT_CHARS -]}) )][LIT_CHARS " "][ComSub (Com {[LIT_CHARS echo]} {[VarSub @ transform_ops=[Slice {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 3]}} None]]})]] =} {[LIT_VAR_LIKE "KUBE_GOFLAGS="] [DQ [VarSub KUBE_GOFLAGS test_op=VS_TEST_COLON_HYPHEN {}][LIT_CHARS " "][VarSub SHORT test_op=VS_TEST_COLON_HYPHEN {[LIT_CHARS "-short=true"]}][LIT_CHARS " -tags 'integration no-docker'"]] =} {[LIT_VAR_LIKE "KUBE_TEST_ARGS="] [DQ [VarSub KUBE_TEST_ARGS test_op=VS_TEST_COLON_HYPHEN {}][LIT_CHARS " --vmodule=garbage*collector*=6 --alsologtostderr=true"]] =} {[LIT_VAR_LIKE "KUBE_RACE="] [DQ ] =} {[LIT_VAR_LIKE "KUBE_TIMEOUT="] [DQ [VarSub KUBE_TIMEOUT]] =} {[LIT_VAR_LIKE "KUBE_TEST_API_VERSIONS="] [DQ [VarSub 1]] =} ) (Com {[LIT_CHARS cleanup]} ) ) ) (FunctionDef checkEtcdOnPath [] (List (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS log] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS status]} {[DQ [LIT_CHARS "Checking etcd is on PATH"]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS which]} {[LIT_CHARS etcd]} ) (Com {[LIT_CHARS return]} ) ) (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS log] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS status]} {[DQ [LIT_CHARS "Cannot find etcd, cannot run integration tests."]]} ) (Com {[LIT_CHARS kube] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS log] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS status]} {[DQ [LIT_CHARS "Please see docs/devel/testing.md for instructions."]]} ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) (Com {[LIT_CHARS checkEtcdOnPath]} ) (Com {[LIT_CHARS trap]} {[LIT_CHARS cleanup]} {[LIT_CHARS EXIT]} ) (If (DBracket {B1 UNARY_STRING_n {[DQ [VarSub KUBE_TEST_ARGS]]}}) (Com {[LIT_CHARS runTests]} {[LIT_CHARS v1]} ) ) (= scope= flags=0 words=[] bindings=[('what_flags', {[Array ]})]) (For arg [{[DQ [VarSub @]]}]) (If (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub arg]]} {[LIT_CHARS -] [LIT_OTHER "*"]}}) (= scope= flags=0 words=[] bindings=[('what_flags+', {[Array {[DQ [VarSub arg]]}]})]) ) ) (If (DBracket {B2 BINARY_INT_EQ {[DQ [VarSub what_flags bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}}) transform_ops=[(#len)]]]} {[LIT_CHARS 0]}}) (= scope= flags=0 words=[] bindings=[('what_flags', {[SQ ]})]) ) (Com {[LIT_CHARS read]} {[LIT_CHARS -a]} {[LIT_CHARS apiVersions]} < (HereWordRedirectNode here_word={[DQ [VarSub KUBE_TEST_API_VERSIONS]]} 0), > more_env=[('IFS', {[SQ ]})] ) (For apiVersion [{[DQ [VarSub apiVersions bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}})]]}]) (Com {[LIT_CHARS runTests]} {[DQ [VarSub apiVersion]]} {[DQ [VarSub 1 test_op=VS_TEST_HYPHEN {}]]} {[DQ [VarSub what_flags bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}})]]} ) ) )