diff options
author | Fedor Indutny <fedor@indutny.com> | 2015-02-23 23:09:44 +0300 |
---|---|---|
committer | Fedor Indutny <fedor@indutny.com> | 2015-02-24 22:38:21 +0300 |
commit | 1738c7783526868d86cb213414cb4d40c5a89662 (patch) | |
tree | 956d199d9e1b7f793bfe60db58bef27583ca1ebb /test/parallel/test-tls-js-stream.js | |
parent | e00c938d246c29897344be3b3060533bb4ad7806 (diff) | |
download | android-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.js | 69 |
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); +}); |