node/test/parallel/test-http2-server-shutdown-options-errors.js
Trivikram Kamat 7f0183e6c3
http2: setting shuttingDown=true after validation
In shutdown(), shuttingDown was set to true before validating options.
If invalid options are passed, error was thrown and server remained in
shuttingDown state. This code change fixes it.

PR-URL: https://github.com/nodejs/node/pull/15676
Fixes: https://github.com/nodejs/node/issues/15666
Refs: https://github.com/nodejs/node/issues/14985
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
2017-10-01 23:59:00 -03:00

62 lines
1.3 KiB
JavaScript

'use strict';
const common = require('../common');
if (!common.hasCrypto)
common.skip('missing crypto');
const http2 = require('http2');
const server = http2.createServer();
const optionsToTest = {
opaqueData: 'Uint8Array',
graceful: 'boolean',
errorCode: 'number',
lastStreamID: 'number'
};
const types = {
boolean: true,
number: 1,
object: {},
array: [],
null: null,
Uint8Array: Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5])
};
server.on(
'stream',
common.mustCall((stream) => {
Object.keys(optionsToTest).forEach((option) => {
Object.keys(types).forEach((type) => {
if (type === optionsToTest[option]) {
return;
}
common.expectsError(
() =>
stream.session.shutdown(
{ [option]: types[type] },
common.mustNotCall()
),
{
type: TypeError,
code: 'ERR_INVALID_OPT_VALUE',
message: `The value "${String(types[type])}" is invalid ` +
`for option "${option}"`
}
);
});
});
stream.session.destroy();
})
);
server.listen(
0,
common.mustCall(() => {
const client = http2.connect(`http://localhost:${server.address().port}`);
const req = client.request();
req.resume();
req.on('end', common.mustCall(() => server.close()));
})
);