From 88c04e74c99af8b0f05a7b01d14295270319f6db Mon Sep 17 00:00:00 2001 From: Ryan Date: Tue, 9 Jun 2009 14:10:53 +0200 Subject: [PATCH] Add HTTP proxy test. Fix bug in http.Server. was not properly inheriting http.Server from http.LowLevelServer. --- src/http.js | 5 +--- test/test-http-proxy.js | 54 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 test/test-http-proxy.js diff --git a/src/http.js b/src/http.js index ee89eeddfea..e05d6f9ec9e 100644 --- a/src/http.js +++ b/src/http.js @@ -125,7 +125,6 @@ node.http.ServerResponse = function (connection, responses) { this.closeOnFinish = false; var output = []; - var chunked_encoding = false; this.sendHeader = function (statusCode, headers) { @@ -314,8 +313,7 @@ node.http.Server = function (RequestHandler, options) { }; } - this.__proto__.__proto__ = - new node.http.LowLevelServer(ConnectionHandler, options); + this.__proto__ = new node.http.LowLevelServer(ConnectionHandler, options); }; node.http.Client = function (port, host) { @@ -410,7 +408,6 @@ node.http.Client = function (port, host) { }; connection.onEOF = function () { - //node.debug("onEOF. readyState = " + connection.readyState); connection.close(); }; diff --git a/test/test-http-proxy.js b/test/test-http-proxy.js new file mode 100644 index 00000000000..e2a04e169b5 --- /dev/null +++ b/test/test-http-proxy.js @@ -0,0 +1,54 @@ +include("mjsunit.js"); + +var PROXY_PORT = 8869; +var BACKEND_PORT = 8870; + +var backend = new node.http.Server(function (req, res) { + // node.debug("backend"); + res.sendHeader(200, [["content-type", "text/plain"]]); + res.sendBody("hello world\n"); + res.finish(); +}); +// node.debug("listen backend") +backend.listen(BACKEND_PORT); + +var proxy_client = new node.http.Client(BACKEND_PORT); +var proxy = new node.http.Server(function (req, res) { + // node.debug("proxy req"); + var proxy_req = proxy_client.get(req.uri.path); + proxy_req.finish(function(proxy_res) { + res.sendHeader(proxy_res.statusCode, proxy_res.headers); + proxy_res.onBody = function(chunk) { + res.sendBody(chunk); + }; + proxy_res.onBodyComplete = function() { + res.finish(); + // node.debug("proxy res"); + }; + }); +}); +// node.debug("listen proxy") +proxy.listen(PROXY_PORT); + +var body = ""; + +function onLoad () { + var client = new node.http.Client(PROXY_PORT); + var req = client.get("/test"); + // node.debug("client req") + req.finish(function (res) { + // node.debug("got res"); + assertEquals(200, res.statusCode); + res.setBodyEncoding("utf8"); + res.onBody = function (chunk) { body += chunk; }; + res.onBodyComplete = function () { + proxy.close(); + backend.close(); + // node.debug("closed both"); + }; + }); +} + +function onExit () { + assertEquals(body, "hello world\n"); +}