summaryrefslogtreecommitdiffstats
path: root/test/headers-as-array.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/headers-as-array.js')
-rw-r--r--test/headers-as-array.js131
1 files changed, 131 insertions, 0 deletions
diff --git a/test/headers-as-array.js b/test/headers-as-array.js
new file mode 100644
index 0000000..fd8bb5d
--- /dev/null
+++ b/test/headers-as-array.js
@@ -0,0 +1,131 @@
+'use strict'
+
+const { test } = require('tap')
+const { Client, errors } = require('..')
+const { createServer } = require('http')
+
+test('handle headers as array', (t) => {
+ t.plan(1)
+ const headers = ['a', '1', 'b', '2', 'c', '3']
+
+ const server = createServer((req, res) => {
+ t.match(req.headers, { a: '1', b: '2', c: '3' })
+ res.end()
+ })
+ t.teardown(server.close.bind(server))
+ server.listen(0, () => {
+ const client = new Client(`http://localhost:${server.address().port}`)
+ t.teardown(client.destroy.bind(client))
+
+ client.request({
+ path: '/',
+ method: 'GET',
+ headers
+ }, () => {})
+ })
+})
+
+test('handle multi-valued headers as array', (t) => {
+ t.plan(1)
+ const headers = ['a', '1', 'b', '2', 'c', '3', 'd', '4', 'd', '5']
+
+ const server = createServer((req, res) => {
+ t.match(req.headers, { a: '1', b: '2', c: '3', d: '4, 5' })
+ res.end()
+ })
+ t.teardown(server.close.bind(server))
+ server.listen(0, () => {
+ const client = new Client(`http://localhost:${server.address().port}`)
+ t.teardown(client.destroy.bind(client))
+
+ client.request({
+ path: '/',
+ method: 'GET',
+ headers
+ }, () => {})
+ })
+})
+
+test('handle headers with array', (t) => {
+ t.plan(1)
+ const headers = { a: '1', b: '2', c: '3', d: ['4'] }
+
+ const server = createServer((req, res) => {
+ t.match(req.headers, { a: '1', b: '2', c: '3', d: '4' })
+ res.end()
+ })
+ t.teardown(server.close.bind(server))
+ server.listen(0, () => {
+ const client = new Client(`http://localhost:${server.address().port}`)
+ t.teardown(client.destroy.bind(client))
+
+ client.request({
+ path: '/',
+ method: 'GET',
+ headers
+ }, () => {})
+ })
+})
+
+test('handle multi-valued headers', (t) => {
+ t.plan(1)
+ const headers = { a: '1', b: '2', c: '3', d: ['4', '5'] }
+
+ const server = createServer((req, res) => {
+ t.match(req.headers, { a: '1', b: '2', c: '3', d: '4, 5' })
+ res.end()
+ })
+ t.teardown(server.close.bind(server))
+ server.listen(0, () => {
+ const client = new Client(`http://localhost:${server.address().port}`)
+ t.teardown(client.destroy.bind(client))
+
+ client.request({
+ path: '/',
+ method: 'GET',
+ headers
+ }, () => {})
+ })
+})
+
+test('fail if headers array is odd', (t) => {
+ t.plan(2)
+ const headers = ['a', '1', 'b', '2', 'c', '3', 'd']
+
+ const server = createServer((req, res) => { res.end() })
+ t.teardown(server.close.bind(server))
+ server.listen(0, () => {
+ const client = new Client(`http://localhost:${server.address().port}`)
+ t.teardown(client.destroy.bind(client))
+
+ client.request({
+ path: '/',
+ method: 'GET',
+ headers
+ }, (err) => {
+ t.type(err, errors.InvalidArgumentError)
+ t.equal(err.message, 'headers array must be even')
+ })
+ })
+})
+
+test('fail if headers is not an object or an array', (t) => {
+ t.plan(2)
+ const headers = 'not an object or an array'
+
+ const server = createServer((req, res) => { res.end() })
+ t.teardown(server.close.bind(server))
+ server.listen(0, () => {
+ const client = new Client(`http://localhost:${server.address().port}`)
+ t.teardown(client.destroy.bind(client))
+
+ client.request({
+ path: '/',
+ method: 'GET',
+ headers
+ }, (err) => {
+ t.ok(err instanceof errors.InvalidArgumentError)
+ t.equal(err.message, 'headers must be an object or an array')
+ })
+ })
+})