mirror of https://github.com/lukechilds/node.git
Ryan Dahl
15 years ago
1 changed files with 61 additions and 0 deletions
@ -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); |
||||
|
}); |
Loading…
Reference in new issue