summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2016-05-09 16:35:20 +0200
committerBen Noordhuis <info@bnoordhuis.nl>2016-05-28 22:49:36 +0200
commitfb19b800b8fa1385e1e5b8d86bd03bf6e972348c (patch)
treee0b91ab679c3f958b74bb1883a2e62b8675eb496 /test
parent313ef544173965309a5b24e3bf3a7f57af397c01 (diff)
downloadandroid-node-v8-fb19b800b8fa1385e1e5b8d86bd03bf6e972348c.tar.gz
android-node-v8-fb19b800b8fa1385e1e5b8d86bd03bf6e972348c.tar.bz2
android-node-v8-fb19b800b8fa1385e1e5b8d86bd03bf6e972348c.zip
tls,https: respect address family when connecting
Respect the `{ family: 6 }` address family property when connecting to a remote peer over TLS. Fixes: https://github.com/nodejs/node/issues/4139 Fixes: https://github.com/nodejs/node/issues/6440 PR-URL: https://github.com/nodejs/node/pull/6654 Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/parallel.status7
-rw-r--r--test/parallel/test-http-agent-getname.js6
-rw-r--r--test/parallel/test-https-connect-address-family.js28
-rw-r--r--test/parallel/test-tls-connect-address-family.js27
4 files changed, 68 insertions, 0 deletions
diff --git a/test/parallel/parallel.status b/test/parallel/parallel.status
index 792f036ec0..e3a8e345f7 100644
--- a/test/parallel/parallel.status
+++ b/test/parallel/parallel.status
@@ -12,6 +12,13 @@ test-tick-processor : PASS,FLAKY
[$system==linux]
test-tick-processor : PASS,FLAKY
+# Flaky until https://github.com/nodejs/build/issues/415 is resolved.
+# On some of the buildbots, AAAA queries for localhost don't resolve
+# to an address and neither do any of the alternatives from the
+# localIPv6Hosts list from test/common.js.
+test-https-connect-address-family : PASS,FLAKY
+test-tls-connect-address-family : PASS,FLAKY
+
[$system==macos]
[$system==solaris] # Also applies to SmartOS
diff --git a/test/parallel/test-http-agent-getname.js b/test/parallel/test-http-agent-getname.js
index 1b80b5c36e..5f5c479dcf 100644
--- a/test/parallel/test-http-agent-getname.js
+++ b/test/parallel/test-http-agent-getname.js
@@ -30,3 +30,9 @@ assert.equal(
}),
'0.0.0.0:80:192.168.1.1'
);
+
+for (const family of [0, null, undefined, 'bogus'])
+ assert.strictEqual(agent.getName({ family }), 'localhost::');
+
+for (const family of [4, 6])
+ assert.strictEqual(agent.getName({ family }), 'localhost:::' + family);
diff --git a/test/parallel/test-https-connect-address-family.js b/test/parallel/test-https-connect-address-family.js
new file mode 100644
index 0000000000..b2f3c233cf
--- /dev/null
+++ b/test/parallel/test-https-connect-address-family.js
@@ -0,0 +1,28 @@
+'use strict';
+const common = require('../common');
+const assert = require('assert');
+const https = require('https');
+
+if (!common.hasIPv6) {
+ common.skip('no IPv6 support');
+ return;
+}
+
+const ciphers = 'AECDH-NULL-SHA';
+https.createServer({ ciphers }, function(req, res) {
+ this.close();
+ res.end();
+}).listen(common.PORT, '::1', function() {
+ const options = {
+ host: 'localhost',
+ port: common.PORT,
+ family: 6,
+ ciphers: ciphers,
+ rejectUnauthorized: false,
+ };
+ // Will fail with ECONNREFUSED if the address family is not honored.
+ https.get(options, common.mustCall(function() {
+ assert.strictEqual('::1', this.socket.remoteAddress);
+ this.destroy();
+ }));
+});
diff --git a/test/parallel/test-tls-connect-address-family.js b/test/parallel/test-tls-connect-address-family.js
new file mode 100644
index 0000000000..665a71dfe6
--- /dev/null
+++ b/test/parallel/test-tls-connect-address-family.js
@@ -0,0 +1,27 @@
+'use strict';
+const common = require('../common');
+const assert = require('assert');
+const tls = require('tls');
+
+if (!common.hasIPv6) {
+ common.skip('no IPv6 support');
+ return;
+}
+
+const ciphers = 'AECDH-NULL-SHA';
+tls.createServer({ ciphers }, function() {
+ this.close();
+}).listen(common.PORT, '::1', function() {
+ const options = {
+ host: 'localhost',
+ port: common.PORT,
+ family: 6,
+ ciphers: ciphers,
+ rejectUnauthorized: false,
+ };
+ // Will fail with ECONNREFUSED if the address family is not honored.
+ tls.connect(options).once('secureConnect', common.mustCall(function() {
+ assert.strictEqual('::1', this.remoteAddress);
+ this.destroy();
+ }));
+});