Skip to content

Commit

Permalink
test: deflake test-http-header-overflow
Browse files Browse the repository at this point in the history
Skip the network and push the data directly to the receiving socket
so that it is guaranteed to be received as a single chunk.

Fixes: nodejs#46291
  • Loading branch information
lpinca committed Sep 17, 2024
1 parent d5c29ba commit 8259fdb
Showing 1 changed file with 7 additions and 9 deletions.
16 changes: 7 additions & 9 deletions test/parallel/test-http-header-overflow.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
// Flags: --expose-internals

'use strict';
const { expectsError, mustCall } = require('../common');
const assert = require('assert');
Expand All @@ -10,11 +8,10 @@ const CRLF = '\r\n';
const DUMMY_HEADER_NAME = 'Cookie: ';
const DUMMY_HEADER_VALUE = 'a'.repeat(
// Plus one is to make it 1 byte too big
maxHeaderSize - DUMMY_HEADER_NAME.length + 2
maxHeaderSize - DUMMY_HEADER_NAME.length + 1
);
const PAYLOAD_GET = 'GET /blah HTTP/1.1';
const PAYLOAD = PAYLOAD_GET + CRLF +
DUMMY_HEADER_NAME + DUMMY_HEADER_VALUE + CRLF.repeat(2);
const PAYLOAD = PAYLOAD_GET + CRLF + DUMMY_HEADER_NAME + DUMMY_HEADER_VALUE;

const server = createServer();

Expand All @@ -23,18 +20,19 @@ server.on('connection', mustCall((socket) => {
name: 'Error',
message: 'Parse Error: Header overflow',
code: 'HPE_HEADER_OVERFLOW',
bytesParsed: maxHeaderSize + PAYLOAD_GET.length + (CRLF.length * 2) + 1,
bytesParsed: PAYLOAD.length,
rawPacket: Buffer.from(PAYLOAD)
}));

// The data is not sent from the client to ensure that it is received as a
// single chunk.
socket.push(PAYLOAD);
}));

server.listen(0, mustCall(() => {
const c = createConnection(server.address().port);
let received = '';

c.on('connect', mustCall(() => {
c.write(PAYLOAD);
}));
c.on('data', mustCall((data) => {
received += data.toString();
}));
Expand Down

0 comments on commit 8259fdb

Please sign in to comment.