mirror of
https://github.com/nodejs/node.git
synced 2025-08-15 13:48:44 +02:00

This commit gives node.js the ability to also receive custom settings, in addition to sending, them which was implemented before. The custom settings received are limited to setting ids, that were specified before, when creating the session eithers through the server or the client. PR-URL: https://github.com/nodejs/node/pull/51323 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Paolo Insogna <paolo@cowtech.it> Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
120 lines
2.8 KiB
JavaScript
120 lines
2.8 KiB
JavaScript
'use strict';
|
|
|
|
const common = require('../common');
|
|
if (!common.hasCrypto)
|
|
common.skip('missing crypto');
|
|
const assert = require('assert');
|
|
const h2 = require('http2');
|
|
|
|
const server = h2.createServer();
|
|
|
|
// We use the lower-level API here
|
|
server.on('stream', common.mustCall((stream, headers, flags) => {
|
|
stream.respond();
|
|
stream.end('ok');
|
|
}));
|
|
server.on('session', common.mustCall((session) => {
|
|
session.on('remoteSettings', common.mustCall(2));
|
|
}));
|
|
|
|
server.listen(0, common.mustCall(() => {
|
|
const client = h2.connect(`http://localhost:${server.address().port}`);
|
|
|
|
[
|
|
['headerTableSize', -1, RangeError],
|
|
['headerTableSize', 2 ** 32, RangeError],
|
|
['initialWindowSize', -1, RangeError],
|
|
['initialWindowSize', 2 ** 32, RangeError],
|
|
['maxFrameSize', 1, RangeError],
|
|
['maxFrameSize', 2 ** 24, RangeError],
|
|
['maxConcurrentStreams', -1, RangeError],
|
|
['maxConcurrentStreams', 2 ** 32, RangeError],
|
|
['maxHeaderListSize', -1, RangeError],
|
|
['maxHeaderListSize', 2 ** 32, RangeError],
|
|
['maxHeaderSize', -1, RangeError],
|
|
['maxHeaderSize', 2 ** 32, RangeError],
|
|
['enablePush', 'a', TypeError],
|
|
['enablePush', 1, TypeError],
|
|
['enablePush', 0, TypeError],
|
|
['enablePush', null, TypeError],
|
|
['enablePush', {}, TypeError],
|
|
].forEach(([name, value, errorType]) =>
|
|
assert.throws(
|
|
() => client.settings({ [name]: value }),
|
|
{
|
|
code: 'ERR_HTTP2_INVALID_SETTING_VALUE',
|
|
name: errorType.name
|
|
}
|
|
)
|
|
);
|
|
|
|
assert.throws(
|
|
() => client.settings({ customSettings: {
|
|
0x11: 5,
|
|
0x12: 5,
|
|
0x13: 5,
|
|
0x14: 5,
|
|
0x15: 5,
|
|
0x16: 5,
|
|
0x17: 5,
|
|
0x18: 5,
|
|
0x19: 5,
|
|
0x1A: 5, // more than 10
|
|
0x1B: 5
|
|
} }),
|
|
{
|
|
code: 'ERR_HTTP2_TOO_MANY_CUSTOM_SETTINGS',
|
|
name: 'Error'
|
|
}
|
|
);
|
|
|
|
assert.throws(
|
|
() => client.settings({ customSettings: {
|
|
0x10000: 5,
|
|
} }),
|
|
{
|
|
code: 'ERR_HTTP2_INVALID_SETTING_VALUE',
|
|
name: 'RangeError'
|
|
}
|
|
);
|
|
|
|
assert.throws(
|
|
() => client.settings({ customSettings: {
|
|
0x55: 0x100000000,
|
|
} }),
|
|
{
|
|
code: 'ERR_HTTP2_INVALID_SETTING_VALUE',
|
|
name: 'RangeError'
|
|
}
|
|
);
|
|
|
|
assert.throws(
|
|
() => client.settings({ customSettings: {
|
|
0x55: -1,
|
|
} }),
|
|
{
|
|
code: 'ERR_HTTP2_INVALID_SETTING_VALUE',
|
|
name: 'RangeError'
|
|
}
|
|
);
|
|
|
|
[1, true, {}, []].forEach((invalidCallback) =>
|
|
assert.throws(
|
|
() => client.settings({}, invalidCallback),
|
|
{
|
|
name: 'TypeError',
|
|
code: 'ERR_INVALID_ARG_TYPE',
|
|
}
|
|
)
|
|
);
|
|
|
|
client.settings({ maxFrameSize: 1234567, customSettings: { 0xbf: 12 } });
|
|
|
|
const req = client.request();
|
|
req.on('response', common.mustCall());
|
|
req.resume();
|
|
req.on('close', common.mustCall(() => {
|
|
server.close();
|
|
client.close();
|
|
}));
|
|
}));
|