@ 261105.16
current
// This tests that the proxy server cannot send unbounded incomplete headers
// while establishing a CONNECT tunnel.

import * as common from '../common/index.mjs';
import assert from 'node:assert';
import { once } from 'events';
import http from 'node:http';
import { runProxiedRequest } from '../common/proxy-server.js';

if (!common.hasCrypto)
  common.skip('missing crypto');

const proxy = http.createServer();
proxy.on('connect', common.mustCall((req, socket) => {
  socket.write('HTTP/1.1 200 Connection Established\r\n');

  const interval = setInterval(() => {
    if (socket.destroyed) {
      clearInterval(interval);
      return;
    }
    socket.write('x'.repeat(100));
  }, 10);
  socket.on('close', () => clearInterval(interval));
  socket.on('error', () => clearInterval(interval));
}, 1));
proxy.listen(0);
await once(proxy, 'listening');

const { code, signal, stderr, stdout } = await runProxiedRequest({
  NODE_USE_ENV_PROXY: 1,
  REQUEST_URL: 'https://localhost:1/test',
  HTTPS_PROXY: `http://localhost:${proxy.address().port}`,
}, ['--max-http-header-size=1024']);

assert.match(
  stderr,
  /ERR_PROXY_TUNNEL.*Proxy response headers exceeded 1024 bytes/,
);
assert.doesNotMatch(stderr, /MaxListenersExceededWarning/);
assert.strictEqual(stdout.trim(), '');
assert.strictEqual(code, 0);
assert.strictEqual(signal, null);

proxy.close();