Annotation of embedaddon/lighttpd/tests/request.t, revision 1.1
1.1 ! misho 1: #!/usr/bin/env perl
! 2: BEGIN {
! 3: # add current source dir to the include-path
! 4: # we need this for make distcheck
! 5: (my $srcdir = $0) =~ s,/[^/]+$,/,;
! 6: unshift @INC, $srcdir;
! 7: }
! 8:
! 9: use strict;
! 10: use IO::Socket;
! 11: use Test::More tests => 52;
! 12: use LightyTest;
! 13:
! 14: my $tf = LightyTest->new();
! 15: my $t;
! 16:
! 17: ok($tf->start_proc == 0, "Starting lighttpd") or die();
! 18:
! 19: ## Basic Request-Handling
! 20:
! 21: $t->{REQUEST} = ( <<EOF
! 22: GET /foobar HTTP/1.0
! 23: EOF
! 24: );
! 25: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
! 26: ok($tf->handle_http($t) == 0, 'file not found');
! 27:
! 28: $t->{REQUEST} = ( <<EOF
! 29: GET /foobar?foobar HTTP/1.0
! 30: EOF
! 31: );
! 32: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
! 33: ok($tf->handle_http($t) == 0, 'file not found + querystring');
! 34:
! 35: $t->{REQUEST} = ( <<EOF
! 36: GET /12345.txt HTTP/1.0
! 37: Host: 123.example.org
! 38: EOF
! 39: );
! 40: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/plain' } ];
! 41: ok($tf->handle_http($t) == 0, 'GET, content == 12345, mimetype text/plain');
! 42:
! 43: $t->{REQUEST} = ( <<EOF
! 44: GET /12345.html HTTP/1.0
! 45: Host: 123.example.org
! 46: EOF
! 47: );
! 48: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/html' } ];
! 49: ok($tf->handle_http($t) == 0, 'GET, content == 12345, mimetype text/html');
! 50:
! 51: $t->{REQUEST} = ( <<EOF
! 52: GET /dummyfile.bla HTTP/1.0
! 53: Host: 123.example.org
! 54: EOF
! 55: );
! 56: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'application/octet-stream' } ];
! 57: ok($tf->handle_http($t) == 0, 'GET, content == 12345, mimetype application/octet-stream');
! 58:
! 59: $t->{REQUEST} = ( <<EOF
! 60: POST / HTTP/1.0
! 61: EOF
! 62: );
! 63: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 411 } ];
! 64: ok($tf->handle_http($t) == 0, 'POST request, no Content-Length');
! 65:
! 66:
! 67: $t->{REQUEST} = ( <<EOF
! 68: POST / HTTP/1.0
! 69: Content-type: application/x-www-form-urlencoded
! 70: Content-length: 0
! 71: EOF
! 72: );
! 73: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
! 74: ok($tf->handle_http($t) == 0, 'POST request, empty request-body');
! 75:
! 76: $t->{REQUEST} = ( <<EOF
! 77: HEAD / HTTP/1.0
! 78: EOF
! 79: );
! 80: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '-HTTP-Content' => ''} ];
! 81: ok($tf->handle_http($t) == 0, 'HEAD request, no content');
! 82:
! 83: $t->{REQUEST} = ( <<EOF
! 84: HEAD /12345.html HTTP/1.0
! 85: Host: 123.example.org
! 86: EOF
! 87: );
! 88: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '-HTTP-Content' => '', 'Content-Type' => 'text/html', 'Content-Length' => '6'} ];
! 89: ok($tf->handle_http($t) == 0, 'HEAD request, mimetype text/html, content-length');
! 90:
! 91: $t->{REQUEST} = ( <<EOF
! 92: HEAD http://123.example.org/12345.html HTTP/1.1
! 93: Connection: close
! 94: EOF
! 95: );
! 96: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200, '-HTTP-Content' => '', 'Content-Type' => 'text/html', 'Content-Length' => '6'} ];
! 97: ok($tf->handle_http($t) == 0, 'Hostname in first line, HTTP/1.1');
! 98:
! 99: $t->{REQUEST} = ( <<EOF
! 100: HEAD https://123.example.org/12345.html HTTP/1.0
! 101: EOF
! 102: );
! 103: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '-HTTP-Content' => '', 'Content-Type' => 'text/html', 'Content-Length' => '6'} ];
! 104: ok($tf->handle_http($t) == 0, 'Hostname in first line as https url');
! 105:
! 106: $t->{REQUEST} = ( <<EOF
! 107: HEAD /foobar?foobar HTTP/1.0
! 108: EOF
! 109: );
! 110: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404, '-HTTP-Content' => '' } ];
! 111: ok($tf->handle_http($t) == 0, 'HEAD request, file-not-found, query-string');
! 112:
! 113: $t->{REQUEST} = ( <<EOF
! 114: GET / HTTP/1.1
! 115: Connection: close
! 116: Expect: 100-continue
! 117: EOF
! 118: );
! 119: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 417 } ];
! 120: ok($tf->handle_http($t) == 0, 'Continue, Expect');
! 121:
! 122: ## ranges
! 123:
! 124: $t->{REQUEST} = ( <<EOF
! 125: GET /12345.txt HTTP/1.0
! 126: Host: 123.example.org
! 127: Range: bytes=0-3
! 128: EOF
! 129: );
! 130: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 206, 'HTTP-Content' => '1234' } ];
! 131: ok($tf->handle_http($t) == 0, 'GET, Range 0-3');
! 132:
! 133: $t->{REQUEST} = ( <<EOF
! 134: GET /12345.txt HTTP/1.0
! 135: Host: 123.example.org
! 136: Range: bytes=-3
! 137: EOF
! 138: );
! 139: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 206, 'HTTP-Content' => '45'."\n" } ];
! 140: ok($tf->handle_http($t) == 0, 'GET, Range -3');
! 141:
! 142: $t->{REQUEST} = ( <<EOF
! 143: GET /12345.txt HTTP/1.0
! 144: Host: 123.example.org
! 145: Range: bytes=3-
! 146: EOF
! 147: );
! 148: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 206, 'HTTP-Content' => '45'."\n" } ];
! 149: ok($tf->handle_http($t) == 0, 'GET, Range 3-');
! 150:
! 151: $t->{REQUEST} = ( <<EOF
! 152: GET /12345.txt HTTP/1.0
! 153: Host: 123.example.org
! 154: Range: bytes=0-1,3-4
! 155: EOF
! 156: );
! 157: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 206, 'HTTP-Content' => <<EOF
! 158: \r
! 159: --fkj49sn38dcn3\r
! 160: Content-Range: bytes 0-1/6\r
! 161: Content-Type: text/plain\r
! 162: \r
! 163: 12\r
! 164: --fkj49sn38dcn3\r
! 165: Content-Range: bytes 3-4/6\r
! 166: Content-Type: text/plain\r
! 167: \r
! 168: 45\r
! 169: --fkj49sn38dcn3--\r
! 170: EOF
! 171: } ];
! 172: ok($tf->handle_http($t) == 0, 'GET, Range 0-1,3-4');
! 173:
! 174: $t->{REQUEST} = ( <<EOF
! 175: GET /12345.txt HTTP/1.0
! 176: Host: 123.example.org
! 177: Range: bytes=0--
! 178: EOF
! 179: );
! 180: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
! 181: ok($tf->handle_http($t) == 0, 'GET, Range 0--');
! 182:
! 183: $t->{REQUEST} = ( <<EOF
! 184: GET /12345.txt HTTP/1.0
! 185: Host: 123.example.org
! 186: Range: bytes=-2-3
! 187: EOF
! 188: );
! 189: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
! 190: ok($tf->handle_http($t) == 0, 'GET, Range -2-3');
! 191:
! 192: $t->{REQUEST} = ( <<EOF
! 193: GET /12345.txt HTTP/1.0
! 194: Host: 123.example.org
! 195: Range: bytes=-0
! 196: EOF
! 197: );
! 198: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 416, 'HTTP-Content' => <<EOF
! 199: <?xml version="1.0" encoding="iso-8859-1"?>
! 200: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
! 201: "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
! 202: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
! 203: <head>
! 204: <title>416 - Requested Range Not Satisfiable</title>
! 205: </head>
! 206: <body>
! 207: <h1>416 - Requested Range Not Satisfiable</h1>
! 208: </body>
! 209: </html>
! 210: EOF
! 211: } ];
! 212: ok($tf->handle_http($t) == 0, 'GET, Range -0');
! 213:
! 214: $t->{REQUEST} = ( <<EOF
! 215: GET /12345.txt HTTP/1.0
! 216: Host: 123.example.org
! 217: Range: bytes=25-
! 218: EOF
! 219: );
! 220: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 416, 'HTTP-Content' => <<EOF
! 221: <?xml version="1.0" encoding="iso-8859-1"?>
! 222: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
! 223: "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
! 224: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
! 225: <head>
! 226: <title>416 - Requested Range Not Satisfiable</title>
! 227: </head>
! 228: <body>
! 229: <h1>416 - Requested Range Not Satisfiable</h1>
! 230: </body>
! 231: </html>
! 232: EOF
! 233: } ];
! 234:
! 235: ok($tf->handle_http($t) == 0, 'GET, Range start out of range');
! 236:
! 237:
! 238: $t->{REQUEST} = ( <<EOF
! 239: GET / HTTP/1.0
! 240: Hsgfsdjf: asdfhdf
! 241: hdhd: shdfhfdasd
! 242: hfhr: jfghsdfg
! 243: jfuuehdmn: sfdgjfdg
! 244: jvcbzufdg: sgfdfg
! 245: hrnvcnd: jfjdfg
! 246: jfusfdngmd: gfjgfdusdfg
! 247: nfj: jgfdjdfg
! 248: jfue: jfdfdg
! 249: EOF
! 250: );
! 251: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
! 252: ok($tf->handle_http($t) == 0, 'larger headers');
! 253:
! 254:
! 255: $t->{REQUEST} = ( <<EOF
! 256: GET / HTTP/1.0
! 257: Host: www.example.org
! 258: Host: 123.example.org
! 259: EOF
! 260: );
! 261: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
! 262: ok($tf->handle_http($t) == 0, 'Duplicate Host headers, Bug #25');
! 263:
! 264:
! 265: $t->{REQUEST} = ( <<EOF
! 266: GET / HTTP/1.0
! 267: Content-Length: 5
! 268: Content-Length: 4
! 269: EOF
! 270: );
! 271: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
! 272: ok($tf->handle_http($t) == 0, 'Duplicate Content-Length headers');
! 273:
! 274: $t->{REQUEST} = ( <<EOF
! 275: GET / HTTP/1.0
! 276: Content-Type: 5
! 277: Content-Type: 4
! 278: EOF
! 279: );
! 280: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
! 281: ok($tf->handle_http($t) == 0, 'Duplicate Content-Type headers');
! 282:
! 283: $t->{REQUEST} = ( <<EOF
! 284: GET / HTTP/1.0
! 285: Range: bytes=5-6
! 286: Range: bytes=5-9
! 287: EOF
! 288: );
! 289: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
! 290: ok($tf->handle_http($t) == 0, 'Duplicate Range headers');
! 291:
! 292: $t->{REQUEST} = ( <<EOF
! 293: GET / HTTP/1.0
! 294: If-None-Match: 5
! 295: If-None-Match: 4
! 296: EOF
! 297: );
! 298: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
! 299: ok($tf->handle_http($t) == 0, 'Duplicate If-None-Match headers');
! 300:
! 301: $t->{REQUEST} = ( <<EOF
! 302: GET / HTTP/1.0
! 303: If-Modified-Since: 5
! 304: If-Modified-Since: 4
! 305: EOF
! 306: );
! 307: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
! 308: ok($tf->handle_http($t) == 0, 'Duplicate If-Modified-Since headers');
! 309:
! 310: $t->{REQUEST} = ( <<EOF
! 311: GET /range.pdf HTTP/1.0
! 312: Range: bytes=0-
! 313: EOF
! 314: );
! 315: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
! 316: ok($tf->handle_http($t) == 0, 'GET, Range with range-requests-disabled');
! 317:
! 318: $t->{REQUEST} = ( <<EOF
! 319: GET / HTTP/1.0
! 320: Content-Length: 4
! 321:
! 322: 1234
! 323: EOF
! 324: );
! 325: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
! 326: ok($tf->handle_http($t) == 0, 'GET with Content-Length');
! 327:
! 328: $t->{REQUEST} = ( <<EOF
! 329: OPTIONS / HTTP/1.0
! 330: Content-Length: 4
! 331:
! 332: 1234
! 333: EOF
! 334: );
! 335: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
! 336: ok($tf->handle_http($t) == 0, 'OPTIONS with Content-Length');
! 337:
! 338: $t->{REQUEST} = ( <<EOF
! 339: OPTIONS rtsp://221.192.134.146:80 RTSP/1.1
! 340: Host: 221.192.134.146:80
! 341: EOF
! 342: );
! 343: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
! 344: ok($tf->handle_http($t) == 0, 'OPTIONS for RTSP');
! 345:
! 346: $t->{REQUEST} = ( <<EOF
! 347: HEAD / HTTP/1.0
! 348: Content-Length: 4
! 349:
! 350: 1234
! 351: EOF
! 352: );
! 353: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
! 354: ok($tf->handle_http($t) == 0, 'HEAD with Content-Length');
! 355:
! 356: $t->{REQUEST} = ( <<EOF
! 357: GET /index.html HTTP/1.0
! 358: If-Modified-Since: Sun, 01 Jan 2036 00:00:02 GMT
! 359: If-Modified-Since: Sun, 01 Jan 2036 00:00:02 GMT
! 360: EOF
! 361: );
! 362: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 304 } ];
! 363: ok($tf->handle_http($t) == 0, 'Duplicate If-Mod-Since, with equal timestamps');
! 364:
! 365: $t->{REQUEST} = ( "GET / HTTP/1.0\r\nIf-Modified-Since: \0\r\n\r\n" );
! 366: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
! 367: ok($tf->handle_http($t) == 0, 'invalid chars in Header values (bug #1286)');
! 368:
! 369: $t->{REQUEST} = ( "GET / HTTP/1.0\r\nIf-Modified-Since: \r\n\r\n" );
! 370: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
! 371: ok($tf->handle_http($t) == 0, 'empty If-Modified-Since');
! 372:
! 373: $t->{REQUEST} = ( "GET / HTTP/1.0\r\nIf-Modified-Since: foobar\r\n\r\n" );
! 374: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
! 375: ok($tf->handle_http($t) == 0, 'broken If-Modified-Since');
! 376:
! 377: $t->{REQUEST} = ( "GET / HTTP/1.0\r\nIf-Modified-Since: this string is too long to be a valid timestamp\r\n\r\n" );
! 378: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
! 379: ok($tf->handle_http($t) == 0, 'broken If-Modified-Since');
! 380:
! 381:
! 382: $t->{REQUEST} = ( <<EOF
! 383: GET /index.html HTTP/1.0
! 384: If-Modified-Since2: Sun, 01 Jan 2036 00:00:03 GMT
! 385: If-Modified-Since: Sun, 01 Jan 2036 00:00:02 GMT
! 386: EOF
! 387: );
! 388: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 304 } ];
! 389: ok($tf->handle_http($t) == 0, 'Similar Headers (bug #1287)');
! 390:
! 391: $t->{REQUEST} = ( <<EOF
! 392: GET /index.html HTTP/1.0
! 393: If-Modified-Since: Sun, 01 Jan 2036 00:00:02 GMT
! 394: EOF
! 395: );
! 396: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 304, 'Content-Type' => 'text/html' } ];
! 397: ok($tf->handle_http($t) == 0, 'If-Modified-Since');
! 398:
! 399: $t->{REQUEST} = ( <<EOF
! 400: GET /index.html HTTP/1.0
! 401: If-Modified-Since: Sun, 01 Jan 2036 00:00:02 GMT
! 402: EOF
! 403: );
! 404: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 304, '-Content-Length' => '' } ];
! 405: ok($tf->handle_http($t) == 0, 'Status 304 has no Content-Length (#1002)');
! 406:
! 407: $t->{REQUEST} = ( <<EOF
! 408: GET /12345.txt HTTP/1.0
! 409: Host: 123.example.org
! 410: EOF
! 411: );
! 412: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/plain' } ];
! 413: $t->{SLOWREQUEST} = 1;
! 414: ok($tf->handle_http($t) == 0, 'GET, slow \\r\\n\\r\\n (#2105)');
! 415:
! 416: print "\nPathinfo for static files\n";
! 417: $t->{REQUEST} = ( <<EOF
! 418: GET /image.jpg/index.php HTTP/1.0
! 419: EOF
! 420: );
! 421: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Content-Type' => 'image/jpeg' } ];
! 422: ok($tf->handle_http($t) == 0, 'static file accepting pathinfo by default');
! 423:
! 424: $t->{REQUEST} = ( <<EOF
! 425: GET /image.jpg/index.php HTTP/1.0
! 426: Host: zzz.example.org
! 427: EOF
! 428: );
! 429: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
! 430: ok($tf->handle_http($t) == 0, 'static file with forbidden pathinfo');
! 431:
! 432:
! 433: print "\nConnection header\n";
! 434: $t->{REQUEST} = ( <<EOF
! 435: GET /12345.txt HTTP/1.1
! 436: Connection : close
! 437: Host: 123.example.org
! 438: EOF
! 439: );
! 440: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/plain', 'Connection' => 'close' } ];
! 441: ok($tf->handle_http($t) == 0, 'Connection-header, spaces before ":"');
! 442:
! 443: $t->{REQUEST} = ( <<EOF
! 444: GET /12345.txt HTTP/1.1
! 445: Connection: ,close
! 446: Host: 123.example.org
! 447: EOF
! 448: );
! 449: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/plain', 'Connection' => 'close' } ];
! 450: ok($tf->handle_http($t) == 0, 'Connection-header, leading comma');
! 451:
! 452: $t->{REQUEST} = ( <<EOF
! 453: GET /12345.txt HTTP/1.1
! 454: Connection: close,,TE
! 455: Host: 123.example.org
! 456: EOF
! 457: );
! 458: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/plain', 'Connection' => 'close' } ];
! 459: ok($tf->handle_http($t) == 0, 'Connection-header, no value between two commas');
! 460:
! 461: $t->{REQUEST} = ( <<EOF
! 462: GET /12345.txt HTTP/1.1
! 463: Connection: close, ,TE
! 464: Host: 123.example.org
! 465: EOF
! 466: );
! 467: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/plain', 'Connection' => 'close' } ];
! 468: ok($tf->handle_http($t) == 0, 'Connection-header, space between two commas');
! 469:
! 470: $t->{REQUEST} = ( <<EOF
! 471: GET /12345.txt HTTP/1.1
! 472: Connection: close,
! 473: Host: 123.example.org
! 474: EOF
! 475: );
! 476: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/plain', 'Connection' => 'close' } ];
! 477: ok($tf->handle_http($t) == 0, 'Connection-header, comma after value');
! 478:
! 479: $t->{REQUEST} = ( <<EOF
! 480: GET /12345.txt HTTP/1.1
! 481: Connection: close,
! 482: Host: 123.example.org
! 483: EOF
! 484: );
! 485: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/plain', 'Connection' => 'close' } ];
! 486: ok($tf->handle_http($t) == 0, 'Connection-header, comma and space after value');
! 487:
! 488: ok($tf->stop_proc == 0, "Stopping lighttpd");
! 489:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>