summaryrefslogtreecommitdiff
path: root/test/parallel/test-http-upgrade-reconsume-stream.js
blob: e712ea647b3ad9026f6c78f84efcfc190bec4ae5 (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
'use strict';
const common = require('../common');
if (!common.hasCrypto)
  common.skip('missing crypto');

const tls = require('tls');
const http = require('http');

// Tests that, after the HTTP parser stopped owning a socket that emits an
// 'upgrade' event, another C++ stream can start owning it (e.g. a TLSSocket).

const server = http.createServer(common.mustNotCall());

server.on('upgrade', common.mustCall((request, socket, head) => {
  // This should not crash.
  new tls.TLSSocket(socket);
  server.close();
  socket.destroy();
}));

server.listen(0, common.mustCall(() => {
  http.get({
    port: server.address().port,
    headers: {
      'Connection': 'Upgrade',
      'Upgrade': 'websocket'
    }
  }).on('error', () => {});
}));