Co-authored-by: Tomas Della Vedova <delvedor@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
39ce8778a5
commit
f135ba7da2
@ -82,6 +82,7 @@ class Connection {
|
|||||||
|
|
||||||
request (params, callback) {
|
request (params, callback) {
|
||||||
this._openRequests++
|
this._openRequests++
|
||||||
|
let cleanedListeners = false
|
||||||
|
|
||||||
const requestParams = this.buildRequestObject(params)
|
const requestParams = this.buildRequestObject(params)
|
||||||
// https://github.com/nodejs/node/commit/b961d9fd83
|
// https://github.com/nodejs/node/commit/b961d9fd83
|
||||||
@ -134,7 +135,7 @@ class Connection {
|
|||||||
if (isStream(params.body) === true) {
|
if (isStream(params.body) === true) {
|
||||||
pump(params.body, request, err => {
|
pump(params.body, request, err => {
|
||||||
/* istanbul ignore if */
|
/* istanbul ignore if */
|
||||||
if (err != null) {
|
if (err != null && cleanedListeners === false) {
|
||||||
cleanListeners()
|
cleanListeners()
|
||||||
this._openRequests--
|
this._openRequests--
|
||||||
callback(err, null)
|
callback(err, null)
|
||||||
@ -151,6 +152,7 @@ class Connection {
|
|||||||
request.removeListener('timeout', onTimeout)
|
request.removeListener('timeout', onTimeout)
|
||||||
request.removeListener('error', onError)
|
request.removeListener('error', onError)
|
||||||
request.removeListener('abort', onAbort)
|
request.removeListener('abort', onAbort)
|
||||||
|
cleanedListeners = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -23,6 +23,7 @@ const { test } = require('tap')
|
|||||||
const { inspect } = require('util')
|
const { inspect } = require('util')
|
||||||
const { URL } = require('url')
|
const { URL } = require('url')
|
||||||
const { Agent } = require('http')
|
const { Agent } = require('http')
|
||||||
|
const { Readable } = require('stream')
|
||||||
const hpagent = require('hpagent')
|
const hpagent = require('hpagent')
|
||||||
const intoStream = require('into-stream')
|
const intoStream = require('into-stream')
|
||||||
const { buildServer } = require('../utils')
|
const { buildServer } = require('../utils')
|
||||||
@ -918,3 +919,31 @@ test('Proxy agent (https)', t => {
|
|||||||
|
|
||||||
t.true(connection.agent instanceof hpagent.HttpsProxyAgent)
|
t.true(connection.agent instanceof hpagent.HttpsProxyAgent)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('Abort with a slow body', t => {
|
||||||
|
t.plan(1)
|
||||||
|
|
||||||
|
const connection = new Connection({
|
||||||
|
url: new URL('https://localhost:9200'),
|
||||||
|
proxy: 'http://localhost:8080'
|
||||||
|
})
|
||||||
|
|
||||||
|
const slowBody = new Readable({
|
||||||
|
read (size) {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.push('{"size":1, "query":{"match_all":{}}}')
|
||||||
|
this.push(null) // EOF
|
||||||
|
}, 1000).unref()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const request = connection.request({
|
||||||
|
method: 'GET',
|
||||||
|
path: '/',
|
||||||
|
body: slowBody
|
||||||
|
}, (err, response) => {
|
||||||
|
t.ok(err instanceof RequestAbortedError)
|
||||||
|
})
|
||||||
|
|
||||||
|
setImmediate(() => request.abort())
|
||||||
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user