(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: 'gitweb as standalone script (http status tests).\n' span_id: 15 ) (Token id:Id.Lit_Chars val:'\n' span_id:16) (Token id: Id.Lit_Chars val: 'This test runs gitweb (git web interface) as a CGI script from the\n' span_id: 17 ) (Token id: Id.Lit_Chars val: 'commandline, and checks that it returns the expected HTTP status\n' span_id: 18 ) (Token id:Id.Lit_Chars val:'code and message.' span_id:19) ) } spids: [13] ) ] ) (C {(.)} {(./gitweb-lib.sh)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [{(perl)} {(-MHTTP) (Id.Lit_Other ':') (Id.Lit_Other ':') (Date)} {(-e)} {(0)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:52) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:55) fd: 2 arg_word: {(1)} ) ] ) (C {(test_set_prereq)} {(DATE_PARSER)}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [{(perl)} {(-MTime) (Id.Lit_Other ':') (Id.Lit_Other ':') (ParseDate)} {(-e)} {(0)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:75) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:78) fd: 2 arg_word: {(1)} ) ] ) (C {(test_set_prereq)} {(DATE_PARSER)}) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:98))} {(DQ ('\n') ("\ttest_commit 'SnapshotTests' 'i can has snapshot'\n"))} ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:110) fd: -1 arg_word: {(gitweb_config.perl)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:113) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:114)) (OF) } here_end_span_id: 118 stdin_parts: [("$feature{'snapshot'}{'override'} = 0;\n")] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'snapshots: tgz only default format enabled' span_id:125))} { (SQ (Token id: Id.Lit_Chars val: 'gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tgz" &&\n' span_id: 131 ) (Token id:Id.Lit_Chars val:' grep "Status: 200 OK" gitweb.output &&\n' span_id:132) (Token id: Id.Lit_Chars val: ' gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tbz2" &&\n' span_id: 133 ) (Token id: Id.Lit_Chars val: ' grep "403 - Unsupported snapshot format" gitweb.output &&\n' span_id: 134 ) (Token id:Id.Lit_Chars val:' gitweb_run "p=.git;a=snapshot;h=HEAD;sf=txz" &&\n' span_id:135) (Token id: Id.Lit_Chars val: ' grep "403 - Snapshot format not allowed" gitweb.output &&\n' span_id: 136 ) (Token id:Id.Lit_Chars val:' gitweb_run "p=.git;a=snapshot;h=HEAD;sf=zip" &&\n' span_id:137) (Token id: Id.Lit_Chars val: ' grep "403 - Unsupported snapshot format" gitweb.output' span_id: 138 ) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:145) fd: -1 arg_word: {(gitweb_config.perl)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:148) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:149)) (OF) } here_end_span_id: 153 stdin_parts: [("$feature{'snapshot'}{'default'} = ['tgz','tbz2','txz','zip'];\n")] ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'snapshots: all enabled in default, use default disabled value' span_id: 160 ) ) } { (SQ (Token id: Id.Lit_Chars val: 'gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tgz" &&\n' span_id: 166 ) (Token id:Id.Lit_Chars val:' grep "Status: 200 OK" gitweb.output &&\n' span_id:167) (Token id: Id.Lit_Chars val: ' gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tbz2" &&\n' span_id: 168 ) (Token id:Id.Lit_Chars val:' grep "Status: 200 OK" gitweb.output &&\n' span_id:169) (Token id: Id.Lit_Chars val: ' gitweb_run "p=.git;a=snapshot;h=HEAD;sf=txz" &&\n' span_id: 170 ) (Token id: Id.Lit_Chars val: ' grep "403 - Snapshot format not allowed" gitweb.output &&\n' span_id: 171 ) (Token id:Id.Lit_Chars val:' gitweb_run "p=.git;a=snapshot;h=HEAD;sf=zip" &&\n' span_id:172) (Token id:Id.Lit_Chars val:' grep "Status: 200 OK" gitweb.output' span_id:173) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:180) fd: -1 arg_word: {(gitweb_config.perl)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:183) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:184)) (OF) } here_end_span_id: 188 stdin_parts: [("$known_snapshot_formats{'zip'}{'disabled'} = 1;\n")] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'snapshots: zip explicitly disabled' span_id:195))} { (SQ (Token id: Id.Lit_Chars val: 'gitweb_run "p=.git;a=snapshot;h=HEAD;sf=zip" &&\n' span_id: 201 ) (Token id:Id.Lit_Chars val:' grep "403 - Snapshot format not allowed" gitweb.output' span_id:202) ) } ) (C {(test_debug)} {(SQ (Token id:Id.Lit_Chars val:'cat gitweb.output' span_id:208))}) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:215) fd: -1 arg_word: {(gitweb_config.perl)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:218) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:219)) (OF) } here_end_span_id: 223 stdin_parts: [("$known_snapshot_formats{'tgz'}{'disabled'} = 0;\n")] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'snapshots: tgz explicitly enabled' span_id:230))} { (SQ (Token id: Id.Lit_Chars val: 'gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tgz" &&\n' span_id: 236 ) (Token id:Id.Lit_Chars val:' grep "Status: 200 OK" gitweb.output' span_id:237) ) } ) (C {(test_debug)} {(SQ (Token id:Id.Lit_Chars val:'cat gitweb.headers' span_id:243))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'snapshots: good tree-ish id' span_id:258))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:262) (Token id: Id.Lit_Chars val: '\tgitweb_run "p=.git;a=snapshot;h=master;sf=tgz" &&\n' span_id: 263 ) (Token id:Id.Lit_Chars val:'\tgrep "Status: 200 OK" gitweb.output\n' span_id:264) ) } ) (C {(test_debug)} {(SQ (Token id:Id.Lit_Chars val:'cat gitweb.headers' span_id:270))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'snapshots: bad tree-ish id' span_id:277))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:281) (Token id: Id.Lit_Chars val: '\tgitweb_run "p=.git;a=snapshot;h=frizzumFrazzum;sf=tgz" &&\n' span_id: 282 ) (Token id:Id.Lit_Chars val:'\tgrep "404 - Object does not exist" gitweb.output\n' span_id:283) ) } ) (C {(test_debug)} {(SQ (Token id:Id.Lit_Chars val:'cat gitweb.output' span_id:289))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'snapshots: bad tree-ish id (tagged object)' span_id:296))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:300) (Token id:Id.Lit_Chars val:'\techo object > tag-object &&\n' span_id:301) (Token id:Id.Lit_Chars val:'\tgit add tag-object &&\n' span_id:302) (Token id: Id.Lit_Chars val: '\ttest_tick && git commit -m "Object to be tagged" &&\n' span_id: 303 ) (Token id:Id.Lit_Chars val:'\tgit tag tagged-object $(git hash-object tag-object) &&\n' span_id:304) (Token id: Id.Lit_Chars val: '\tgitweb_run "p=.git;a=snapshot;h=tagged-object;sf=tgz" &&\n' span_id: 305 ) (Token id:Id.Lit_Chars val:'\tgrep "400 - Object is not a tree-ish" gitweb.output\n' span_id:306) ) } ) (C {(test_debug)} {(SQ (Token id:Id.Lit_Chars val:'cat gitweb.output' span_id:312))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'snapshots: good object id' span_id:319))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:323) (Token id: Id.Lit_Chars val: '\tID=$(git rev-parse --verify HEAD) &&\n' span_id: 324 ) (Token id:Id.Lit_Chars val:'\tgitweb_run "p=.git;a=snapshot;h=$ID;sf=tgz" &&\n' span_id:325) (Token id:Id.Lit_Chars val:'\tgrep "Status: 200 OK" gitweb.output\n' span_id:326) ) } ) (C {(test_debug)} {(SQ (Token id:Id.Lit_Chars val:'cat gitweb.headers' span_id:332))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'snapshots: bad object id' span_id:339))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:343) (Token id: Id.Lit_Chars val: '\tgitweb_run "p=.git;a=snapshot;h=abcdef01234;sf=tgz" &&\n' span_id: 344 ) (Token id:Id.Lit_Chars val:'\tgrep "404 - Object does not exist" gitweb.output\n' span_id:345) ) } ) (C {(test_debug)} {(SQ (Token id:Id.Lit_Chars val:'cat gitweb.output' span_id:351))}) (C {(test_expect_success)} {(DATE_PARSER)} {(SQ (Token id:Id.Lit_Chars val:'modification: feed last-modified' span_id:367))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:371) (Token id: Id.Lit_Chars val: '\tgitweb_run "p=.git;a=atom;h=master" &&\n' span_id: 372 ) (Token id:Id.Lit_Chars val:'\tgrep "Status: 200 OK" gitweb.headers &&\n' span_id:373) (Token id: Id.Lit_Chars val: '\tgrep "Last-modified: Thu, 7 Apr 2005 22:14:13 +0000" gitweb.headers\n' span_id: 374 ) ) } ) (C {(test_debug)} {(SQ (Token id:Id.Lit_Chars val:'cat gitweb.headers' span_id:380))}) (C {(test_expect_success)} {(DATE_PARSER)} {(SQ (Token id:Id.Lit_Chars val:'modification: feed if-modified-since (modified)' span_id:389))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:393) (Token id: Id.Lit_Chars val: '\tHTTP_IF_MODIFIED_SINCE="Wed, 6 Apr 2005 22:14:13 +0000" &&\n' span_id: 394 ) (Token id:Id.Lit_Chars val:'\texport HTTP_IF_MODIFIED_SINCE &&\n' span_id:395) (Token id: Id.Lit_Chars val: '\ttest_when_finished "unset HTTP_IF_MODIFIED_SINCE" &&\n' span_id: 396 ) (Token id:Id.Lit_Chars val:'\tgitweb_run "p=.git;a=atom;h=master" &&\n' span_id:397) (Token id: Id.Lit_Chars val: '\tgrep "Status: 200 OK" gitweb.headers\n' span_id: 398 ) ) } ) (C {(test_debug)} {(SQ (Token id:Id.Lit_Chars val:'cat gitweb.headers' span_id:404))}) (C {(test_expect_success)} {(DATE_PARSER)} { (SQ (Token id: Id.Lit_Chars val: 'modification: feed if-modified-since (unmodified)' span_id: 413 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:417) (Token id: Id.Lit_Chars val: '\tHTTP_IF_MODIFIED_SINCE="Thu, 7 Apr 2005 22:14:13 +0000" &&\n' span_id: 418 ) (Token id:Id.Lit_Chars val:'\texport HTTP_IF_MODIFIED_SINCE &&\n' span_id:419) (Token id: Id.Lit_Chars val: '\ttest_when_finished "unset HTTP_IF_MODIFIED_SINCE" &&\n' span_id: 420 ) (Token id:Id.Lit_Chars val:'\tgitweb_run "p=.git;a=atom;h=master" &&\n' span_id:421) (Token id: Id.Lit_Chars val: '\tgrep "Status: 304 Not Modified" gitweb.headers\n' span_id: 422 ) ) } ) (C {(test_debug)} {(SQ (Token id:Id.Lit_Chars val:'cat gitweb.headers' span_id:428))}) (C {(test_expect_success)} {(DATE_PARSER)} {(SQ (Token id:Id.Lit_Chars val:'modification: snapshot last-modified' span_id:437))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:441) (Token id: Id.Lit_Chars val: '\tgitweb_run "p=.git;a=snapshot;h=master;sf=tgz" &&\n' span_id: 442 ) (Token id:Id.Lit_Chars val:'\tgrep "Status: 200 OK" gitweb.headers &&\n' span_id:443) (Token id: Id.Lit_Chars val: '\tgrep "Last-modified: Thu, 7 Apr 2005 22:14:13 +0000" gitweb.headers\n' span_id: 444 ) ) } ) (C {(test_debug)} {(SQ (Token id:Id.Lit_Chars val:'cat gitweb.headers' span_id:450))}) (C {(test_expect_success)} {(DATE_PARSER)} { (SQ (Token id: Id.Lit_Chars val: 'modification: snapshot if-modified-since (modified)' span_id: 459 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:463) (Token id: Id.Lit_Chars val: '\tHTTP_IF_MODIFIED_SINCE="Wed, 6 Apr 2005 22:14:13 +0000" &&\n' span_id: 464 ) (Token id:Id.Lit_Chars val:'\texport HTTP_IF_MODIFIED_SINCE &&\n' span_id:465) (Token id: Id.Lit_Chars val: '\ttest_when_finished "unset HTTP_IF_MODIFIED_SINCE" &&\n' span_id: 466 ) (Token id:Id.Lit_Chars val:'\tgitweb_run "p=.git;a=snapshot;h=master;sf=tgz" &&\n' span_id:467) (Token id: Id.Lit_Chars val: '\tgrep "Status: 200 OK" gitweb.headers\n' span_id: 468 ) ) } ) (C {(test_debug)} {(SQ (Token id:Id.Lit_Chars val:'cat gitweb.headers' span_id:474))}) (C {(test_expect_success)} {(DATE_PARSER)} { (SQ (Token id: Id.Lit_Chars val: 'modification: snapshot if-modified-since (unmodified)' span_id: 483 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:487) (Token id: Id.Lit_Chars val: '\tHTTP_IF_MODIFIED_SINCE="Thu, 7 Apr 2005 22:14:13 +0000" &&\n' span_id: 488 ) (Token id:Id.Lit_Chars val:'\texport HTTP_IF_MODIFIED_SINCE &&\n' span_id:489) (Token id: Id.Lit_Chars val: '\ttest_when_finished "unset HTTP_IF_MODIFIED_SINCE" &&\n' span_id: 490 ) (Token id:Id.Lit_Chars val:'\tgitweb_run "p=.git;a=snapshot;h=master;sf=tgz" &&\n' span_id:491) (Token id: Id.Lit_Chars val: '\tgrep "Status: 304 Not Modified" gitweb.headers\n' span_id: 492 ) ) } ) (C {(test_debug)} {(SQ (Token id:Id.Lit_Chars val:'cat gitweb.headers' span_id:498))}) (C {(test_expect_success)} {(DATE_PARSER)} {(SQ (Token id:Id.Lit_Chars val:'modification: tree snapshot' span_id:507))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:511) (Token id: Id.Lit_Chars val: '\tID=$(git rev-parse --verify HEAD^{tree}) &&\n' span_id: 512 ) (Token id: Id.Lit_Chars val: '\tHTTP_IF_MODIFIED_SINCE="Wed, 6 Apr 2005 22:14:13 +0000" &&\n' span_id: 513 ) (Token id:Id.Lit_Chars val:'\texport HTTP_IF_MODIFIED_SINCE &&\n' span_id:514) (Token id: Id.Lit_Chars val: '\ttest_when_finished "unset HTTP_IF_MODIFIED_SINCE" &&\n' span_id: 515 ) (Token id:Id.Lit_Chars val:'\tgitweb_run "p=.git;a=snapshot;h=$ID;sf=tgz" &&\n' span_id:516) (Token id: Id.Lit_Chars val: '\tgrep "Status: 200 OK" gitweb.headers &&\n' span_id: 517 ) (Token id:Id.Lit_Chars val:'\t! grep -i "last-modified" gitweb.headers\n' span_id:518) ) } ) (C {(test_debug)} {(SQ (Token id:Id.Lit_Chars val:'cat gitweb.headers' span_id:524))}) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:540) fd: -1 arg_word: {(gitweb_config.perl)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:543) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:544)) (OF) } here_end_span_id: 548 stdin_parts: [('our $maxload = -1;\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'load checking: load too high (default action)' span_id:553))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:557) (Token id:Id.Lit_Chars val:'\tgitweb_run "p=.git" &&\n' span_id:558) (Token id: Id.Lit_Chars val: '\tgrep "Status: 503 Service Unavailable" gitweb.headers &&\n' span_id: 559 ) (Token id: Id.Lit_Chars val: '\tgrep "503 - The load average on the server is too high" gitweb.body\n' span_id: 560 ) ) } ) (C {(test_debug)} {(SQ (Token id:Id.Lit_Chars val:'cat gitweb.headers' span_id:566))}) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:575) fd: -1 arg_word: {(gitweb_config.perl)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:578) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:579)) (OF) } here_end_span_id: 583 stdin_parts: [('our $maxload = undef;\n')] ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'invalid arguments: invalid regexp (in project search)' span_id: 596 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:600) (Token id: Id.Lit_Chars val: '\tgitweb_run "a=project_list;s=*\\.git;sr=1" &&\n' span_id: 601 ) (Token id:Id.Lit_Chars val:'\tgrep "Status: 400" gitweb.headers &&\n' span_id:602) (Token id: Id.Lit_Chars val: '\tgrep "400 - Invalid.*regexp" gitweb.body\n' span_id: 603 ) ) } ) (C {(test_debug)} {(SQ (Token id:Id.Lit_Chars val:'cat gitweb.headers' span_id:609))}) (C {(test_done)}) ] )