diff options
author | Austin Wright <aaa@bzfx.net> | 2019-06-27 16:10:55 -0700 |
---|---|---|
committer | Rich Trott <rtrott@gmail.com> | 2019-07-15 21:22:11 -0700 |
commit | d5737a8537544e4c763249db4ce4fbd7dacfa9fe (patch) | |
tree | fd93a793fad3498d39f10eac6389769a01b397c2 /test | |
parent | 2111207f445f591a412a9420464d451ef748975a (diff) | |
download | android-node-v8-d5737a8537544e4c763249db4ce4fbd7dacfa9fe.tar.gz android-node-v8-d5737a8537544e4c763249db4ce4fbd7dacfa9fe.tar.bz2 android-node-v8-d5737a8537544e4c763249db4ce4fbd7dacfa9fe.zip |
http: expose headers on an http.ClientRequest "information" event
1xx intermediate status responses are allowed to have headers; so
expose the "httpVersion", "httpVersionMajor", "httpVersionMinor",
"headers", "rawHeaders", and "statusMessage" properties on this
event.
PR-URL: https://github.com/nodejs/node/pull/28459
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/parallel/test-http-information-headers.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/test/parallel/test-http-information-headers.js b/test/parallel/test-http-information-headers.js new file mode 100644 index 0000000000..f5cfa5078b --- /dev/null +++ b/test/parallel/test-http-information-headers.js @@ -0,0 +1,64 @@ +'use strict'; +require('../common'); +const assert = require('assert'); +const http = require('http'); +const Countdown = require('../common/countdown'); + +const test_res_body = 'other stuff!\n'; +const countdown = new Countdown(2, () => server.close()); + +const server = http.createServer((req, res) => { + console.error('Server sending informational message #1...'); + // These function calls may rewritten as necessary + // to call res.writeHead instead + res._writeRaw('HTTP/1.1 102 Processing\r\n'); + res._writeRaw('Foo: Bar\r\n'); + res._writeRaw('\r\n'); + console.error('Server sending full response...'); + res.writeHead(200, { + 'Content-Type': 'text/plain', + 'ABCD': '1' + }); + res.end(test_res_body); +}); + +server.listen(0, function() { + const req = http.request({ + port: this.address().port, + path: '/world' + }); + req.end(); + console.error('Client sending request...'); + + let body = ''; + + req.on('information', function(res) { + assert.strictEqual(res.httpVersion, '1.1'); + assert.strictEqual(res.httpVersionMajor, 1); + assert.strictEqual(res.httpVersionMinor, 1); + assert.strictEqual(res.statusCode, 102, + `Received ${res.statusCode}, not 102.`); + assert.strictEqual(res.statusMessage, 'Processing', + `Received ${res.statusMessage}, not "Processing".`); + assert.strictEqual(res.headers.foo, 'Bar'); + assert.strictEqual(res.rawHeaders[0], 'Foo'); + assert.strictEqual(res.rawHeaders[1], 'Bar'); + console.error('Client got 102 Processing...'); + countdown.dec(); + }); + + req.on('response', function(res) { + // Check that all 102 Processing received before full response received. + assert.strictEqual(countdown.remaining, 1); + assert.strictEqual(res.statusCode, 200, + `Final status code was ${res.statusCode}, not 200.`); + res.setEncoding('utf8'); + res.on('data', function(chunk) { body += chunk; }); + res.on('end', function() { + console.error('Got full response.'); + assert.strictEqual(body, test_res_body); + assert.ok('abcd' in res.headers); + countdown.dec(); + }); + }); +}); |