mirror of https://github.com/lukechilds/node.git
Browse Source
evnet wasn't properly closing sockets if they didn't have data to write.v0.7.4-release
Ryan
16 years ago
2 changed files with 93 additions and 0 deletions
@ -0,0 +1,92 @@ |
|||||
|
include("mjsunit.js"); |
||||
|
|
||||
|
|
||||
|
var tests_run = 0; |
||||
|
|
||||
|
function pingPongTest (port, host, on_complete) { |
||||
|
var N = 100; |
||||
|
var DELAY = 1; |
||||
|
var count = 0; |
||||
|
var client_closed = false; |
||||
|
|
||||
|
var server = node.tcp.createServer(function (socket) { |
||||
|
socket.setEncoding("utf8"); |
||||
|
|
||||
|
socket.addListener("receive", function (data) { |
||||
|
puts(data); |
||||
|
assertEquals("PING", data); |
||||
|
assertEquals("open", socket.readyState); |
||||
|
assertTrue(count <= N); |
||||
|
setTimeout(function () { |
||||
|
assertEquals("open", socket.readyState); |
||||
|
socket.send("PONG"); |
||||
|
}, DELAY); |
||||
|
}); |
||||
|
|
||||
|
socket.addListener("timeout", function () { |
||||
|
node.debug("server-side timeout!!"); |
||||
|
assertFalse(true); |
||||
|
}); |
||||
|
|
||||
|
socket.addListener("eof", function () { |
||||
|
puts("server-side socket EOF"); |
||||
|
assertEquals("writeOnly", socket.readyState); |
||||
|
socket.close(); |
||||
|
}); |
||||
|
|
||||
|
socket.addListener("disconnect", function (had_error) { |
||||
|
puts("server-side socket disconnect"); |
||||
|
assertFalse(had_error); |
||||
|
assertEquals("closed", socket.readyState); |
||||
|
socket.server.close(); |
||||
|
}); |
||||
|
}); |
||||
|
server.listen(port, host); |
||||
|
|
||||
|
var client = node.tcp.createConnection(port, host); |
||||
|
|
||||
|
client.setEncoding("utf8"); |
||||
|
|
||||
|
client.addListener("connect", function () { |
||||
|
assertEquals("open", client.readyState); |
||||
|
client.send("PING"); |
||||
|
}); |
||||
|
|
||||
|
client.addListener("receive", function (data) { |
||||
|
puts(data); |
||||
|
assertEquals("PONG", data); |
||||
|
assertEquals("open", client.readyState); |
||||
|
|
||||
|
setTimeout(function () { |
||||
|
assertEquals("open", client.readyState); |
||||
|
if (count++ < N) { |
||||
|
client.send("PING"); |
||||
|
} else { |
||||
|
puts("closing client"); |
||||
|
client.close(); |
||||
|
client_closed = true; |
||||
|
} |
||||
|
}, DELAY); |
||||
|
}); |
||||
|
|
||||
|
client.addListener("timeout", function () { |
||||
|
node.debug("client-side timeout!!"); |
||||
|
assertFalse(true); |
||||
|
}); |
||||
|
|
||||
|
client.addListener("disconnect", function () { |
||||
|
puts("client disconnect"); |
||||
|
assertEquals(N+1, count); |
||||
|
assertTrue(client_closed); |
||||
|
if (on_complete) on_complete(); |
||||
|
tests_run += 1; |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
function onLoad () { |
||||
|
pingPongTest(21988); |
||||
|
} |
||||
|
|
||||
|
function onExit () { |
||||
|
assertEquals(1, tests_run); |
||||
|
} |
Loading…
Reference in new issue