1'use strict';
2
3const common = require('../common');
4if (!common.hasCrypto)
5  common.skip('missing crypto');
6const assert = require('assert');
7const h2 = require('http2');
8
9// Makes sure that Http2ServerResponse setHeader & removeHeader, do not throw
10// any errors if the stream was destroyed before headers were sent
11
12const server = h2.createServer();
13server.listen(0, common.mustCall(function() {
14  const port = server.address().port;
15  server.once('request', common.mustCall(function(request, response) {
16    response.on('finish', common.mustCall(() => {
17      assert.strictEqual(response.headersSent, false);
18      response.setHeader('test', 'value');
19      response.removeHeader('test', 'value');
20
21      process.nextTick(() => {
22        response.setHeader('test', 'value');
23        response.removeHeader('test', 'value');
24
25        server.close();
26      });
27    }));
28
29    response.destroy();
30  }));
31
32  const url = `http://localhost:${port}`;
33  const client = h2.connect(url, common.mustCall(function() {
34    const headers = {
35      ':path': '/',
36      ':method': 'GET',
37      ':scheme': 'http',
38      ':authority': `localhost:${port}`
39    };
40    const request = client.request(headers);
41    request.on('end', common.mustCall(function() {
42      client.close();
43    }));
44    request.end();
45    request.resume();
46  }));
47}));
48