diff options
author | Luigi Pinca <luigipinca@gmail.com> | 2019-05-23 11:48:52 +0200 |
---|---|---|
committer | Luigi Pinca <luigipinca@gmail.com> | 2019-08-17 06:46:31 +0200 |
commit | c3b8e5014369561d86e32338f622034020c9c79f (patch) | |
tree | c8a86853a06d71d52a84198fae8597413ea31110 /test/parallel/test-tls-connect-allow-half-open-option.js | |
parent | f25bbf12556eb5478ea876db825c230d1b1c650c (diff) | |
download | android-node-v8-c3b8e5014369561d86e32338f622034020c9c79f.tar.gz android-node-v8-c3b8e5014369561d86e32338f622034020c9c79f.tar.bz2 android-node-v8-c3b8e5014369561d86e32338f622034020c9c79f.zip |
tls: allow client-side sockets to be half-opened
Make `tls.connect()` support an `allowHalfOpen` option which specifies
whether or not to allow the connection to be half-opened when the
`socket` option is not specified.
PR-URL: https://github.com/nodejs/node/pull/27836
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Ouyang Yadong <oyydoibh@gmail.com>
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Diffstat (limited to 'test/parallel/test-tls-connect-allow-half-open-option.js')
-rw-r--r-- | test/parallel/test-tls-connect-allow-half-open-option.js | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/test/parallel/test-tls-connect-allow-half-open-option.js b/test/parallel/test-tls-connect-allow-half-open-option.js new file mode 100644 index 0000000000..46b4eeab89 --- /dev/null +++ b/test/parallel/test-tls-connect-allow-half-open-option.js @@ -0,0 +1,73 @@ +'use strict'; + +const common = require('../common'); + +// This test verifies that `tls.connect()` honors the `allowHalfOpen` option. + +if (!common.hasCrypto) + common.skip('missing crypto'); + +const assert = require('assert'); +const fixtures = require('../common/fixtures'); +const tls = require('tls'); + +{ + const socket = tls.connect({ lookup() {} }); + assert.strictEqual(socket.allowHalfOpen, false); +} + +{ + const socket = tls.connect({ allowHalfOpen: false, lookup() {} }); + assert.strictEqual(socket.allowHalfOpen, false); +} + +const server = tls.createServer({ + key: fixtures.readKey('agent1-key.pem'), + cert: fixtures.readKey('agent1-cert.pem'), +}, common.mustCall((socket) => { + server.close(); + + let message = ''; + + socket.setEncoding('utf8'); + socket.on('data', (chunk) => { + message += chunk; + + if (message === 'Hello') { + socket.end(message); + message = ''; + } + }); + + socket.on('end', common.mustCall(() => { + assert.strictEqual(message, 'Bye'); + })); +})); + +server.listen(0, common.mustCall(() => { + const socket = tls.connect({ + port: server.address().port, + rejectUnauthorized: false, + allowHalfOpen: true, + }, common.mustCall(() => { + let message = ''; + + socket.on('data', (chunk) => { + message += chunk; + }); + + socket.on('end', common.mustCall(() => { + assert.strictEqual(message, 'Hello'); + + setTimeout(() => { + assert(socket.writable); + assert(socket.write('Bye')); + socket.end(); + }, 50); + })); + + socket.write('Hello'); + })); + + socket.setEncoding('utf8'); +})); |