11cb0ef41Sopenharmony_ci'use strict';
21cb0ef41Sopenharmony_ci
31cb0ef41Sopenharmony_ciconst common = require('../common');
41cb0ef41Sopenharmony_ciconst assert = require('assert');
51cb0ef41Sopenharmony_ciconst http = require('http');
61cb0ef41Sopenharmony_ciconst { HTTPParser } = require('_http_common');
71cb0ef41Sopenharmony_ci
81cb0ef41Sopenharmony_ci// Test that the `HTTPParser` instance is cleaned up before being returned to
91cb0ef41Sopenharmony_ci// the pool to avoid memory retention issues.
101cb0ef41Sopenharmony_ci
111cb0ef41Sopenharmony_ciconst kOnTimeout = HTTPParser.kOnTimeout | 0;
121cb0ef41Sopenharmony_ciconst server = http.createServer();
131cb0ef41Sopenharmony_ci
141cb0ef41Sopenharmony_ciserver.on('request', common.mustCall((request, response) => {
151cb0ef41Sopenharmony_ci  const parser = request.socket.parser;
161cb0ef41Sopenharmony_ci
171cb0ef41Sopenharmony_ci  assert.strictEqual(typeof parser[kOnTimeout], 'function');
181cb0ef41Sopenharmony_ci
191cb0ef41Sopenharmony_ci  request.socket.on('close', common.mustCall(() => {
201cb0ef41Sopenharmony_ci    assert.strictEqual(parser[kOnTimeout], null);
211cb0ef41Sopenharmony_ci  }));
221cb0ef41Sopenharmony_ci
231cb0ef41Sopenharmony_ci  response.end();
241cb0ef41Sopenharmony_ci  server.close();
251cb0ef41Sopenharmony_ci}));
261cb0ef41Sopenharmony_ci
271cb0ef41Sopenharmony_ciserver.listen(common.mustCall(() => {
281cb0ef41Sopenharmony_ci  const request = http.get({
291cb0ef41Sopenharmony_ci    headers: { Connection: 'close' },
301cb0ef41Sopenharmony_ci    port: server.address().port,
311cb0ef41Sopenharmony_ci    joinDuplicateHeaders: true
321cb0ef41Sopenharmony_ci  });
331cb0ef41Sopenharmony_ci  let parser;
341cb0ef41Sopenharmony_ci
351cb0ef41Sopenharmony_ci  request.on('socket', common.mustCall(() => {
361cb0ef41Sopenharmony_ci    parser = request.parser;
371cb0ef41Sopenharmony_ci    assert.strictEqual(typeof parser.onIncoming, 'function');
381cb0ef41Sopenharmony_ci    assert.strictEqual(parser.joinDuplicateHeaders, true);
391cb0ef41Sopenharmony_ci  }));
401cb0ef41Sopenharmony_ci
411cb0ef41Sopenharmony_ci  request.on('response', common.mustCall((response) => {
421cb0ef41Sopenharmony_ci    response.resume();
431cb0ef41Sopenharmony_ci    response.on('end', common.mustCall(() => {
441cb0ef41Sopenharmony_ci      assert.strictEqual(parser.onIncoming, null);
451cb0ef41Sopenharmony_ci      assert.strictEqual(parser.joinDuplicateHeaders, null);
461cb0ef41Sopenharmony_ci    }));
471cb0ef41Sopenharmony_ci  }));
481cb0ef41Sopenharmony_ci}));
49