1'use strict'; 2 3const common = require('../common'); 4if (!common.hasCrypto) 5 common.skip('missing crypto'); 6const http2 = require('http2'); 7const assert = require('assert'); 8const { 9 DEFAULT_SETTINGS_MAX_HEADER_LIST_SIZE, 10 NGHTTP2_CANCEL, 11} = http2.constants; 12 13const headerSize = DEFAULT_SETTINGS_MAX_HEADER_LIST_SIZE; 14const timeout = common.platformTimeout(2_000); 15const timer = setTimeout(() => assert.fail(`http2 client timedout 16when server can not manage to send a header of size ${headerSize}`), timeout); 17 18const server = http2.createServer((req, res) => { 19 res.setHeader('foobar', 'a'.repeat(DEFAULT_SETTINGS_MAX_HEADER_LIST_SIZE)); 20 res.end(); 21}); 22 23server.listen(0, common.mustCall(() => { 24 const clientSession = http2.connect(`http://localhost:${server.address().port}`); 25 clientSession.on('close', common.mustCall()); 26 clientSession.on('remoteSettings', send); 27 28 function send() { 29 const stream = clientSession.request({ ':path': '/' }); 30 stream.on('close', common.mustCall(() => { 31 assert.strictEqual(stream.rstCode, NGHTTP2_CANCEL); 32 clearTimeout(timer); 33 server.close(); 34 })); 35 36 stream.end(); 37 } 38})); 39