Browse Source

Debugging http. Add simple test. (Does not pass.)

v0.7.4-release
Ryan 16 years ago
parent
commit
536eceaa2d
  1. 14
      src/http.js
  2. 5
      src/net.cc
  3. 67
      test/test-http.js
  4. 1
      test/test-pingpong.js
  5. 8
      test_http.js

14
src/http.js

@ -250,6 +250,7 @@ node.http.ServerResponse = function (connection, responses) {
node.http.Server = function (RequestHandler, options) { node.http.Server = function (RequestHandler, options) {
if (!(this instanceof node.http.Server)) if (!(this instanceof node.http.Server))
throw Error("Constructor called as a function"); throw Error("Constructor called as a function");
var server = this;
function ConnectionHandler (connection) { function ConnectionHandler (connection) {
// An array of responses for each connection. In pipelined connections // 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; res.should_keep_alive = this.should_keep_alive;
return RequestHandler(req, res); return RequestHandler.apply(server, [req, res]);
}; };
this.onBody = function (chunk) { this.onBody = function (chunk) {
@ -329,8 +330,8 @@ node.http.Server = function (RequestHandler, options) {
new node.http.LowLevelServer(ConnectionHandler, options); new node.http.LowLevelServer(ConnectionHandler, options);
}; };
node.http.Client = function (port, host, options) { node.http.Client = function (port, host) {
var connection = new node.http.LowLevelClient(options); var connection = new node.http.LowLevelClient();
var requests = []; var requests = [];
function ClientRequest (method, uri, header_lines) { function ClientRequest (method, uri, header_lines) {
@ -440,15 +441,16 @@ node.http.Client = function (port, host, options) {
} }
connection.onConnect = function () { connection.onConnect = function () {
puts("HTTP CLIENT: connected"); //node.debug("HTTP CLIENT: connected");
requests[0].flush(); requests[0].flush();
}; };
connection.onDisconnect = function () { connection.onDisconnect = function () {
//node.debug("HTTP CLIENT: disconnect");
// If there are more requests to handle, reconnect. // If there are more requests to handle, reconnect.
if (requests.length > 0) { if (requests.length > 0) {
puts("HTTP CLIENT: reconnecting"); //node.debug("HTTP CLIENT: reconnecting");
connection.connect(port, host); this.connect(port, host);
} }
}; };

5
src/net.cc

@ -67,12 +67,12 @@ Connection::Initialize (v8::Handle<v8::Object> target)
NODE_SET_PROTOTYPE_METHOD(constructor_template, "fullClose", FullClose); NODE_SET_PROTOTYPE_METHOD(constructor_template, "fullClose", FullClose);
NODE_SET_PROTOTYPE_METHOD(constructor_template, "forceClose", ForceClose); NODE_SET_PROTOTYPE_METHOD(constructor_template, "forceClose", ForceClose);
constructor_template->PrototypeTemplate()->SetAccessor( constructor_template->InstanceTemplate()->SetAccessor(
ENCODING_SYMBOL, ENCODING_SYMBOL,
EncodingGetter, EncodingGetter,
EncodingSetter); EncodingSetter);
constructor_template->PrototypeTemplate()->SetAccessor( constructor_template->InstanceTemplate()->SetAccessor(
READY_STATE_SYMBOL, READY_STATE_SYMBOL,
ReadyStateGetter); ReadyStateGetter);
@ -217,7 +217,6 @@ Connection::Connect (const Arguments& args)
); );
connection->Attach(); connection->Attach();
return Undefined(); return Undefined();
} }

67
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);
}

1
test/test-pingpong.js

@ -68,4 +68,5 @@ function onLoad() {
}; };
client.connect(port); client.connect(port);
assertEquals("closed", client.readyState);
} }

8
test_http.js

@ -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");
Loading…
Cancel
Save