mirror of
https://github.com/nodejs/node.git
synced 2024-11-29 23:16:30 +01:00
8185e1fd25
include() should not be used by libraries because it will pollute the global namespace. To discourage this behavior and bring Node more in-line with the current CommonJS module system, include() is removed. Small scripts like unit tests often times do want to pollute the global namespace for ease. To avoid the boiler plate code of var x = require("/x.js"); var foo = x.foo; var bar = x.bar; The function node.mixin() is stolen from jQuery's jQuery.extend. So that it can be written: node.mixin(require("/x.js")); Reference: http://docs.jquery.com/Utilities/jQuery.extend http://groups.google.com/group/nodejs/browse_thread/thread/f9ac83e5c11e7e87
91 lines
2.1 KiB
JavaScript
91 lines
2.1 KiB
JavaScript
node.mixin(require("common.js"));
|
|
tcp = require("/tcp.js");
|
|
|
|
|
|
var tests_run = 0;
|
|
|
|
function pingPongTest (port, host, on_complete) {
|
|
var N = 1000;
|
|
var count = 0;
|
|
var sent_final_ping = false;
|
|
|
|
var server = tcp.createServer(function (socket) {
|
|
assertTrue(socket.remoteAddress !== null);
|
|
assertTrue(socket.remoteAddress !== undefined);
|
|
if (host === "127.0.0.1")
|
|
assertEquals(socket.remoteAddress, "127.0.0.1");
|
|
else if (host == null)
|
|
assertEquals(socket.remoteAddress, "127.0.0.1");
|
|
|
|
socket.setEncoding("utf8");
|
|
socket.setNoDelay();
|
|
socket.timeout = 0;
|
|
|
|
socket.addListener("receive", function (data) {
|
|
puts("server got: " + JSON.stringify(data));
|
|
assertEquals("open", socket.readyState);
|
|
assertTrue(count <= N);
|
|
if (/PING/.exec(data)) {
|
|
socket.send("PONG");
|
|
}
|
|
});
|
|
|
|
socket.addListener("eof", function () {
|
|
assertEquals("writeOnly", socket.readyState);
|
|
socket.close();
|
|
});
|
|
|
|
socket.addListener("close", function (had_error) {
|
|
assertFalse(had_error);
|
|
assertEquals("closed", socket.readyState);
|
|
socket.server.close();
|
|
});
|
|
});
|
|
server.listen(port, host);
|
|
|
|
var client = tcp.createConnection(port, host);
|
|
|
|
client.setEncoding("utf8");
|
|
|
|
client.addListener("connect", function () {
|
|
assertEquals("open", client.readyState);
|
|
client.send("PING");
|
|
});
|
|
|
|
client.addListener("receive", function (data) {
|
|
assertEquals("PONG", data);
|
|
count += 1;
|
|
|
|
if (sent_final_ping) {
|
|
assertEquals("readOnly", client.readyState);
|
|
return;
|
|
} else {
|
|
assertEquals("open", client.readyState);
|
|
}
|
|
|
|
if (count < N) {
|
|
client.send("PING");
|
|
} else {
|
|
sent_final_ping = true;
|
|
client.send("PING");
|
|
client.close();
|
|
}
|
|
});
|
|
|
|
client.addListener("close", function () {
|
|
assertEquals(N+1, count);
|
|
assertTrue(sent_final_ping);
|
|
if (on_complete) on_complete();
|
|
tests_run += 1;
|
|
});
|
|
}
|
|
|
|
/* All are run at once, so run on different ports */
|
|
pingPongTest(20989, "localhost");
|
|
pingPongTest(20988, null);
|
|
pingPongTest(20997, "::1");
|
|
|
|
process.addListener("exit", function () {
|
|
assertEquals(3, tests_run);
|
|
});
|