summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAustin Wright <aaa@bzfx.net>2019-06-27 16:10:55 -0700
committerRich Trott <rtrott@gmail.com>2019-07-15 21:22:11 -0700
commitd5737a8537544e4c763249db4ce4fbd7dacfa9fe (patch)
treefd93a793fad3498d39f10eac6389769a01b397c2 /test
parent2111207f445f591a412a9420464d451ef748975a (diff)
downloadandroid-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.js64
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();
+ });
+ });
+});