mirror of https://github.com/lukechilds/node.git
Micheil Smith
15 years ago
committed by
Ryan Dahl
2 changed files with 159 additions and 5 deletions
@ -0,0 +1,151 @@ |
|||
require("../common"); |
|||
|
|||
var sys = require("sys"); |
|||
var net = require("net"); |
|||
var http = require("http"); |
|||
|
|||
|
|||
var requests_recv = 0; |
|||
var requests_sent = 0; |
|||
|
|||
function createTestServer(){ |
|||
return new testServer(); |
|||
}; |
|||
|
|||
function testServer(){ |
|||
var server = this; |
|||
http.Server.call(server, function(){}); |
|||
|
|||
server.addListener("connection", function(){ |
|||
requests_recv++; |
|||
}); |
|||
|
|||
server.addListener("request", function(req, res){ |
|||
res.writeHead(200, {"Content-Type": "text/plain"}); |
|||
res.write("okay"); |
|||
res.end(); |
|||
}); |
|||
|
|||
server.addListener("upgrade", function(req, socket, upgradeHead){ |
|||
socket.write([ |
|||
"HTTP/1.1 101 Web Socket Protocol Handshake", |
|||
"Upgrade: WebSocket", |
|||
"Connection: Upgrade", |
|||
"\r\n" |
|||
].join("\r\n"), "utf8"); |
|||
|
|||
socket.ondata = function(d, start, end){ |
|||
var data = d.toString('utf8', start, end); |
|||
if(data == "kill"){ |
|||
socket.end(); |
|||
} else { |
|||
socket.write(data, "utf8"); |
|||
} |
|||
}; |
|||
}); |
|||
}; |
|||
|
|||
sys.inherits(testServer, http.Server); |
|||
|
|||
|
|||
function testClient(){ |
|||
var conn = net.createConnection(PORT); |
|||
conn.setEncoding("utf8"); |
|||
return conn; |
|||
} |
|||
|
|||
function writeReq(socket, data, encoding){ |
|||
requests_sent++; |
|||
socket.write(data); |
|||
}; |
|||
|
|||
|
|||
/*----------------------------------------------- |
|||
connection: Upgrade with listener |
|||
-----------------------------------------------*/ |
|||
function test_upgrade_with_listener(_server){ |
|||
var conn = new testClient(); |
|||
var state = 0; |
|||
|
|||
conn.addListener("connect", function () { |
|||
writeReq(conn, "GET / HTTP/1.1\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\n\r\n"); |
|||
}); |
|||
|
|||
conn.addListener("data", function(data){ |
|||
state++; |
|||
|
|||
if(state == 1){ |
|||
assert.equal("HTTP/1.1 101", data.substr(0, 12)); |
|||
conn.write("test", "utf8"); |
|||
} else if(state == 2) { |
|||
assert.equal("test", data); |
|||
conn.write("kill", "utf8"); |
|||
} |
|||
}); |
|||
|
|||
conn.addListener("end", function(){ |
|||
assert.equal(2, state); |
|||
conn.end(); |
|||
_server.removeAllListeners("upgrade"); |
|||
test_upgrade_no_listener(); |
|||
}); |
|||
}; |
|||
|
|||
/*----------------------------------------------- |
|||
connection: Upgrade, no listener |
|||
-----------------------------------------------*/ |
|||
var test_upgrade_no_listener_ended = false; |
|||
|
|||
function test_upgrade_no_listener(){ |
|||
var conn = new testClient(); |
|||
|
|||
conn.addListener("connect", function () { |
|||
writeReq(conn, "GET / HTTP/1.1\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\n\r\n"); |
|||
}); |
|||
|
|||
conn.addListener("end", function(){ |
|||
test_upgrade_no_listener_ended = true; |
|||
conn.end(); |
|||
}); |
|||
|
|||
conn.addListener("close", function(){ |
|||
test_standard_http(); |
|||
}); |
|||
}; |
|||
|
|||
/*----------------------------------------------- |
|||
connection: normal |
|||
-----------------------------------------------*/ |
|||
function test_standard_http(){ |
|||
var conn = new testClient(); |
|||
conn.addListener("connect", function () { |
|||
writeReq(conn, "GET / HTTP/1.1\r\n\r\n"); |
|||
}); |
|||
|
|||
conn.addListener("data", function(data){ |
|||
assert.equal("HTTP/1.1 200", data.substr(0, 12)); |
|||
conn.end(); |
|||
}); |
|||
|
|||
conn.addListener("close", function(){ |
|||
server.close(); |
|||
}); |
|||
}; |
|||
|
|||
|
|||
var server = createTestServer(); |
|||
server.addListener("listening", function(){ |
|||
// All tests get chained after this:
|
|||
test_upgrade_with_listener(server); |
|||
}); |
|||
server.listen(PORT); |
|||
|
|||
|
|||
/*----------------------------------------------- |
|||
Fin. |
|||
-----------------------------------------------*/ |
|||
process.addListener("exit", function () { |
|||
assert.equal(3, requests_recv); |
|||
assert.equal(3, requests_sent); |
|||
assert.ok(test_upgrade_no_listener_ended); |
|||
}); |
Loading…
Reference in new issue