This commit is contained in:
snwy
2024-11-22 16:15:38 -08:00
parent b8a1034113
commit ba8cd9f015
2 changed files with 27 additions and 22 deletions

View File

@@ -1,24 +1,25 @@
//#FILE: test-http2-compat-serverresponse-drain.js
//#SHA1: 4ec55745f622a31b4729fcb9daf9bfd707a3bdb3
//-----------------
'use strict';
"use strict";
const h2 = require('http2');
const h2 = require("http2");
const hasCrypto = (() => {
try {
require('crypto');
require("crypto");
return true;
} catch (err) {
return false;
}
})();
const testString = 'tests';
const testString = "tests";
test('HTTP/2 server response drain event', async () => {
// We don't use the highWaterMark option in HTTP/2 so this needs to be implemented
test.todo("HTTP/2 server response drain event", async () => {
if (!hasCrypto) {
test.skip('missing crypto');
test.skip("missing crypto");
return;
}
@@ -27,33 +28,36 @@ test('HTTP/2 server response drain event', async () => {
const requestHandler = jest.fn((req, res) => {
res.stream._writableState.highWaterMark = testString.length;
expect(res.write(testString)).toBe(false);
res.on('drain', jest.fn(() => res.end(testString)));
res.on(
"drain",
jest.fn(() => res.end(testString)),
);
});
server.on('request', requestHandler);
server.on("request", requestHandler);
await new Promise(resolve => server.listen(0, resolve));
const port = server.address().port;
const client = h2.connect(`http://localhost:${port}`);
const request = client.request({
':path': '/foobar',
':method': 'POST',
':scheme': 'http',
':authority': `localhost:${port}`
":path": "/foobar",
":method": "POST",
":scheme": "http",
":authority": `localhost:${port}`,
});
request.resume();
request.end();
let data = '';
request.setEncoding('utf8');
request.on('data', (chunk) => (data += chunk));
let data = "";
request.setEncoding("utf8");
request.on("data", chunk => (data += chunk));
await new Promise(resolve => request.on("end", resolve));
await new Promise(resolve => request.on('end', resolve));
expect(data).toBe(testString.repeat(2));
expect(requestHandler).toHaveBeenCalled();
client.close();
await new Promise(resolve => server.close(resolve));
});