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