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