summaryrefslogtreecommitdiff
path: root/test/pummel/test-net-pingpong.js
diff options
context:
space:
mode:
authorMicheil Smith <micheil@brandedcode.com>2010-06-18 10:34:56 -0700
committerRyan Dahl <ry@tinyclouds.org>2010-06-18 10:34:56 -0700
commite0d30b545a737c43097f96446d82374ab2fd1e9a (patch)
treebfe1c66bc6a1b66e001d6241c7efd4d26fb8b1e4 /test/pummel/test-net-pingpong.js
parent3f48276bf9e36d6af5760aeb4fbd1123f6c4f207 (diff)
downloadandroid-node-v8-e0d30b545a737c43097f96446d82374ab2fd1e9a.tar.gz
android-node-v8-e0d30b545a737c43097f96446d82374ab2fd1e9a.tar.bz2
android-node-v8-e0d30b545a737c43097f96446d82374ab2fd1e9a.zip
Renaming tcp tests to net tests
Diffstat (limited to 'test/pummel/test-net-pingpong.js')
-rw-r--r--test/pummel/test-net-pingpong.js96
1 files changed, 96 insertions, 0 deletions
diff --git a/test/pummel/test-net-pingpong.js b/test/pummel/test-net-pingpong.js
new file mode 100644
index 0000000000..d96e398aee
--- /dev/null
+++ b/test/pummel/test-net-pingpong.js
@@ -0,0 +1,96 @@
+require("../common");
+net = require("net");
+
+var tests_run = 0;
+
+function pingPongTest (port, host, on_complete) {
+ var N = 1000;
+ var count = 0;
+ var sent_final_ping = false;
+
+ var server = net.createServer(function (socket) {
+ assert.equal(true, socket.remoteAddress !== null);
+ assert.equal(true, socket.remoteAddress !== undefined);
+ if (host === "127.0.0.1" || host === "localhost" || !host) {
+ assert.equal(socket.remoteAddress, "127.0.0.1");
+ } else {
+ puts('host = ' + host + ', remoteAddress = ' + socket.remoteAddress);
+ assert.equal(socket.remoteAddress, "::1");
+ }
+
+ socket.setEncoding("utf8");
+ socket.setNoDelay();
+ socket.timeout = 0;
+
+ socket.addListener("data", function (data) {
+ puts("server got: " + JSON.stringify(data));
+ assert.equal("open", socket.readyState);
+ assert.equal(true, count <= N);
+ if (/PING/.exec(data)) {
+ socket.write("PONG");
+ }
+ });
+
+ socket.addListener("end", function () {
+ assert.equal("writeOnly", socket.readyState);
+ socket.end();
+ });
+
+ socket.addListener("close", function (had_error) {
+ assert.equal(false, had_error);
+ assert.equal("closed", socket.readyState);
+ socket.server.close();
+ });
+ });
+ server.listen(port, host);
+
+ var client = net.createConnection(port, host);
+
+ client.setEncoding("utf8");
+
+ client.addListener("connect", function () {
+ assert.equal("open", client.readyState);
+ client.write("PING");
+ });
+
+ client.addListener("data", function (data) {
+ puts('client got: ' + data);
+
+ assert.equal("PONG", data);
+ count += 1;
+
+ if (sent_final_ping) {
+ assert.equal("readOnly", client.readyState);
+ return;
+ } else {
+ assert.equal("open", client.readyState);
+ }
+
+ if (count < N) {
+ client.write("PING");
+ } else {
+ sent_final_ping = true;
+ client.write("PING");
+ client.end();
+ }
+ });
+
+ client.addListener("close", function () {
+ assert.equal(N+1, count);
+ assert.equal(true, sent_final_ping);
+ if (on_complete) on_complete();
+ tests_run += 1;
+ });
+}
+
+/* All are run at once, so run on different ports */
+pingPongTest(PORT, "localhost");
+pingPongTest(PORT+1, null);
+
+// This IPv6 isn't working on Solaris
+var solaris = /sunos/i.test(process.platform);
+if (!solaris) pingPongTest(PORT+2, "::1");
+
+process.addListener("exit", function () {
+ assert.equal(solaris ? 2 : 3, tests_run);
+});