API: Make request/response object closer to stream interface
[platform/upstream/nodejs.git] / test / mjsunit / test-keep-alive.js
1 // This test requires the program "ab"
2 process.mixin(require("./common"));
3 http = require("http");
4 sys = require("sys");
5 PORT = 8891;
6
7 body = "hello world\n";
8 server = http.createServer(function (req, res) {
9   res.sendHeader(200, { 
10     "Content-Length": body.length, 
11     "Content-Type": "text/plain", 
12   });
13   res.write(body);
14   res.finish();
15 });
16 server.listen(PORT);
17
18 var keepAliveReqSec = 0;
19 var normalReqSec = 0;
20
21 function error (msg) {
22   throw new Error("ERROR. 'ab' not installed? " + msg);
23 }
24
25 function runAb(opts, callback) {
26   sys.exec("ab " + opts + " http://127.0.0.1:" + PORT + "/")
27     .addErrback(error)
28     .addCallback(function (out) {
29       var matches = /Requests per second:\s*(\d+)\./mi.exec(out);
30       var reqSec = parseInt(matches[1]);
31
32       matches = /Keep-Alive requests:\s*(\d+)/mi.exec(out);
33       var keepAliveRequests;
34       if (matches) {
35         keepAliveRequests = parseInt(matches[1]);
36       } else {
37         keepAliveRequests = 0;
38       }
39
40       callback(reqSec, keepAliveRequests);
41     });
42 }
43
44 runAb("-k -c 100 -t 2", function (reqSec, keepAliveRequests) {
45   keepAliveReqSec = reqSec;
46   assert.equal(true, keepAliveRequests > 0);
47   puts("keep-alive: " + keepAliveReqSec + " req/sec");
48
49   runAb("-c 100 -t 2", function (reqSec, keepAliveRequests) {
50     normalReqSec = reqSec;
51     assert.equal(0, keepAliveRequests);
52     puts("normal: " + normalReqSec + " req/sec");
53     server.close();
54   });
55 });
56
57 process.addListener("exit", function () {
58   assert.equal(true, normalReqSec > 50);
59   assert.equal(true, keepAliveReqSec > 50);
60   assert.equal(true, normalReqSec < keepAliveReqSec);
61 });