diff options
author | brad-decker <bhdecker84@gmail.com> | 2016-12-06 20:48:55 -0600 |
---|---|---|
committer | Italo A. Casas <me@italoacasas.com> | 2017-01-18 10:24:28 -0500 |
commit | fc7025c9c011f266c6bd73e1fb634eb5f519c5cb (patch) | |
tree | f857537d2a4191d2a6db9de8b923e2dbd11f7ada /test/parallel/test-http-client-reject-unexpected-agent.js | |
parent | 521767c88605cb6481ea98f396924e55f9dd22f4 (diff) | |
download | node-new-fc7025c9c011f266c6bd73e1fb634eb5f519c5cb.tar.gz |
http: throw an error for unexpected agent values
As per https://github.com/nodejs/node/issues/9069
unexpected things can happen when supplying an
unexpected value to agent. Beings as the docs
clearly state the expected values, this throws
an error on an unexpected value.
PR-URL: https://github.com/nodejs/node/pull/10053
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Diffstat (limited to 'test/parallel/test-http-client-reject-unexpected-agent.js')
-rw-r--r-- | test/parallel/test-http-client-reject-unexpected-agent.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/test/parallel/test-http-client-reject-unexpected-agent.js b/test/parallel/test-http-client-reject-unexpected-agent.js new file mode 100644 index 0000000000..559166ec42 --- /dev/null +++ b/test/parallel/test-http-client-reject-unexpected-agent.js @@ -0,0 +1,64 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const http = require('http'); + +const baseOptions = { + method: 'GET', + port: undefined, + host: common.localhostIPv4, +}; + +const failingAgentOptions = [ + true, + 'agent', + {}, + 1, + () => null, + Symbol(), +]; + +const acceptableAgentOptions = [ + false, + undefined, + null, + new http.Agent(), +]; + +const server = http.createServer((req, res) => { + res.end('hello'); +}); + +let numberOfResponses = 0; + +function createRequest(agent) { + const options = Object.assign(baseOptions, {agent}); + const request = http.request(options); + request.end(); + request.on('response', common.mustCall(() => { + numberOfResponses++; + if (numberOfResponses === acceptableAgentOptions.length) { + server.close(); + } + })); +} + +server.listen(0, baseOptions.host, common.mustCall(function() { + baseOptions.port = this.address().port; + + failingAgentOptions.forEach((agent) => { + assert.throws( + () => createRequest(agent), + /^TypeError: Agent option must be an instance of http.Agent/, + `Expected typeof agent: ${typeof agent} to be rejected` + ); + }); + + acceptableAgentOptions.forEach((agent) => { + assert.doesNotThrow(() => createRequest(agent)); + }); +})); + +process.on('exit', () => { + assert.strictEqual(numberOfResponses, acceptableAgentOptions.length); +}); |