mirror of https://github.com/lukechilds/node.git
Browse Source
This works for both ServerResponse and ClientRequest. Adds three new methods as a couple properties to to OutgoingMessage objects. Tests by Charlie Robbins. Change-Id: Ib6f3829798e8f11dd2b6136e61df254f1564807ev0.7.4-release
Tim Caswell
14 years ago
committed by
Ryan Dahl
3 changed files with 269 additions and 12 deletions
@ -0,0 +1,119 @@ |
|||
var common = require('../common'); |
|||
var assert = require('assert'); |
|||
var http = require('http'); |
|||
|
|||
// Simple test of Node's HTTP Client mutable headers
|
|||
// OutgoingMessage.prototype.setHeader(name, value)
|
|||
// OutgoingMessage.prototype.getHeader(name)
|
|||
// OutgoingMessage.prototype.removeHeader(name, value)
|
|||
// ServerResponse.prototype.statusCode
|
|||
// <ClientRequest>.method
|
|||
// <ClientRequest>.path
|
|||
|
|||
var testsComplete = 0; |
|||
var test = 'headers'; |
|||
var content = 'hello world\n'; |
|||
var cookies = [ |
|||
'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' |
|||
]; |
|||
|
|||
var s = http.createServer(function(req, res) { |
|||
switch (test) { |
|||
case 'headers': |
|||
assert.throws(function () { res.setHeader() }); |
|||
assert.throws(function () { res.setHeader('someHeader') }); |
|||
assert.throws(function () { res.getHeader() }); |
|||
assert.throws(function () { res.removeHeader() }); |
|||
|
|||
res.setHeader('x-test-header', 'testing'); |
|||
res.setHeader('X-TEST-HEADER2', 'testing'); |
|||
res.setHeader('set-cookie', cookies); |
|||
res.setHeader('x-test-array-header', [1, 2, 3]); |
|||
|
|||
var val1 = res.getHeader('x-test-header'); |
|||
var val2 = res.getHeader('x-test-header2'); |
|||
assert.equal(val1, 'testing'); |
|||
assert.equal(val2, 'testing'); |
|||
|
|||
res.removeHeader('x-test-header2'); |
|||
break; |
|||
|
|||
case 'contentLength': |
|||
res.setHeader('content-length', content.length); |
|||
assert.equal(content.length, res.getHeader('Content-Length')); |
|||
break; |
|||
|
|||
case 'transferEncoding': |
|||
res.setHeader('transfer-encoding', 'chunked'); |
|||
assert.equal(res.getHeader('Transfer-Encoding'), 'chunked'); |
|||
break; |
|||
} |
|||
|
|||
res.statusCode = 201; |
|||
res.end(content); |
|||
}); |
|||
|
|||
s.listen(common.PORT, nextTest); |
|||
|
|||
|
|||
function nextTest () { |
|||
if (test === 'end') { |
|||
return s.close(); |
|||
} |
|||
|
|||
var bufferedResponse = ''; |
|||
|
|||
http.get({ port: common.PORT }, function(response) { |
|||
console.log('TEST: ' + test); |
|||
console.log('STATUS: ' + response.statusCode); |
|||
console.log('HEADERS: '); |
|||
console.dir(response.headers); |
|||
|
|||
switch (test) { |
|||
case 'headers': |
|||
assert.equal(response.statusCode, 201); |
|||
assert.equal(response.headers['x-test-header'], |
|||
'testing'); |
|||
assert.equal(response.headers['x-test-array-header'], |
|||
[1,2,3].join(', ')); |
|||
assert.deepEqual(cookies, |
|||
response.headers['set-cookie']); |
|||
assert.equal(response.headers['x-test-header2'] !== undefined, false); |
|||
// Make the next request
|
|||
test = 'contentLength'; |
|||
console.log('foobar'); |
|||
break; |
|||
|
|||
case 'contentLength': |
|||
assert.equal(response.headers['content-length'], content.length); |
|||
test = 'transferEncoding'; |
|||
break; |
|||
|
|||
case 'transferEncoding': |
|||
assert.equal(response.headers['transfer-encoding'], 'chunked'); |
|||
test = 'end'; |
|||
break; |
|||
|
|||
default: |
|||
throw Error("?"); |
|||
} |
|||
|
|||
response.setEncoding('utf8'); |
|||
response.on('data', function(s) { |
|||
bufferedResponse += s; |
|||
}); |
|||
|
|||
response.on('end', function() { |
|||
assert.equal(content, bufferedResponse); |
|||
testsComplete++; |
|||
nextTest(); |
|||
}); |
|||
}); |
|||
} |
|||
|
|||
|
|||
process.on('exit', function() { |
|||
assert.equal(3, testsComplete); |
|||
}); |
|||
|
Loading…
Reference in new issue