Add more asserts to test-http-big-proxy-responses
authorRyan Dahl <ry@tinyclouds.org>
Tue, 27 Apr 2010 03:26:36 +0000 (20:26 -0700)
committerRyan Dahl <ry@tinyclouds.org>
Tue, 27 Apr 2010 03:26:36 +0000 (20:26 -0700)
test/disabled/test-http-big-proxy-responses.js

index 431ac05..a75ff87 100644 (file)
@@ -4,13 +4,15 @@ fs = require("fs"),
 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();
@@ -20,17 +22,35 @@ chargen.listen(9000);
 // 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);
@@ -39,21 +59,35 @@ var done = false;
 
 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;
   }
 }