diff options
Diffstat (limited to '')
-rw-r--r-- | test/parser-issues.js | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/test/parser-issues.js b/test/parser-issues.js new file mode 100644 index 0000000..b98edf1 --- /dev/null +++ b/test/parser-issues.js @@ -0,0 +1,114 @@ +const net = require('net') +const { test } = require('tap') +const { Client, errors } = require('..') + +test('https://github.com/mcollina/undici/issues/268', (t) => { + t.plan(2) + + const server = net.createServer(socket => { + socket.write('HTTP/1.1 200 OK\r\n') + socket.write('Transfer-Encoding: chunked\r\n\r\n') + setTimeout(() => { + socket.write('1\r\n') + socket.write('\n\r\n') + setTimeout(() => { + socket.write('1\r\n') + socket.write('\n\r\n') + }, 500) + }, 500) + }) + 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({ + method: 'GET', + path: '/nxt/_changes?feed=continuous&heartbeat=5000', + headersTimeout: 1e3 + }, (err, data) => { + t.error(err) + data.body + .resume() + setTimeout(() => { + t.pass() + data.body.on('error', () => {}) + }, 2e3) + }) + }) +}) + +test('parser fail', (t) => { + t.plan(2) + + const server = net.createServer(socket => { + socket.write('HTT/1.1 200 OK\r\n') + }) + 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({ + method: 'GET', + path: '/' + }, (err, data) => { + t.ok(err) + t.type(err, errors.HTTPParserError) + }) + }) +}) + +test('split header field', (t) => { + t.plan(2) + + const server = net.createServer(socket => { + socket.write('HTTP/1.1 200 OK\r\nA') + setTimeout(() => { + socket.write('SD: asd,asd\r\n\r\n\r\n') + }, 100) + }) + 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({ + method: 'GET', + path: '/' + }, (err, data) => { + t.error(err) + t.equal(data.headers.asd, 'asd,asd') + data.body.destroy().on('error', () => {}) + }) + }) +}) + +test('split header value', (t) => { + t.plan(2) + + const server = net.createServer(socket => { + socket.write('HTTP/1.1 200 OK\r\nASD: asd') + setTimeout(() => { + socket.write(',asd\r\n\r\n\r\n') + }, 100) + }) + 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({ + method: 'GET', + path: '/' + }, (err, data) => { + t.error(err) + t.equal(data.headers.asd, 'asd,asd') + data.body.destroy().on('error', () => {}) + }) + }) +}) |