summaryrefslogtreecommitdiff
path: root/test/parallel/test-http-client-read-in-error.js
blob: 5e38e49c1f6fdefd489adf500834f806a026a1d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
'use strict';
const common = require('../common');
const net = require('net');
const http = require('http');

class Agent extends http.Agent {
  createConnection() {
    const socket = new net.Socket();

    socket.on('error', function() {
      socket.push('HTTP/1.1 200\r\n\r\n');
    });

    let onNewListener;
    socket.on('newListener', onNewListener = (name) => {
      if (name !== 'error')
        return;
      socket.removeListener('newListener', onNewListener);

      // Let other listeners to be set up too
      process.nextTick(() => {
        this.breakSocket(socket);
      });
    });

    return socket;
  }

  breakSocket(socket) {
    socket.emit('error', new Error('Intentional error'));
  }
}

const agent = new Agent();

http.request({
  agent
}).once('error', function() {
  console.log('ignore');
  this.on('data', common.mustNotCall());
});