1'use strict';
2
3const common = require('../common');
4if (!common.hasCrypto)
5  common.skip('missing crypto');
6
7const assert = require('assert');
8const { createServer, connect } = require('http2');
9
10const messages = [];
11const expected = [
12  'Stream:created',
13  'Stream:error',
14  'Stream:close',
15  'Request:error',
16];
17
18const server = createServer();
19
20server.on('stream', (stream) => {
21  messages.push('Stream:created');
22  stream
23    .on('close', () => messages.push('Stream:close'))
24    .on('error', (err) => messages.push('Stream:error'))
25    .respondWithFile('dont exist');
26});
27
28server.listen(0);
29
30const client = connect(`http://localhost:${server.address().port}`);
31const req = client.request();
32
33req.on('response', common.mustNotCall());
34
35req.on('error', () => {
36  messages.push('Request:error');
37  client.close();
38});
39
40client.on('close', common.mustCall(() => {
41  assert.deepStrictEqual(messages, expected);
42  server.close();
43}));
44