Skip to content

Commit

Permalink
fix: Client.stream writableNeedDrain
Browse files Browse the repository at this point in the history
  • Loading branch information
ronag committed Nov 2, 2020
1 parent 52deded commit 76010a2
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 0 deletions.
6 changes: 6 additions & 0 deletions lib/client-stream.js
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,12 @@ class StreamHandler extends AsyncResource {
})

this.res = res

const needDrain = res.writableNeedDrain !== undefined
? res.writableNeedDrain
: res._writableState && res._writableState.needDrain

return needDrain !== true
}

onData (chunk) {
Expand Down
1 change: 1 addition & 0 deletions lib/core/request.js
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ class Request {

onBody (chunk, offset, length) {
assert(!this.aborted)
assert(!this[kPaused])

if (this[kTimeout] && this[kTimeout].refresh) {
this[kTimeout].refresh()
Expand Down
45 changes: 45 additions & 0 deletions test/client-stream.js
Original file line number Diff line number Diff line change
Expand Up @@ -657,3 +657,48 @@ test('stream body destroyed on invalid callback', (t) => {
}
})
})

test('stream needDrain', (t) => {
t.plan(1)

const server = createServer((req, res) => {
res.end(Buffer.alloc(4096))
})
t.tearDown(server.close.bind(server))

server.listen(0, async () => {
const client = new Client(`http://localhost:${server.address().port}`)
t.tearDown(() => {
console.error(3)
client.destroy()
})

const dst = new PassThrough()
dst.pause()

while (dst.write(Buffer.alloc(4096))) {

}

const orgWrite = dst.write
dst.write = () => t.fail()
const p = client.stream({
path: '/',
method: 'GET'
}, () => {
return dst
})

setTimeout(() => {
dst.write = (...args) => {
console.error("ASD")
orgWrite.call(dst, ...args)
}
dst.resume()
}, 1e3)

await p

t.pass()
})
})

0 comments on commit 76010a2

Please sign in to comment.