summaryrefslogtreecommitdiff
path: root/test/parallel/test-tls-js-stream.js
diff options
context:
space:
mode:
authorFedor Indutny <fedor@indutny.com>2015-02-23 23:09:44 +0300
committerFedor Indutny <fedor@indutny.com>2015-02-24 22:38:21 +0300
commit1738c7783526868d86cb213414cb4d40c5a89662 (patch)
tree956d199d9e1b7f793bfe60db58bef27583ca1ebb /test/parallel/test-tls-js-stream.js
parente00c938d246c29897344be3b3060533bb4ad7806 (diff)
downloadandroid-node-v8-1738c7783526868d86cb213414cb4d40c5a89662.tar.gz
android-node-v8-1738c7783526868d86cb213414cb4d40c5a89662.tar.bz2
android-node-v8-1738c7783526868d86cb213414cb4d40c5a89662.zip
streams: introduce StreamWrap and JSStream
Introduce a way to wrap plain-js `stream.Duplex` streams into C++ StreamBase's child class. With such method at hand it is now possible to pass `stream.Duplex` instance as a `socket` parameter to `tls.connect()`. PR-URL: https://github.com/iojs/io.js/pull/926 Reviewed-By: Chris Dickinson <christopher.s.dickinson@gmail.com>
Diffstat (limited to 'test/parallel/test-tls-js-stream.js')
-rw-r--r--test/parallel/test-tls-js-stream.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/test/parallel/test-tls-js-stream.js b/test/parallel/test-tls-js-stream.js
new file mode 100644
index 0000000000..7caa7e3f19
--- /dev/null
+++ b/test/parallel/test-tls-js-stream.js
@@ -0,0 +1,69 @@
+var assert = require('assert');
+var stream = require('stream');
+var tls = require('tls');
+var fs = require('fs');
+var net = require('net');
+
+var common = require('../common');
+
+var connected = {
+ client: 0,
+ server: 0
+};
+
+var server = tls.createServer({
+ key: fs.readFileSync(common.fixturesDir + '/keys/agent1-key.pem'),
+ cert: fs.readFileSync(common.fixturesDir + '/keys/agent1-cert.pem')
+}, function(c) {
+ console.log('new client');
+ connected.server++;
+ c.end('ohai');
+}).listen(common.PORT, function() {
+ var raw = net.connect(common.PORT);
+
+ var pending = false;
+ raw.on('readable', function() {
+ if (pending)
+ p._read();
+ });
+
+ var p = new stream.Duplex({
+ read: function read() {
+ pending = false;
+
+ var chunk = raw.read();
+ if (chunk) {
+ console.log('read', chunk);
+ this.push(chunk);
+ } else {
+ pending = true;
+ }
+ },
+ write: function write(data, enc, cb) {
+ console.log('write', data, enc);
+ raw.write(data, enc, cb);
+ }
+ });
+
+ var socket = tls.connect({
+ socket: p,
+ rejectUnauthorized: false
+ }, function() {
+ console.log('client secure');
+
+ connected.client++;
+
+ socket.end('hello');
+ socket.resume();
+ });
+
+ socket.once('close', function() {
+ console.log('client close');
+ server.close();
+ });
+});
+
+process.once('exit', function() {
+ assert.equal(connected.client, 1);
+ assert.equal(connected.server, 1);
+});