diff options
Diffstat (limited to 'test/max-response-size.js')
-rw-r--r-- | test/max-response-size.js | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/test/max-response-size.js b/test/max-response-size.js new file mode 100644 index 0000000..75bfade --- /dev/null +++ b/test/max-response-size.js @@ -0,0 +1,105 @@ +'use strict' + +const { test } = require('tap') +const { Client, errors } = require('..') +const { createServer } = require('http') + +test('max response size', (t) => { + t.plan(4) + + t.test('default max default size should allow all responses', (t) => { + t.plan(3) + + const server = createServer() + t.teardown(server.close.bind(server)) + + server.on('request', (req, res) => { + res.end('hello') + }) + + server.listen(0, () => { + const client = new Client(`http://localhost:${server.address().port}`, { maxResponseSize: -1 }) + t.teardown(client.close.bind(client)) + + client.request({ path: '/', method: 'GET' }, (err, { statusCode, body }) => { + t.error(err) + t.equal(statusCode, 200) + const bufs = [] + body.on('data', (buf) => { + bufs.push(buf) + }) + body.on('end', () => { + t.equal('hello', Buffer.concat(bufs).toString('utf8')) + }) + }) + }) + }) + + t.test('max response size set to zero should allow only empty responses', (t) => { + t.plan(3) + + const server = createServer() + t.teardown(server.close.bind(server)) + + server.on('request', (req, res) => { + res.end() + }) + + server.listen(0, () => { + const client = new Client(`http://localhost:${server.address().port}`, { maxResponseSize: 0 }) + t.teardown(client.close.bind(client)) + + client.request({ path: '/', method: 'GET' }, (err, { statusCode, body }) => { + t.error(err) + t.equal(statusCode, 200) + const bufs = [] + body.on('data', (buf) => { + bufs.push(buf) + }) + body.on('end', () => { + t.equal('', Buffer.concat(bufs).toString('utf8')) + }) + }) + }) + }) + + t.test('should throw an error if the response is too big', (t) => { + t.plan(3) + + const server = createServer() + t.teardown(server.close.bind(server)) + + server.on('request', (req, res) => { + res.end('hello') + }) + + server.listen(0, () => { + const client = new Client(`http://localhost:${server.address().port}`, { + maxResponseSize: 1 + }) + + t.teardown(client.close.bind(client)) + + client.request({ path: '/', method: 'GET' }, (err, { body }) => { + t.error(err) + body.on('error', (err) => { + t.ok(err) + t.type(err, errors.ResponseExceededMaxSizeError) + }) + }) + }) + }) + + t.test('invalid max response size should throw an error', (t) => { + t.plan(2) + + t.throws(() => { + // eslint-disable-next-line no-new + new Client('http://localhost:3000', { maxResponseSize: 'hello' }) + }, 'maxResponseSize must be a number') + t.throws(() => { + // eslint-disable-next-line no-new + new Client('http://localhost:3000', { maxResponseSize: -2 }) + }, 'maxResponseSize must be greater than or equal to -1') + }) +}) |