• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2
3const common = require('../common');
4const assert = require('assert');
5const events = require('events');
6const { createServer, request } = require('http');
7
8events.captureRejections = true;
9
10{
11  const server = createServer(common.mustCall((req, res) => {
12    const _err = new Error('kaboom');
13    res.on('drain', common.mustCall(async () => {
14      throw _err;
15    }));
16
17    res.socket.on('error', common.mustCall((err) => {
18      assert.strictEqual(err, _err);
19    }));
20
21    // Write until there is space in the buffer
22    while (res.write('hello')) {}
23  }));
24
25  server.listen(0, common.mustCall(() => {
26    const req = request({
27      method: 'GET',
28      host: server.address().host,
29      port: server.address().port
30    });
31
32    req.end();
33
34    req.on('response', common.mustCall((res) => {
35      res.on('aborted', common.mustCall());
36      res.resume();
37      server.close();
38    }));
39  }));
40}
41
42{
43  let _res;
44  let shouldEnd = false;
45  // Not using mustCall here, because it is OS-dependant.
46  const server = createServer((req, res) => {
47    // So that we cleanly stop
48    _res = res;
49
50    if (shouldEnd) {
51      res.end();
52    }
53  });
54
55  server.listen(0, common.mustCall(() => {
56    const _err = new Error('kaboom');
57
58    const req = request({
59      method: 'POST',
60      host: server.address().host,
61      port: server.address().port
62    });
63
64    req.on('response', common.mustNotCall((res) => {
65      // So that we cleanly stop
66      res.resume();
67      server.close();
68    }));
69
70    req.on('error', common.mustCall((err) => {
71      server.close();
72      // On some variants of Windows, this can happen before
73      // the server has received the request.
74      if (_res) {
75        _res.end();
76      } else {
77        shouldEnd = true;
78      }
79      assert.strictEqual(err, _err);
80    }));
81
82    req.on('drain', common.mustCall(async () => {
83      throw _err;
84    }));
85
86    // Write until there is space in the buffer
87    while (req.write('hello')) {}
88  }));
89}
90