Skip to content

Commit

Permalink
test: fix flaky http-server-keep-alive-timeout
Browse files Browse the repository at this point in the history
Make sure the connection is not closed until the 3 requests and the
`timeout` event are received.
Some code refactoring to avoid duplicated code.

Fixes: #20013
PR-URL: #20093
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
  • Loading branch information
santigimeno authored and jasnell committed Apr 20, 2018
1 parent 22819aa commit 392ed93
Showing 1 changed file with 24 additions and 25 deletions.
49 changes: 24 additions & 25 deletions test/parallel/test-http-server-keep-alive-timeout.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,28 @@ function run() {
if (fn) fn(run);
}

test(function serverEndKeepAliveTimeoutWithPipeline(cb) {
function done(server, socket, cb) {
socket.destroy();
server.close(cb);
}

function serverTest(withPipeline, cb) {
let gotAll = false;
let timedout = false;
const server = http.createServer(common.mustCall((req, res) => {
res.end();
if (withPipeline)
res.end();
if (req.url === '/3') {
gotAll = true;
if (timedout)
done(server, req.socket, cb);
}
}, 3));
server.setTimeout(500, common.mustCall((socket) => {
server.setTimeout(500, common.mustCallAtLeast((socket) => {
// End this test and call `run()` for the next test (if any).
socket.destroy();
server.close();
cb();
timedout = true;
if (gotAll)
done(server, socket, cb);
}));
server.keepAliveTimeout = 50;
server.listen(0, common.mustCall(() => {
Expand All @@ -40,26 +53,12 @@ test(function serverEndKeepAliveTimeoutWithPipeline(cb) {
c.write('GET /3 HTTP/1.1\r\nHost: localhost\r\n\r\n');
});
}));
}

test(function serverEndKeepAliveTimeoutWithPipeline(cb) {
serverTest(true, cb);
});

test(function serverNoEndKeepAliveTimeoutWithPipeline(cb) {
const server = http.createServer(common.mustCall(3));
server.setTimeout(500, common.mustCall((socket) => {
// End this test and call `run()` for the next test (if any).
socket.destroy();
server.close();
cb();
}));
server.keepAliveTimeout = 50;
server.listen(0, common.mustCall(() => {
const options = {
port: server.address().port,
allowHalfOpen: true
};
const c = net.connect(options, () => {
c.write('GET /1 HTTP/1.1\r\nHost: localhost\r\n\r\n');
c.write('GET /2 HTTP/1.1\r\nHost: localhost\r\n\r\n');
c.write('GET /3 HTTP/1.1\r\nHost: localhost\r\n\r\n');
});
}));
serverTest(false, cb);
});

0 comments on commit 392ed93

Please sign in to comment.