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

This commit is contained in:
Ryan 2009-05-19 14:49:28 +02:00
Родитель 3700568322
Коммит 536eceaa2d
5 изменённых файлов: 79 добавлений и 18 удалений

Просмотреть файл

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

Просмотреть файл

@ -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<v8::Object> 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();
}

67
test/test-http.js Normal file
Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

@ -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");