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// Http2ServerResponse.flushHeaders 10 11let serverResponse; 12 13const server = h2.createServer(); 14server.listen(0, common.mustCall(function() { 15 const port = server.address().port; 16 server.once('request', common.mustCall(function(request, response) { 17 assert.strictEqual(response.headersSent, false); 18 assert.strictEqual(response._header, false); // Alias for headersSent 19 response.flushHeaders(); 20 assert.strictEqual(response.headersSent, true); 21 assert.strictEqual(response._header, true); 22 response.flushHeaders(); // Idempotent 23 24 assert.throws(() => { 25 response.writeHead(400, { 'foo-bar': 'abc123' }); 26 }, { 27 code: 'ERR_HTTP2_HEADERS_SENT' 28 }); 29 30 response.on('finish', common.mustCall(function() { 31 server.close(); 32 process.nextTick(() => { 33 response.flushHeaders(); // Idempotent 34 }); 35 })); 36 serverResponse = response; 37 })); 38 39 const url = `http://localhost:${port}`; 40 const client = h2.connect(url, common.mustCall(function() { 41 const headers = { 42 ':path': '/', 43 ':method': 'GET', 44 ':scheme': 'http', 45 ':authority': `localhost:${port}` 46 }; 47 const request = client.request(headers); 48 request.on('response', common.mustCall(function(headers, flags) { 49 assert.strictEqual(headers['foo-bar'], undefined); 50 assert.strictEqual(headers[':status'], 200); 51 serverResponse.end(); 52 }, 1)); 53 request.on('end', common.mustCall(function() { 54 client.close(); 55 })); 56 request.end(); 57 request.resume(); 58 })); 59})); 60