var common = require("../common"); var assert = common.assert; 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."); assert.ok("abcd" in res.headers, "Response headers missing."); outstanding_reqs--; if (outstanding_reqs == 0) { server.close(); process.exit(); } }); }); });