test: test pipe API with raw net.Stream() object
authorBen Noordhuis <info@bnoordhuis.nl>
Thu, 21 Jul 2011 22:42:01 +0000 (00:42 +0200)
committerBen Noordhuis <info@bnoordhuis.nl>
Thu, 21 Jul 2011 22:54:50 +0000 (00:54 +0200)
Test case for #1379.

Makefile
test/simple/test-pipe-stream.js [new file with mode: 0644]

index a97cea6..22a34e7 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -167,6 +167,7 @@ UVTEST += simple/test-next-tick-ordering
 UVTEST += simple/test-next-tick-ordering2
 UVTEST += simple/test-next-tick-starvation
 UVTEST += simple/test-path
+UVTEST += simple/test-pipe-stream
 UVTEST += simple/test-pump-file2tcp
 UVTEST += simple/test-pump-file2tcp-noexist
 UVTEST += simple/test-punycode
diff --git a/test/simple/test-pipe-stream.js b/test/simple/test-pipe-stream.js
new file mode 100644 (file)
index 0000000..8ed87fd
--- /dev/null
@@ -0,0 +1,85 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+var common = require('../common');
+var assert = require('assert');
+var net = require('net');
+
+function test(clazz, cb) {
+  var have_ping = false;
+  var have_pong = false;
+
+  function check() {
+    assert.ok(have_ping);
+    assert.ok(have_pong);
+  }
+
+  function ping() {
+    var conn = new clazz();
+
+    conn.on('error', function(err) {
+      throw err;
+    });
+
+    conn.connect(common.PIPE, function() {
+      conn.write('PING', 'utf-8');
+    });
+
+    conn.on('data', function(data) {
+      assert.equal(data.toString(), 'PONG')
+      have_pong = true;
+      conn.destroy();
+    });
+  }
+
+  function pong(conn) {
+    conn.on('error', function(err) {
+      throw err;
+    });
+
+    conn.on('data', function(data) {
+      assert.equal(data.toString(), 'PING')
+      have_ping = true;
+      conn.write('PONG', 'utf-8');
+    });
+
+    conn.on('close', function() {
+      server.close();
+    });
+  }
+
+  var timeout = setTimeout(function() {
+    server.close();
+  }, 2000);
+
+  var server = net.Server();
+  server.listen(common.PIPE, ping);
+  server.on('connection', pong);
+  server.on('close', function() {
+    clearTimeout(timeout);
+    check();
+    cb && cb();
+  });
+}
+
+test(net.Stream, function() {
+  test(net.Socket);
+});
\ No newline at end of file