diff --git a/test/js/node/test/parallel/test-http-server-close-idle-wait-response.js b/test/js/node/test/parallel/test-http-server-close-idle-wait-response.js new file mode 100644 index 0000000000..429c653f74 --- /dev/null +++ b/test/js/node/test/parallel/test-http-server-close-idle-wait-response.js @@ -0,0 +1,26 @@ +'use strict'; + +const common = require('../common'); + +const { createServer, get } = require('http'); + +const server = createServer(common.mustCall(function(req, res) { + req.resume(); + + setTimeout(common.mustCall(() => { + res.writeHead(204, { 'Connection': 'keep-alive', 'Keep-Alive': 'timeout=1' }); + res.end(); + }), common.platformTimeout(1000)); +})); + +server.listen(0, function() { + const port = server.address().port; + + get(`http://localhost:${port}`, common.mustCall((res) => { + server.close(); + })).on('finish', common.mustCall(() => { + setTimeout(common.mustCall(() => { + server.closeIdleConnections(); + }), common.platformTimeout(500)); + })); +}); diff --git a/test/js/node/test/sequential/test-http-server-keep-alive-timeout-slow-server.js b/test/js/node/test/sequential/test-http-server-keep-alive-timeout-slow-server.js new file mode 100644 index 0000000000..1543c1415f --- /dev/null +++ b/test/js/node/test/sequential/test-http-server-keep-alive-timeout-slow-server.js @@ -0,0 +1,50 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const http = require('http'); + +const server = http.createServer(common.mustCall((req, res) => { + if (req.url === '/first') { + res.end('ok'); + return; + } + setTimeout(() => { + res.end('ok'); + }, common.platformTimeout(500)); +}, 2)); + +server.keepAliveTimeout = common.platformTimeout(200); + +const agent = new http.Agent({ + keepAlive: true, + maxSockets: 1 +}); + +function request(path, callback) { + const port = server.address().port; + const req = http.request({ agent, path, port }, common.mustCall((res) => { + assert.strictEqual(res.statusCode, 200); + + res.setEncoding('utf8'); + + let result = ''; + res.on('data', (chunk) => { + result += chunk; + }); + + res.on('end', common.mustCall(() => { + assert.strictEqual(result, 'ok'); + callback(); + })); + })); + req.end(); +} + +server.listen(0, common.mustCall(() => { + request('/first', () => { + request('/second', () => { + server.close(); + }); + }); +}));