From 536eceaa2dbf9e3aa8e04998fab108c930df876d Mon Sep 17 00:00:00 2001 From: Ryan Date: Tue, 19 May 2009 14:49:28 +0200 Subject: [PATCH] Debugging http. Add simple test. (Does not pass.) --- src/http.js | 14 ++++++----- src/net.cc | 7 +++--- test/test-http.js | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++ test/test-pingpong.js | 1 + test_http.js | 8 ------ 5 files changed, 79 insertions(+), 18 deletions(-) create mode 100644 test/test-http.js delete mode 100644 test_http.js diff --git a/src/http.js b/src/http.js index 869d725..a2642cc 100644 --- a/src/http.js +++ b/src/http.js @@ -250,6 +250,7 @@ node.http.ServerResponse = function (connection, responses) { node.http.Server = function (RequestHandler, options) { if (!(this instanceof node.http.Server)) throw Error("Constructor called as a function"); + var server = this; function ConnectionHandler (connection) { // An array of responses for each connection. In pipelined connections @@ -301,7 +302,7 @@ node.http.Server = function (RequestHandler, options) { res.should_keep_alive = this.should_keep_alive; - return RequestHandler(req, res); + return RequestHandler.apply(server, [req, res]); }; this.onBody = function (chunk) { @@ -329,8 +330,8 @@ node.http.Server = function (RequestHandler, options) { new node.http.LowLevelServer(ConnectionHandler, options); }; -node.http.Client = function (port, host, options) { - var connection = new node.http.LowLevelClient(options); +node.http.Client = function (port, host) { + var connection = new node.http.LowLevelClient(); var requests = []; function ClientRequest (method, uri, header_lines) { @@ -440,15 +441,16 @@ node.http.Client = function (port, host, options) { } connection.onConnect = function () { - puts("HTTP CLIENT: connected"); + //node.debug("HTTP CLIENT: connected"); requests[0].flush(); }; connection.onDisconnect = function () { + //node.debug("HTTP CLIENT: disconnect"); // If there are more requests to handle, reconnect. if (requests.length > 0) { - puts("HTTP CLIENT: reconnecting"); - connection.connect(port, host); + //node.debug("HTTP CLIENT: reconnecting"); + this.connect(port, host); } }; diff --git a/src/net.cc b/src/net.cc index a83885e..4a81a6f 100644 --- a/src/net.cc +++ b/src/net.cc @@ -28,7 +28,7 @@ using namespace node; #define TIMEOUT_SYMBOL String::NewSymbol("timeout") #define SERVER_SYMBOL String::NewSymbol("server") -#define PROTOCOL_SYMBOL String::NewSymbol("protocol") +#define PROTOCOL_SYMBOL String::NewSymbol("protocol") #define CONNECTION_HANDLER_SYMBOL String::NewSymbol("connection_handler") #define READY_STATE_SYMBOL String::NewSymbol("readyState") @@ -67,12 +67,12 @@ Connection::Initialize (v8::Handle target) NODE_SET_PROTOTYPE_METHOD(constructor_template, "fullClose", FullClose); NODE_SET_PROTOTYPE_METHOD(constructor_template, "forceClose", ForceClose); - constructor_template->PrototypeTemplate()->SetAccessor( + constructor_template->InstanceTemplate()->SetAccessor( ENCODING_SYMBOL, EncodingGetter, EncodingSetter); - constructor_template->PrototypeTemplate()->SetAccessor( + constructor_template->InstanceTemplate()->SetAccessor( READY_STATE_SYMBOL, ReadyStateGetter); @@ -217,7 +217,6 @@ Connection::Connect (const Arguments& args) ); connection->Attach(); - return Undefined(); } diff --git a/test/test-http.js b/test/test-http.js new file mode 100644 index 0000000..13e52a0 --- /dev/null +++ b/test/test-http.js @@ -0,0 +1,67 @@ +include("mjsunit"); + +var port = 8000; + +function onLoad() { + + var request_number = 0; + + new node.http.Server(function (req, res) { + var server = this; + req.id = request_number++; + + if (req.id == 0) { + puts("get req"); + assertEquals("GET", req.method); + assertEquals("/hello", req.uri.path); + } + + if (req.id == 1) { + puts("post req"); + assertEquals("POST", req.method); + assertEquals("/quit", req.uri.path); + server.close(); + puts("server closed"); + } + + setTimeout(function () { + res.sendHeader(200, [["Content-Type", "text/plain"]]); + res.sendBody(req.uri.path); + res.finish(); + }, 1); + + }).listen(port); + + var c = new node.tcp.Connection(); + var req_sent = 0; + c.onConnect = function () { + puts("send get"); + c.send( "GET /hello HTTP/1.1\r\n\r\n" ); + req_sent += 1; + }; + var total = ""; + + c.onReceive = function (chunk) { + total += chunk.encodeUtf8(); + puts("total: " + JSON.stringify(total)); + + if ( req_sent == 1) { + puts("send post"); + c.send("POST /quit HTTP/1.1\r\n\r\n"); + c.close(); + req_sent += 1; + } + }; + + c.onDisconnect = function () { + puts("client disocnnected"); + + var hello = new RegExp("/hello"); + assertTrue(hello.exec(total) != null); + + var quit = new RegExp("/quit"); + assertTrue(quit.exec(total) != null); + }; + + c.connect(port); +} diff --git a/test/test-pingpong.js b/test/test-pingpong.js index 28724b7..79cc84c 100644 --- a/test/test-pingpong.js +++ b/test/test-pingpong.js @@ -68,4 +68,5 @@ function onLoad() { }; client.connect(port); + assertEquals("closed", client.readyState); } diff --git a/test_http.js b/test_http.js deleted file mode 100644 index 5e5da57..0000000 --- a/test_http.js +++ /dev/null @@ -1,8 +0,0 @@ -new node.http.Server(function (req, res) { - puts("got req to " + req.uri.path); - setTimeout(function () { - res.sendHeader(200, [["Content-Type", "text/plain"]]); - res.sendBody(JSON.stringify(req.uri)); - res.finish(); - }, 1); -}).listen(8000, "localhost"); -- 2.7.4