summaryrefslogtreecommitdiffstats
path: root/test/parser-issues.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--test/parser-issues.js114
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', () => {})
+ })
+ })
+})