• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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