From ecb547223f3f1d9bf551842c2026ee2f1a18638a Mon Sep 17 00:00:00 2001 From: Gilad Oren Date: Tue, 31 Jul 2012 14:43:00 +0300 Subject: [PATCH] Add tests for headers bug fixes --- test/helpers/http.js | 11 +++++++++++ test/http/http-test.js | 36 +++++++++++++++++++++++++++++++++--- test/macros/http.js | 21 +++++++++++++++++---- 3 files changed, 61 insertions(+), 7 deletions(-) diff --git a/test/helpers/http.js b/test/helpers/http.js index 3479626..fb4abf4 100644 --- a/test/helpers/http.js +++ b/test/helpers/http.js @@ -61,6 +61,12 @@ exports.createServer = function (options, callback) { }); } + if (options.outputHeaders){ + Object.keys(options.outputHeaders).forEach(function(header){ + res.setHeader(header, options.outputHeaders[header]); + }); + } + res.writeHead(200, { 'Content-Type': 'text/plain' }); res.write(options.output || 'hello proxy'); res.end(); @@ -114,6 +120,11 @@ exports.createProxyServer = function (options, callback) { function requestHandler(req, res) { var buffer = httpProxy.buffer(req); + if (options.outputHeaders){ + Object.keys(options.outputHeaders).forEach(function(header){ + res.setHeader(header, options.outputHeaders[header]); + }); + } setTimeout(function () { // // Setup options dynamically for `RoutingProxy.prototype.proxyRequest` diff --git a/test/http/http-test.js b/test/http/http-test.js index 585597c..363e8c9 100644 --- a/test/http/http-test.js +++ b/test/http/http-test.js @@ -42,11 +42,41 @@ vows.describe(helpers.describe()).addBatch({ "and headers": macros.http.assertProxied({ request: { headers: { host: 'unknown.com' } } }), + "and request close connection header": macros.http.assertProxied({ + request: { headers: { connection: "close" } }, + outputHeaders: { connection: "close" } + }), + "and request keep alive connection header": macros.http.assertProxied({ + request: { headers: { connection: "keep-alive" } }, + outputHeaders: { connection: "keep-alive" } + }), + "and response close connection header": macros.http.assertProxied({ + request: { headers: { connection: "" } }, // Must explicitly set to "" because otherwise node will automatically add a "connection: keep-alive" header + targetHeaders: { connection: "close" }, + outputHeaders: { connection: "close" } + }), + "and response keep-alive connection header": macros.http.assertProxied({ + request: { headers: { connection: "" } }, // Must explicitly set to "" because otherwise node will automatically add a "connection: keep-alive" header + targetHeaders: { connection: "keep-alive" }, + outputHeaders: { connection: "keep-alive" } + }), + "and no connection header": macros.http.assertProxied({ + request: { headers: { connection: "" } }, // Must explicitly set to "" because otherwise node will automatically add a "connection: keep-alive" header + outputHeaders: { connection: "keep-alive" } + }), "and forwarding enabled": macros.http.assertForwardProxied() }, - "and latency": macros.http.assertProxied({ - latency: 2000 - }) + "and latency": { + "and no headers": macros.http.assertProxied({ + latency: 2000 + }), + "and response headers": macros.http.assertProxied({ + targetHeaders: { "x-testheader": "target" }, + proxyHeaders: { "X-TestHeader": "proxy" }, + outputHeaders: { "x-testheader": "target" }, + latency: 1000 + }) + } }, "With a no valid target server": { "and no latency": macros.http.assertInvalidProxy(), diff --git a/test/macros/http.js b/test/macros/http.js index 767b7db..b8cf57b 100644 --- a/test/macros/http.js +++ b/test/macros/http.js @@ -32,6 +32,12 @@ exports.assertRequest = function (options) { }, "should succeed": function (err, res, body) { assert.isNull(err); + if (options.assert.headers) { + Object.keys(options.assert.headers).forEach(function(header){ + assert.equal(res.headers[header], options.assert.headers[header]); + }); + } + if (options.assert.body) { assert.equal(body, options.assert.body); } @@ -57,10 +63,14 @@ exports.assertRequest = function (options) { exports.assertProxied = function (options) { options = options || {}; - var ports = options.ports || helpers.nextPortPair, - output = options.output || 'hello world from ' + ports.target, - protocol = helpers.protocols.proxy, - req = options.request || {}; + var ports = options.ports || helpers.nextPortPair, + output = options.output || 'hello world from ' + ports.target, + outputHeaders = options.outputHeaders, + targetHeaders = options.targetHeaders, + proxyHeaders = options.proxyHeaders, + protocol = helpers.protocols.proxy, + req = options.request || {}; + req.uri = req.uri || protocol + '://127.0.0.1:' + ports.proxy; @@ -73,12 +83,14 @@ exports.assertProxied = function (options) { helpers.http.createServerPair({ target: { output: output, + outputHeaders: targetHeaders, port: ports.target, headers: req.headers }, proxy: { latency: options.latency, port: ports.proxy, + outputHeaders: proxyHeaders, proxy: { forward: options.forward, target: { @@ -93,6 +105,7 @@ exports.assertProxied = function (options) { "the proxy request": exports.assertRequest({ request: req, assert: { + headers: outputHeaders, body: output } })