1'use strict'; 2 3/** 4 * This test covers http.Server({ IncomingMessage }) option: 5 * With IncomingMessage option the server should use 6 * the new class for creating req Object instead of the default 7 * http.IncomingMessage. 8 */ 9const common = require('../common'); 10const fixtures = require('../common/fixtures'); 11 12if (!common.hasCrypto) 13 common.skip('missing crypto'); 14 15const assert = require('assert'); 16const http = require('http'); 17const https = require('https'); 18 19class MyIncomingMessage extends http.IncomingMessage { 20 getUserAgent() { 21 return this.headers['user-agent'] || 'unknown'; 22 } 23} 24 25const server = https.createServer({ 26 key: fixtures.readKey('agent1-key.pem'), 27 cert: fixtures.readKey('agent1-cert.pem'), 28 ca: fixtures.readKey('ca1-cert.pem'), 29 IncomingMessage: MyIncomingMessage 30}, common.mustCall(function(req, res) { 31 assert.strictEqual(req.getUserAgent(), 'node-test'); 32 res.statusCode = 200; 33 res.end(); 34})); 35server.listen(); 36 37server.on('listening', function makeRequest() { 38 https.get({ 39 port: this.address().port, 40 rejectUnauthorized: false, 41 headers: { 42 'User-Agent': 'node-test' 43 } 44 }, (res) => { 45 assert.strictEqual(res.statusCode, 200); 46 res.on('end', () => { 47 server.close(); 48 }); 49 res.resume(); 50 }); 51}); 52