mirror of
https://git.proxmox.com/git/package-rebuilds
synced 2025-08-21 21:19:51 +00:00
185 lines
4.0 KiB
JavaScript
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)
|
|
})
|
|
})
|