Skip to content
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
test: deflake test-http2-large-write-multiple-requests
If the server is not referenced, it might go away too soon
and the client may not get enough ends for it to close
itself, resulting a timeout.
This patch updates the test to simply close the server when
enough requests have been processed, and keep the server
referenced while the test is ongoing.

Drive-by: add more logs to facilitate debugging.
  • Loading branch information
joyeecheung committed Feb 23, 2024
commit c83d09b1b3594043d0f4c05e1d406071dfd55226
17 changes: 16 additions & 1 deletion test/parallel/test-http2-large-write-multiple-requests.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ const common = require('../common');
if (!common.hasCrypto)
common.skip('missing crypto');

// This tests that the http2 server sends data early when it accumulates
// enough from ongoing requests to avoid DoS as mitigation for
// CVE-2019-9517 and CVE-2019-9511.
// Added by https://github.com/nodejs/node/commit/8a4a193
const fixtures = require('../common/fixtures');
const assert = require('assert');
const http2 = require('http2');
Expand All @@ -12,18 +16,21 @@ const content = fixtures.readSync('person-large.jpg');
const server = http2.createServer({
maxSessionMemory: 1000
});
let streamCount = 0;
server.on('stream', (stream, headers) => {
stream.respond({
'content-type': 'image/jpeg',
':status': 200
});
stream.end(content);
console.log('server sends content', ++streamCount);
});
server.unref();
Comment thread
joyeecheung marked this conversation as resolved.
Outdated

server.listen(0, common.mustCall(() => {
const client = http2.connect(`http://localhost:${server.address().port}/`);

let endCount = 0;
let finished = 0;
for (let i = 0; i < 100; i++) {
const req = client.request({ ':path': '/' }).end();
Expand All @@ -32,8 +39,16 @@ server.listen(0, common.mustCall(() => {
chunks.push(chunk);
});
req.on('end', common.mustCall(() => {
console.log('client receives content', ++endCount);
assert.deepStrictEqual(Buffer.concat(chunks), content);
if (++finished === 100) client.close();

if (++finished === 100) {
client.close();
server.close();
}
}));
req.on('error', (e) => {
console.log('client error', e);
});
}
}));