mirror of https://github.com/lukechilds/node.git
Browse Source
HTTP/1.1 requests, either with an event (check_continue) or automatically, if no event handler is present. Add client-side expect/continue support, tests. Expound upon client requirements for expect/continue.v0.7.4-release
Mark Nottingham
14 years ago
committed by
Ryan Dahl
3 changed files with 153 additions and 5 deletions
@ -0,0 +1,67 @@ |
|||
var common = require("../common"); |
|||
var assert = common.assert; |
|||
var sys = require("sys"); |
|||
var http = require("http"); |
|||
|
|||
var outstanding_reqs = 0; |
|||
var test_req_body = "some stuff...\n"; |
|||
var test_res_body = "other stuff!\n"; |
|||
var sent_continue = false; |
|||
var got_continue = false; |
|||
|
|||
function handler(req, res) { |
|||
assert.equal(sent_continue, true, "Full response sent before 100 Continue"); |
|||
common.debug("Server sending full response..."); |
|||
res.writeHead(200, { |
|||
'Content-Type' : 'text/plain', |
|||
"ABCD" : "1" |
|||
}); |
|||
res.end(test_res_body); |
|||
} |
|||
|
|||
var server = http.createServer(handler); |
|||
server.addListener("checkContinue", function(req, res) { |
|||
common.debug("Server got Expect: 100-continue..."); |
|||
res.writeContinue(); |
|||
sent_continue = true; |
|||
handler(req, res); |
|||
}); |
|||
server.listen(common.PORT); |
|||
|
|||
|
|||
|
|||
server.addListener("listening", function() { |
|||
var client = http.createClient(common.PORT); |
|||
req = client.request("POST", "/world", { |
|||
"Expect": "100-continue", |
|||
}); |
|||
common.debug("Client sending request..."); |
|||
outstanding_reqs++; |
|||
body = ""; |
|||
req.addListener('continue', function () { |
|||
common.debug("Client got 100 Continue..."); |
|||
got_continue = true; |
|||
req.end(test_req_body); |
|||
}); |
|||
req.addListener('response', function (res) { |
|||
assert.equal(got_continue, true, |
|||
"Full response received before 100 Continue" |
|||
); |
|||
assert.equal(200, res.statusCode, |
|||
"Final status code was " + res.statusCode + ", not 200." |
|||
); |
|||
res.setEncoding("utf8"); |
|||
res.addListener('data', function (chunk) { body += chunk; }); |
|||
res.addListener('end', function () { |
|||
common.debug("Got full response."); |
|||
assert.equal(body, test_res_body, "Response body doesn't match."); |
|||
// common.debug(sys.inspect(res.headers));
|
|||
assert.ok("abcd" in res.headers, "Response headers missing."); |
|||
outstanding_reqs--; |
|||
if (outstanding_reqs == 0) { |
|||
server.close(); |
|||
process.exit(); |
|||
} |
|||
}); |
|||
}); |
|||
}); |
Loading…
Reference in new issue