@ -1,5 +1,5 @@
'use strict' ;
'use strict' ;
require ( '../common' ) ;
const common = require ( '../common' ) ;
const assert = require ( 'assert' ) ;
const assert = require ( 'assert' ) ;
const http = require ( 'http' ) ;
const http = require ( 'http' ) ;
@ -11,43 +11,48 @@ const http = require('http');
// <ClientRequest>.method
// <ClientRequest>.method
// <ClientRequest>.path
// <ClientRequest>.path
var testsComplete = 0 ;
let test = 'headers' ;
var test = 'headers' ;
const content = 'hello world\n' ;
var content = 'hello world\n' ;
const cookies = [
var cookies = [
'session_token=; path=/; expires=Sun, 15-Sep-2030 13:48:52 GMT' ,
'session_token=; path=/; expires=Sun, 15-Sep-2030 13:48:52 GMT' ,
'prefers_open_id=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT'
'prefers_open_id=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT'
] ;
] ;
var s = http . createServer ( function ( req , res ) {
const s = http . createServer ( common . mustCall ( ( req , res ) => {
switch ( test ) {
switch ( test ) {
case 'headers' :
case 'headers' :
assert . throws ( function ( ) { res . setHeader ( ) ; } ) ;
assert . throws ( ( ) => {
assert . throws ( function ( ) { res . setHeader ( 'someHeader' ) ; } ) ;
res . setHeader ( ) ;
assert . throws ( function ( ) { res . getHeader ( ) ; } ) ;
} , /^TypeError: Header name must be a valid HTTP Token \["undefined"\]$/ ) ;
assert . throws ( function ( ) { res . removeHeader ( ) ; } ) ;
assert . throws ( ( ) => {
res . setHeader ( 'someHeader' ) ;
} , /^Error: "value" required in setHeader\("someHeader", value\)$/ ) ;
assert . throws ( ( ) => {
res . getHeader ( ) ;
} , /^Error: "name" argument is required for getHeader\(name\)$/ ) ;
assert . throws ( ( ) => {
res . removeHeader ( ) ;
} , /^Error: "name" argument is required for removeHeader\(name\)$/ ) ;
res . setHeader ( 'x-test-header' , 'testing' ) ;
res . setHeader ( 'x-test-header' , 'testing' ) ;
res . setHeader ( 'X-TEST-HEADER2' , 'testing' ) ;
res . setHeader ( 'X-TEST-HEADER2' , 'testing' ) ;
res . setHeader ( 'set-cookie' , cookies ) ;
res . setHeader ( 'set-cookie' , cookies ) ;
res . setHeader ( 'x-test-array-header' , [ 1 , 2 , 3 ] ) ;
res . setHeader ( 'x-test-array-header' , [ 1 , 2 , 3 ] ) ;
var val1 = res . getHeader ( 'x-test-header' ) ;
assert . strictEqual ( res . getHeader ( 'x-test-header' ) , 'testing' ) ;
var val2 = res . getHeader ( 'x-test-header2' ) ;
assert . strictEqual ( res . getHeader ( 'x-test-header2' ) , 'testing' ) ;
assert . equal ( val1 , 'testing' ) ;
assert . equal ( val2 , 'testing' ) ;
res . removeHeader ( 'x-test-header2' ) ;
res . removeHeader ( 'x-test-header2' ) ;
break ;
break ;
case 'contentLength' :
case 'contentLength' :
res . setHeader ( 'content-length' , content . length ) ;
res . setHeader ( 'content-length' , content . length ) ;
assert . equal ( content . length , res . getHeader ( 'Content-Length' ) ) ;
assert . strictEqual ( res . getHeader ( 'Content-Length' ) , content . length ) ;
break ;
break ;
case 'transferEncoding' :
case 'transferEncoding' :
res . setHeader ( 'transfer-encoding' , 'chunked' ) ;
res . setHeader ( 'transfer-encoding' , 'chunked' ) ;
assert . e qual( res . getHeader ( 'Transfer-Encoding' ) , 'chunked' ) ;
assert . strictE qual( res . getHeader ( 'Transfer-Encoding' ) , 'chunked' ) ;
break ;
break ;
case 'writeHead' :
case 'writeHead' :
@ -55,11 +60,14 @@ var s = http.createServer(function(req, res) {
res . setHeader ( 'x-foo' , 'keyboard cat' ) ;
res . setHeader ( 'x-foo' , 'keyboard cat' ) ;
res . writeHead ( 200 , { 'x-foo' : 'bar' , 'x-bar' : 'baz' } ) ;
res . writeHead ( 200 , { 'x-foo' : 'bar' , 'x-bar' : 'baz' } ) ;
break ;
break ;
default :
common . fail ( 'Unknown test' ) ;
}
}
res . statusCode = 201 ;
res . statusCode = 201 ;
res . end ( content ) ;
res . end ( content ) ;
} ) ;
} , 4 ) ) ;
s . listen ( 0 , nextTest ) ;
s . listen ( 0 , nextTest ) ;
@ -69,64 +77,49 @@ function nextTest() {
return s . close ( ) ;
return s . close ( ) ;
}
}
var bufferedResponse = '' ;
let bufferedResponse = '' ;
http . get ( { port : s . address ( ) . port } , function ( response ) {
console . log ( 'TEST: ' + test ) ;
console . log ( 'STATUS: ' + response . statusCode ) ;
console . log ( 'HEADERS: ' ) ;
console . dir ( response . headers ) ;
http . get ( { port : s . address ( ) . port } , common . mustCall ( ( response ) => {
switch ( test ) {
switch ( test ) {
case 'headers' :
case 'headers' :
assert . equal ( response . statusCode , 201 ) ;
assert . strictEqual ( response . statusCode , 201 ) ;
assert . equal ( response . headers [ 'x-test-header' ] ,
assert . strictEqual ( response . headers [ 'x-test-header' ] , 'testing' ) ;
'testing' ) ;
assert . strictEqual ( response . headers [ 'x-test-array-header' ] ,
assert . equal ( response . headers [ 'x-test-array-header' ] ,
[ 1 , 2 , 3 ] . join ( ', ' ) ) ;
[ 1 , 2 , 3 ] . join ( ', ' ) ) ;
assert . deepStrictEqual ( cookies ,
assert . deepStrictEqual ( cookies , response . headers [ 'set-cookie' ] ) ;
response . headers [ 'set-cookie' ] ) ;
assert . strictEqual ( response . headers [ 'x-test-header2' ] , undefined ) ;
assert . equal ( response . headers [ 'x-test-header2' ] !== undefined , false ) ;
// Make the next request
test = 'contentLength' ;
test = 'contentLength' ;
console . log ( 'foobar' ) ;
break ;
break ;
case 'contentLength' :
case 'contentLength' :
assert . equal ( response . headers [ 'content-length' ] , content . length ) ;
assert . strictEqual ( + response . headers [ 'content-length' ] , content . length ) ;
test = 'transferEncoding' ;
test = 'transferEncoding' ;
break ;
break ;
case 'transferEncoding' :
case 'transferEncoding' :
assert . e qual( response . headers [ 'transfer-encoding' ] , 'chunked' ) ;
assert . strictE qual( response . headers [ 'transfer-encoding' ] , 'chunked' ) ;
test = 'writeHead' ;
test = 'writeHead' ;
break ;
break ;
case 'writeHead' :
case 'writeHead' :
assert . e qual( response . headers [ 'x-foo' ] , 'bar' ) ;
assert . strictE qual( response . headers [ 'x-foo' ] , 'bar' ) ;
assert . e qual( response . headers [ 'x-bar' ] , 'baz' ) ;
assert . strictE qual( response . headers [ 'x-bar' ] , 'baz' ) ;
assert . equal ( 200 , response . statusCode ) ;
assert . strictEqual ( response . statusCode , 200 ) ;
test = 'end' ;
test = 'end' ;
break ;
break ;
default :
default :
throw new Error ( '? ') ;
common . fail ( 'Unknown test ') ;
}
}
response . setEncoding ( 'utf8' ) ;
response . setEncoding ( 'utf8' ) ;
response . on ( 'data' , function ( s ) {
response . on ( 'data' , ( s ) => {
bufferedResponse += s ;
bufferedResponse += s ;
} ) ;
} ) ;
response . on ( 'end' , function ( ) {
response . on ( 'end' , common . mustCall ( ( ) => {
assert . equal ( content , bufferedResponse ) ;
assert . strictEqual ( bufferedResponse , content ) ;
testsComplete ++ ;
common . mustCall ( nextTest ) ( ) ;
nextTest ( ) ;
} ) ) ;
} ) ;
} ) ) ;
} ) ;
}
}
process . on ( 'exit' , function ( ) {
assert . equal ( 4 , testsComplete ) ;
} ) ;