summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorRod Vagg <rod@vagg.org>2017-10-24 14:11:57 +1100
committerRuben Bridgewater <ruben@bridgewater.de>2018-02-01 10:28:58 +0100
commit4404c7619b27c203cad74791108aeaac7d5f7e13 (patch)
treefbb9fdc96dad040e82b9693276a58feedebc475c /test
parent7d4b7724ec53cbec08b51033b2406f927d5548eb (diff)
downloadandroid-node-v8-4404c7619b27c203cad74791108aeaac7d5f7e13.tar.gz
android-node-v8-4404c7619b27c203cad74791108aeaac7d5f7e13.tar.bz2
android-node-v8-4404c7619b27c203cad74791108aeaac7d5f7e13.zip
http: process headers after setting up agent
Added tests to clarify the implicit behaviour of array header setting vs object header setting PR-URL: https://github.com/nodejs/node/pull/16568 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/test-http-client-headers-array.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/test/parallel/test-http-client-headers-array.js b/test/parallel/test-http-client-headers-array.js
new file mode 100644
index 0000000000..dffe04bb10
--- /dev/null
+++ b/test/parallel/test-http-client-headers-array.js
@@ -0,0 +1,60 @@
+'use strict';
+
+require('../common');
+
+const assert = require('assert');
+const http = require('http');
+
+function execute(options) {
+ http.createServer(function(req, res) {
+ const expectHeaders = {
+ 'x-foo': 'boom',
+ cookie: 'a=1; b=2; c=3',
+ connection: 'close'
+ };
+
+ // no Host header when you set headers an array
+ if (!Array.isArray(options.headers)) {
+ expectHeaders.host = `localhost:${this.address().port}`;
+ }
+
+ // no Authorization header when you set headers an array
+ if (options.auth && !Array.isArray(options.headers)) {
+ expectHeaders.authorization =
+ `Basic ${Buffer.from(options.auth).toString('base64')}`;
+ }
+
+ this.close();
+
+ assert.deepStrictEqual(req.headers, expectHeaders);
+
+ res.end();
+ }).listen(0, function() {
+ options = Object.assign(options, {
+ port: this.address().port,
+ path: '/'
+ });
+ const req = http.request(options);
+ req.end();
+ });
+}
+
+// should be the same except for implicit Host header on the first two
+execute({ headers: { 'x-foo': 'boom', 'cookie': 'a=1; b=2; c=3' } });
+execute({ headers: { 'x-foo': 'boom', 'cookie': [ 'a=1', 'b=2', 'c=3' ] } });
+execute({ headers: [[ 'x-foo', 'boom' ], [ 'cookie', 'a=1; b=2; c=3' ]] });
+execute({ headers: [
+ [ 'x-foo', 'boom' ], [ 'cookie', [ 'a=1', 'b=2', 'c=3' ]]
+] });
+execute({ headers: [
+ [ 'x-foo', 'boom' ], [ 'cookie', 'a=1' ],
+ [ 'cookie', 'b=2' ], [ 'cookie', 'c=3']
+] });
+
+// Authorization and Host header both missing from the second
+execute({ auth: 'foo:bar', headers:
+ { 'x-foo': 'boom', 'cookie': 'a=1; b=2; c=3' } });
+execute({ auth: 'foo:bar', headers: [
+ [ 'x-foo', 'boom' ], [ 'cookie', 'a=1' ],
+ [ 'cookie', 'b=2' ], [ 'cookie', 'c=3']
+] });