// 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://127.0.0.1:" + 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; assert.equal(true, keepAliveRequests > 0); puts("keep-alive: " + keepAliveReqSec + " req/sec"); runAb("-c 100 -t 2", function (reqSec, keepAliveRequests) { normalReqSec = reqSec; assert.equal(0, keepAliveRequests); puts("normal: " + normalReqSec + " req/sec"); server.close(); }); }); process.addListener("exit", function () { assert.equal(true, normalReqSec > 50); assert.equal(true, keepAliveReqSec > 50); assert.equal(true, normalReqSec < keepAliveReqSec); });