@ -3,44 +3,75 @@ var common = require('../common'),
assert = require ( 'assert' ) ,
http = require ( 'http' ) ;
var testIndex = 0 ,
responses = 0 ;
var testIndex = 0 ;
const testCount = 4 * 6 ;
const responseBody = 'Hi mars!' ;
var server = http . createServer ( function ( req , res ) {
switch ( testIndex ++ ) {
function reply ( header ) {
switch ( testIndex % 4 ) {
case 0 :
res . writeHead ( 200 , { test : 'foo \r\ninvalid: bar' } ) ;
res . writeHead ( 200 , { a : header , b : header } ) ;
break ;
case 1 :
res . writeHead ( 200 , { test : 'foo \ninvalid: bar' } ) ;
res . setHeader ( 'a' , header ) ;
res . setHeader ( 'b' , header ) ;
res . writeHead ( 200 ) ;
break ;
case 2 :
res . writeHead ( 200 , { test : 'foo \rinvalid: bar' } ) ;
res . setHeader ( 'a' , header ) ;
res . writeHead ( 200 , { b : header } ) ;
break ;
case 3 :
res . writeHead ( 200 , { test : 'foo \n\n\ninvalid: bar' } ) ;
res . setHeader ( 'a' , [ header ] ) ;
res . writeHead ( 200 , { b : header } ) ;
break ;
default :
assert . fail ( 'unreachable' ) ;
}
res . end ( responseBody ) ;
}
switch ( ( testIndex / 4 ) | 0 ) {
case 0 :
reply ( 'foo \r\ninvalid: bar' ) ;
break ;
case 1 :
reply ( 'foo \ninvalid: bar' ) ;
break ;
case 2 :
reply ( 'foo \rinvalid: bar' ) ;
break ;
case 3 :
reply ( 'foo \n\n\ninvalid: bar' ) ;
break ;
case 4 :
res . writeHead ( 200 , { test : 'foo \r\n \r\n \r\ninvalid: bar' } ) ;
server . close ( ) ;
reply ( 'foo \r\n \r\n \r\ninvalid: bar' ) ;
break ;
case 5 :
reply ( 'foo \r \n \r \n \r \ninvalid: bar' ) ;
break ;
default :
assert ( false ) ;
}
res . end ( 'Hi mars!' ) ;
if ( ++ testIndex === testCount ) {
server . close ( ) ;
}
} ) ;
server . listen ( common . PORT , function ( ) {
for ( var i = 0 ; i < 5 ; i ++ ) {
var req = http . get ( { port : common . PORT , path : '/' } , function ( res ) {
assert . strictEqual ( res . headers . test , 'foo invalid: bar' ) ;
server . listen ( common . PORT , common . mustCall ( function ( ) {
for ( var i = 0 ; i < testCount ; i ++ ) {
http . get ( { port : common . PORT , path : '/' } , common . mustCall ( function ( res ) {
assert . strictEqual ( res . headers . a , 'foo invalid: bar' ) ;
assert . strictEqual ( res . headers . b , 'foo invalid: bar' ) ;
assert . strictEqual ( res . headers . foo , undefined ) ;
assert . strictEqual ( res . headers . invalid , undefined ) ;
responses ++ ;
var data = '' ;
res . setEncoding ( 'utf8' ) ;
res . on ( 'data' , function ( s ) { data += s ; } ) ;
res . on ( 'end' , common . mustCall ( function ( ) {
assert . equal ( data , responseBody ) ;
} ) ) ;
res . resume ( ) ;
} ) ;
} ) ) ;
}
} ) ;
process . on ( 'exit' , function ( ) {
assert . strictEqual ( responses , 5 ) ;
} ) ;
} ) ) ;