diff options
author | Ben Noordhuis <info@bnoordhuis.nl> | 2016-05-09 16:35:20 +0200 |
---|---|---|
committer | Ben Noordhuis <info@bnoordhuis.nl> | 2016-05-28 22:49:36 +0200 |
commit | fb19b800b8fa1385e1e5b8d86bd03bf6e972348c (patch) | |
tree | e0b91ab679c3f958b74bb1883a2e62b8675eb496 /test | |
parent | 313ef544173965309a5b24e3bf3a7f57af397c01 (diff) | |
download | android-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.status | 7 | ||||
-rw-r--r-- | test/parallel/test-http-agent-getname.js | 6 | ||||
-rw-r--r-- | test/parallel/test-https-connect-address-family.js | 28 | ||||
-rw-r--r-- | test/parallel/test-tls-connect-address-family.js | 27 |
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(); + })); +}); |