package-rebuilds/pkgs/node-undici/node-undici-5.28.4+dfsg1+~cs23.12.11/test/get-head-body.js
Fabian Grünbichler afee63929c add node-undici for libgit2 1.8.1
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
2024-09-10 11:23:24 +02:00

185 lines
4.0 KiB
JavaScript

'use strict'
const { test } = require('tap')
const { Client } = require('..')
const { createServer } = require('http')
const { Readable } = require('stream')
const { kConnect } = require('../lib/core/symbols')
const { kBusy } = require('../lib/core/symbols')
const { wrapWithAsyncIterable } = require('./utils/async-iterators')
test('GET and HEAD with body should reset connection', (t) => {
t.plan(8 + 2)
const server = createServer((req, res) => {
res.end('asd')
})
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.on('disconnect', () => {
t.pass()
})
client.request({
path: '/',
body: 'asd',
method: 'GET'
}, (err, data) => {
t.error(err)
data.body.resume()
})
const emptyBody = new Readable({
read () {}
})
emptyBody.push(null)
client.request({
path: '/',
body: emptyBody,
method: 'GET'
}, (err, data) => {
t.error(err)
data.body.resume()
})
client.request({
path: '/',
body: new Readable({
read () {
this.push(null)
}
}),
method: 'GET'
}, (err, data) => {
t.error(err)
data.body.resume()
})
client.request({
path: '/',
body: new Readable({
read () {
this.push('asd')
this.push(null)
}
}),
method: 'GET'
}, (err, data) => {
t.error(err)
data.body.resume()
})
client.request({
path: '/',
body: [],
method: 'GET'
}, (err, data) => {
t.error(err)
data.body.resume()
})
client.request({
path: '/',
body: wrapWithAsyncIterable(new Readable({
read () {
this.push(null)
}
})),
method: 'GET'
}, (err, data) => {
t.error(err)
data.body.resume()
})
client.request({
path: '/',
body: wrapWithAsyncIterable(new Readable({
read () {
this.push('asd')
this.push(null)
}
})),
method: 'GET'
}, (err, data) => {
t.error(err)
data.body.resume()
})
})
})
// TODO: Avoid external dependency.
// test('GET with body should work when target parses body as request', (t) => {
// t.plan(4)
// // This URL will send double responses when receiving a
// // GET request with body.
// const client = new Client('http://feeds.bbci.co.uk')
// t.teardown(client.close.bind(client))
// client.request({ method: 'GET', path: '/news/rss.xml', body: 'asd' }, (err, data) => {
// t.error(err)
// t.equal(data.statusCode, 200)
// data.body.resume()
// })
// client.request({ method: 'GET', path: '/news/rss.xml', body: 'asd' }, (err, data) => {
// t.error(err)
// t.equal(data.statusCode, 200)
// data.body.resume()
// })
// })
test('HEAD should reset connection', (t) => {
t.plan(8)
const server = createServer((req, res) => {
res.end('asd')
})
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.once('disconnect', () => {
t.pass()
})
client.request({
path: '/',
method: 'HEAD'
}, (err, data) => {
t.error(err)
data.body.resume()
})
t.equal(client[kBusy], true)
client.request({
path: '/',
method: 'HEAD'
}, (err, data) => {
t.error(err)
data.body.resume()
client.once('disconnect', () => {
client[kConnect](() => {
client.request({
path: '/',
method: 'HEAD'
}, (err, data) => {
t.error(err)
data.body.resume()
data.body.on('end', () => {
t.pass()
})
})
t.equal(client[kBusy], true)
})
})
})
t.equal(client[kBusy], true)
})
})