node/test/parallel/test-http2-multistream-destroy-on-read-tls.js
Anna Henningsen 18cb4372d1
http2: do not start reading after write if new write is on wire
Don’t start reading more input data if we’re still busy writing output.
This was overlooked in 8a4a1931b8.

Fixes: https://github.com/nodejs/node/issues/29353
Fixes: https://github.com/nodejs/node/issues/29393

PR-URL: https://github.com/nodejs/node/pull/29399
Reviewed-By: David Carlier <devnexen@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
2019-09-04 17:15:24 +02:00

48 lines
1.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'use strict';
const common = require('../common');
if (!common.hasCrypto)
common.skip('missing crypto');
const fixtures = require('../common/fixtures');
const http2 = require('http2');
// Regression test for https://github.com/nodejs/node/issues/29353.
// Test that its okay for an HTTP2 + TLS server to destroy a stream instance
// while reading it.
const server = http2.createSecureServer({
key: fixtures.readKey('agent2-key.pem'),
cert: fixtures.readKey('agent2-cert.pem')
});
const filenames = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
server.on('stream', common.mustCall((stream) => {
function write() {
stream.write('a'.repeat(10240));
stream.once('drain', write);
}
write();
}, filenames.length));
server.listen(0, common.mustCall(() => {
const client = http2.connect(`https://localhost:${server.address().port}`, {
ca: fixtures.readKey('agent2-cert.pem'),
servername: 'agent2'
});
let destroyed = 0;
for (const entry of filenames) {
const stream = client.request({
':path': `/${entry}`
});
stream.once('data', common.mustCall(() => {
stream.destroy();
if (++destroyed === filenames.length) {
client.destroy();
server.close();
}
}));
}
}));