1'use strict'; 2const common = require('../common'); 3const assert = require('assert'); 4const http = require('http'); 5 6const baseOptions = { 7 method: 'GET', 8 port: undefined, 9 host: common.localhostIPv4, 10}; 11 12const failingAgentOptions = [ 13 true, 14 'agent', 15 {}, 16 1, 17 () => null, 18 Symbol(), 19]; 20 21const acceptableAgentOptions = [ 22 false, 23 undefined, 24 null, 25 new http.Agent(), 26]; 27 28const server = http.createServer((req, res) => { 29 res.end('hello'); 30}); 31 32let numberOfResponses = 0; 33 34function createRequest(agent) { 35 const options = Object.assign(baseOptions, { agent }); 36 const request = http.request(options); 37 request.end(); 38 request.on('response', common.mustCall(() => { 39 numberOfResponses++; 40 if (numberOfResponses === acceptableAgentOptions.length) { 41 server.close(); 42 } 43 })); 44} 45 46server.listen(0, baseOptions.host, common.mustCall(function() { 47 baseOptions.port = this.address().port; 48 49 failingAgentOptions.forEach((agent) => { 50 assert.throws( 51 () => createRequest(agent), 52 { 53 code: 'ERR_INVALID_ARG_TYPE', 54 name: 'TypeError', 55 message: 'The "options.agent" property must be one of Agent-like ' + 56 'Object, undefined, or false.' + 57 common.invalidArgTypeHelper(agent) 58 } 59 ); 60 }); 61 62 acceptableAgentOptions.forEach((agent) => { 63 createRequest(agent); 64 }); 65})); 66 67process.on('exit', () => { 68 assert.strictEqual(numberOfResponses, acceptableAgentOptions.length); 69}); 70