From 1ecb11f9446f771500cec40f0cf3504eaec6e755 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Sun, 9 May 2010 15:07:54 -0700 Subject: [PATCH] Add failing test - http responses not all complete Report and test by soderblom.peter@gmail.com --- test/simple/test-http-full-response.js | 67 ++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 test/simple/test-http-full-response.js diff --git a/test/simple/test-http-full-response.js b/test/simple/test-http-full-response.js new file mode 100644 index 0000000..06bfab6 --- /dev/null +++ b/test/simple/test-http-full-response.js @@ -0,0 +1,67 @@ +require("../common"); +// This test requires the program "ab" +http = require("http"); +exec = require("child_process").exec; + +bodyLength = 12345; + +body = ""; +for (var i = 0; i < bodyLength; i++) body += 'c'; + +server = http.createServer(function (req, res) { + res.writeHead(200, { + "Content-Length": bodyLength, + "Content-Type": "text/plain" + }); + res.end(body); +}); +server.listen(PORT); + +runs = 0; + +function runAb(opts, callback) { + var command = "ab " + opts + " http://127.0.0.1:" + PORT + "/"; + exec(command, function (err, stdout, stderr) { + if (err) { + puts("ab not installed? skipping test.\n" + stderr); + process.exit(); + return; + } + + var m = /Document Length:\s*(\d+) bytes/mi.exec(stdout); + var documentLength = parseInt(m[1]); + + var m = /Complete requests:\s*(\d+)/mi.exec(stdout); + var completeRequests = parseInt(m[1]); + + var m = /HTML transferred:\s*(\d+) bytes/mi.exec(stdout); + var htmlTransfered = parseInt(m[1]); + + assert.equal(bodyLength, documentLength); + assert.equal(completeRequests * documentLength, htmlTransfered); + + runs++; + + if (callback) callback() + }); +} + +server.addListener('listening', function () { + runAb("-c 1 -n 10", function () { + puts("-c 1 -n 10 okay"); + + runAb("-c 1 -n 100", function () { + puts("-c 1 -n 100 okay"); + + runAb("-c 1 -n 1000", function () { + puts("-c 1 -n 1000 okay"); + server.close(); + }); + }); + }); + +}); + +process.addListener("exit", function () { + assert.equal(3, runs); +}); -- 2.7.4