From b833aa48e93095896448d1bf8bf998256a5567ee Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Fri, 6 Nov 2009 13:42:56 +0100 Subject: [PATCH] Add test to ensure the server can handle keep-alive --- test/mjsunit/test-keep-alive.js | 61 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 test/mjsunit/test-keep-alive.js diff --git a/test/mjsunit/test-keep-alive.js b/test/mjsunit/test-keep-alive.js new file mode 100644 index 0000000..f82080d --- /dev/null +++ b/test/mjsunit/test-keep-alive.js @@ -0,0 +1,61 @@ +// This test requires the program "ab" +process.mixin(require("./common")); +http = require("http"); +sys = require("sys"); +PORT = 8891; + +body = "hello world\n"; +server = http.createServer(function (req, res) { + res.sendHeader(200, { + "Content-Length": body.length, + "Content-Type": "text/plain", + }); + res.sendBody(body); + res.finish(); +}); +server.listen(PORT); + +var keepAliveReqSec = 0; +var normalReqSec = 0; + +function error (msg) { + throw new Error("ERROR. 'ab' not installed? " + msg); +} + +function runAb(opts, callback) { + sys.exec("ab " + opts + " http://localhost:" + PORT + "/") + .addErrback(error) + .addCallback(function (out) { + var matches = /Requests per second:\s*(\d+)\./mi.exec(out); + var reqSec = parseInt(matches[1]); + + matches = /Keep-Alive requests:\s*(\d+)/mi.exec(out); + var keepAliveRequests; + if (matches) { + keepAliveRequests = parseInt(matches[1]); + } else { + keepAliveRequests = 0; + } + + callback(reqSec, keepAliveRequests); + }); +} + +runAb("-k -c 100 -t 2", function (reqSec, keepAliveRequests) { + keepAliveReqSec = reqSec; + assertTrue(keepAliveRequests > 0); + puts("keep-alive: " + keepAliveReqSec + " req/sec"); + + runAb("-c 100 -t 2", function (reqSec, keepAliveRequests) { + normalReqSec = reqSec; + assertEquals(0, keepAliveRequests); + puts("normal: " + normalReqSec + " req/sec"); + server.close(); + }); +}); + +process.addListener("exit", function () { + assertTrue(normalReqSec > 50); + assertTrue(keepAliveReqSec > 50); + assertTrue(normalReqSec < keepAliveReqSec); +}); -- 2.7.4