http = require("http"),
url = require("url");
+var chunk = '01234567890123456789';
+
// Produce a very large response.
var chargen = http.createServer(function (req, res) {
- var chunk = '01234567890123456789';
- var len = req.headers['x-len'];
+ var len = parseInt(req.headers['x-len']);
+ assert.ok(len > 0);
res.writeHead(200, {"transfer-encoding":"chunked"});
for (var i=0; i<len; i++) {
- print(',');
+ //print(',');
res.write(chunk);
}
res.end();
// Proxy to the chargen server.
var proxy = http.createServer(function (req, res) {
var c = http.createClient(9000, 'localhost')
+
+ var len = parseInt(req.headers['x-len']);
+ assert.ok(len > 0);
+
+ var sent = 0;
+
+
+ c.addListener('error', function (e) {
+ puts('proxy client error. sent ' + sent);
+ throw e;
+ });
+
var proxy_req = c.request(req.method, req.url, req.headers);
proxy_req.addListener('response', function(proxy_res) {
res.writeHead(proxy_res.statusCode, proxy_res.headers);
- proxy_res.addListener('data', function(chunk) {
- print('.');
- res.write(chunk);
+
+ proxy_res.addListener('data', function(d) {
+ //print('.');
+ res.write(d);
+ sent += d.length;
+ assert.ok(sent <= (len*chunk.length));
});
+
proxy_res.addListener('end', function() {
res.end();
});
+
});
+
proxy_req.end();
});
proxy.listen(9001);
function call_chargen(list) {
if (list.length > 0) {
- sys.debug("calling chargen for " + list[0] + " chunks.");
- var req = http.createClient(9001, 'localhost').request('/', {'x-len': list[0]});
+ var len = list.shift();
+
+ sys.debug("calling chargen for " + len + " chunks.");
+
+ var recved = 0;
+
+ var req = http.createClient(9001, 'localhost').request('/', {'x-len': len});
+
req.addListener('response', function(res) {
+
+ res.addListener('data', function(d) {
+ recved += d.length;
+ assert.ok(recved <= (len*chunk.length));
+ });
+
res.addListener('end', function() {
- sys.debug("end for " + list[0] + " chunks.");
- list.shift();
+ assert.ok(recved <= (len*chunk.length));
+ sys.debug("end for " + len + " chunks.");
call_chargen(list);
});
+
});
req.end();
+
} else {
- sys.puts("End of list.");
- proxy.end();
- chargen.end();
- done = true;
+ sys.puts("End of list. closing servers");
+ proxy.close();
+ chargen.close();
+ done = true;
}
}