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 9const server = h2.createServer(); 10 11// We use the lower-level API here 12server.on('stream', common.mustCall((stream, headers, flags) => { 13 stream.respond(); 14 stream.end('ok'); 15})); 16server.on('session', common.mustCall((session) => { 17 session.on('remoteSettings', common.mustCall(2)); 18})); 19 20server.listen(0, common.mustCall(() => { 21 const client = h2.connect(`http://localhost:${server.address().port}`); 22 23 [ 24 ['headerTableSize', -1, RangeError], 25 ['headerTableSize', 2 ** 32, RangeError], 26 ['initialWindowSize', -1, RangeError], 27 ['initialWindowSize', 2 ** 32, RangeError], 28 ['maxFrameSize', 1, RangeError], 29 ['maxFrameSize', 2 ** 24, RangeError], 30 ['maxConcurrentStreams', -1, RangeError], 31 ['maxConcurrentStreams', 2 ** 32, RangeError], 32 ['maxHeaderListSize', -1, RangeError], 33 ['maxHeaderListSize', 2 ** 32, RangeError], 34 ['maxHeaderSize', -1, RangeError], 35 ['maxHeaderSize', 2 ** 32, RangeError], 36 ['enablePush', 'a', TypeError], 37 ['enablePush', 1, TypeError], 38 ['enablePush', 0, TypeError], 39 ['enablePush', null, TypeError], 40 ['enablePush', {}, TypeError], 41 ].forEach(([name, value, errorType]) => 42 assert.throws( 43 () => client.settings({ [name]: value }), 44 { 45 code: 'ERR_HTTP2_INVALID_SETTING_VALUE', 46 name: errorType.name 47 } 48 ) 49 ); 50 51 [1, true, {}, []].forEach((invalidCallback) => 52 assert.throws( 53 () => client.settings({}, invalidCallback), 54 { 55 name: 'TypeError', 56 code: 'ERR_INVALID_ARG_TYPE', 57 } 58 ) 59 ); 60 61 client.settings({ maxFrameSize: 1234567 }); 62 63 const req = client.request(); 64 req.on('response', common.mustCall()); 65 req.resume(); 66 req.on('close', common.mustCall(() => { 67 server.close(); 68 client.close(); 69 })); 70})); 71