Browse Source

Fix test-http-client-race bug

v0.7.4-release
Ryan 16 years ago
parent
commit
d77f757745
  1. 9
      src/http.js
  2. 13
      test/test-http-client-race.js

9
src/http.js

@ -385,7 +385,12 @@ node.http.Client = function (port, host) {
connection.connect(port, host); connection.connect(port, host);
return; return;
} }
while (this === requests[0] && output.length > 0) { //node.debug("HTTP CLIENT flush. readyState = " + connection.readyState);
while ( this === requests[0]
&& output.length > 0
&& connection.readyState == "open"
)
{
var out = output.shift(); var out = output.shift();
connection.send(out[0], out[1]); connection.send(out[0], out[1]);
} }
@ -403,7 +408,7 @@ node.http.Client = function (port, host) {
connection.onConnect = function () { connection.onConnect = function () {
//node.debug("HTTP CLIENT onConnect. readyState = " + connection.readyState); //node.debug("HTTP CLIENT onConnect. readyState = " + connection.readyState);
//node.debug("requests[0].uri = " + requests[0].uri); //node.debug("requests[0].uri = '" + requests[0].uri + "'");
requests[0].flush(); requests[0].flush();
}; };

13
test/test-http-client-race.js

@ -3,7 +3,10 @@ PORT = 8888;
var server = new node.http.Server(function (req, res) { var server = new node.http.Server(function (req, res) {
res.sendHeader(200, [["content-type", "text/plain"]]); res.sendHeader(200, [["content-type", "text/plain"]]);
res.sendBody("hello world\n"); if (req.uri.path == "/1")
res.sendBody("hello world 1\n");
else
res.sendBody("hello world 2\n");
res.finish(); res.finish();
}) })
server.listen(PORT); server.listen(PORT);
@ -13,13 +16,13 @@ var client = new node.http.Client(PORT);
var body1 = ""; var body1 = "";
var body2 = ""; var body2 = "";
client.get("/").finish(function (res1) { client.get("/1").finish(function (res1) {
res1.setBodyEncoding("utf8"); res1.setBodyEncoding("utf8");
res1.onBody = function (chunk) { body1 += chunk; }; res1.onBody = function (chunk) { body1 += chunk; };
res1.onBodyComplete = function () { res1.onBodyComplete = function () {
client.get("/").finish(function (res2) { client.get("/2").finish(function (res2) {
res2.setBodyEncoding("utf8"); res2.setBodyEncoding("utf8");
res2.onBody = function (chunk) { body2 += chunk; }; res2.onBody = function (chunk) { body2 += chunk; };
res2.onBodyComplete = function () { res2.onBodyComplete = function () {
@ -30,6 +33,6 @@ client.get("/").finish(function (res1) {
}); });
function onExit () { function onExit () {
assertEqual("hello world\n", body1); assertEquals("hello world 1\n", body1);
assertEqual("hello world\n", body2); assertEquals("hello world 2\n", body2);
} }

Loading…
Cancel
Save