summaryrefslogtreecommitdiff
path: root/test/parallel/test-tls-handshake-error.js
diff options
context:
space:
mode:
authorMalte-Thorben Bruns <skenqbx@gmail.com>2015-05-22 21:12:59 +0200
committerFedor Indutny <fedor@indutny.com>2015-05-22 21:30:22 +0200
commit2a71f02988244b6299db8fe8ba3cc0491793acfc (patch)
treeab902f89347410a9b6e429db2827d5af00e61a9d /test/parallel/test-tls-handshake-error.js
parent2bb2f06b3e53ca44687afdaa9b833e0b6181ff76 (diff)
downloadandroid-node-v8-2a71f02988244b6299db8fe8ba3cc0491793acfc.tar.gz
android-node-v8-2a71f02988244b6299db8fe8ba3cc0491793acfc.tar.bz2
android-node-v8-2a71f02988244b6299db8fe8ba3cc0491793acfc.zip
tls: emit errors happening before handshake finish
This fixes a race condition introduced in 80342f6. `socket.destroy(err)` only emits the passed error when `socket._writableState.errorEmitted === false`, `ssl.onerror` sets `errorEmitted = true` just before calling `socket.destroy()`. See: https://github.com/nodejs/io.js/issues/1119 See: https://github.com/nodejs/io.js/issues/1711 PR-URL: https://github.com/nodejs/io.js/pull/1769 Reviewed-By: Fedor Indutny <fedor@indutny.com>
Diffstat (limited to 'test/parallel/test-tls-handshake-error.js')
-rw-r--r--test/parallel/test-tls-handshake-error.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/test/parallel/test-tls-handshake-error.js b/test/parallel/test-tls-handshake-error.js
new file mode 100644
index 0000000000..dbe91d0943
--- /dev/null
+++ b/test/parallel/test-tls-handshake-error.js
@@ -0,0 +1,46 @@
+'use strict';
+
+var assert = require('assert');
+var common = require('../common');
+
+if (!common.hasCrypto) {
+ console.log('1..0 # Skipped: missing crypto');
+ process.exit();
+}
+var tls = require('tls');
+
+var fs = require('fs');
+var net = require('net');
+
+var errorCount = 0;
+var closeCount = 0;
+
+var server = tls.createServer({
+ key: fs.readFileSync(common.fixturesDir + '/keys/agent1-key.pem'),
+ cert: fs.readFileSync(common.fixturesDir + '/keys/agent1-cert.pem'),
+ rejectUnauthorized: true
+}, function(c) {
+}).listen(common.PORT, function() {
+ var c = tls.connect({
+ port: common.PORT,
+ ciphers: 'RC4'
+ }, function() {
+ assert(false, 'should not be called');
+ });
+
+ c.on('error', function(err) {
+ errorCount++;
+ assert.notEqual(err.code, 'ECONNRESET');
+ });
+
+ c.on('close', function(err) {
+ if (err)
+ closeCount++;
+ server.close();
+ });
+});
+
+process.on('exit', function() {
+ assert.equal(errorCount, 1);
+ assert.equal(closeCount, 1);
+});