File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / lighttpd / tests / request.t
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Sun Jun 15 20:20:05 2014 UTC (10 years ago) by misho
Branches: lighttpd, MAIN
CVS tags: v1_4_41p8, v1_4_35p0, v1_4_35, HEAD
lighttpd 1.4.35

    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: undef $t->{SLOWREQUEST};
  416: 
  417: print "\nPathinfo for static files\n";
  418: $t->{REQUEST}  = ( <<EOF
  419: GET /image.jpg/index.php HTTP/1.0
  420: EOF
  421:  );
  422: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Content-Type' => 'image/jpeg' } ];
  423: ok($tf->handle_http($t) == 0, 'static file accepting pathinfo by default');
  424: 
  425: $t->{REQUEST}  = ( <<EOF
  426: GET /image.jpg/index.php HTTP/1.0
  427: Host: zzz.example.org
  428: EOF
  429:  );
  430: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
  431: ok($tf->handle_http($t) == 0, 'static file with forbidden pathinfo');
  432: 
  433: 
  434: print "\nConnection header\n";
  435: $t->{REQUEST}  = ( <<EOF
  436: GET /12345.txt HTTP/1.1
  437: Connection  : close
  438: Host: 123.example.org
  439: EOF
  440:  );
  441: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/plain', 'Connection' => 'close' } ];
  442: ok($tf->handle_http($t) == 0, 'Connection-header, spaces before ":"');
  443: 
  444: $t->{REQUEST}  = ( <<EOF
  445: GET /12345.txt HTTP/1.1
  446: Connection: ,close
  447: Host: 123.example.org
  448: EOF
  449:  );
  450: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/plain', 'Connection' => 'close' } ];
  451: ok($tf->handle_http($t) == 0, 'Connection-header, leading comma');
  452: 
  453: $t->{REQUEST}  = ( <<EOF
  454: GET /12345.txt HTTP/1.1
  455: Connection: close,,TE
  456: Host: 123.example.org
  457: EOF
  458:  );
  459: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/plain', 'Connection' => 'close' } ];
  460: ok($tf->handle_http($t) == 0, 'Connection-header, no value between two commas');
  461: 
  462: $t->{REQUEST}  = ( <<EOF
  463: GET /12345.txt HTTP/1.1
  464: Connection: close, ,TE
  465: Host: 123.example.org
  466: EOF
  467:  );
  468: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/plain', 'Connection' => 'close' } ];
  469: ok($tf->handle_http($t) == 0, 'Connection-header, space between two commas');
  470: 
  471: $t->{REQUEST}  = ( <<EOF
  472: GET /12345.txt HTTP/1.1
  473: Connection: close,
  474: Host: 123.example.org
  475: EOF
  476:  );
  477: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/plain', 'Connection' => 'close' } ];
  478: ok($tf->handle_http($t) == 0, 'Connection-header, comma after value');
  479: 
  480: $t->{REQUEST}  = ( <<EOF
  481: GET /12345.txt HTTP/1.1
  482: Connection: close, 
  483: Host: 123.example.org
  484: EOF
  485:  );
  486: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/plain', 'Connection' => 'close' } ];
  487: ok($tf->handle_http($t) == 0, 'Connection-header, comma and space after value');
  488: 
  489: ok($tf->stop_proc == 0, "Stopping lighttpd");
  490: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>