add hw2
This commit is contained in:
55
node_modules/thread-stream/test/never-drain.test.js
generated
vendored
Normal file
55
node_modules/thread-stream/test/never-drain.test.js
generated
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
const { test } = require('tap')
|
||||
const ThreadStream = require('../index')
|
||||
const { join } = require('path')
|
||||
|
||||
function retryUntilTimeout (fn, timeout) {
|
||||
const start = Date.now()
|
||||
return new Promise((resolve, reject) => {
|
||||
async function run () {
|
||||
if (fn()) {
|
||||
resolve()
|
||||
return
|
||||
}
|
||||
|
||||
if (Date.now() - start >= timeout) {
|
||||
reject(new Error('timeout'))
|
||||
return
|
||||
}
|
||||
setTimeout(run, 10)
|
||||
}
|
||||
|
||||
run()
|
||||
})
|
||||
}
|
||||
|
||||
test('emit warning when the worker gracefully exit without the stream ended', async function (t) {
|
||||
const expectedWarning = 'ThreadStream: process exited before destination stream was drained. this may indicate that the destination stream try to write to a another missing stream'
|
||||
const stream = new ThreadStream({
|
||||
filename: join(__dirname, 'to-next.js')
|
||||
})
|
||||
stream.unref()
|
||||
|
||||
let streamWarning
|
||||
function saveWarning (e) {
|
||||
if (e.message === expectedWarning) {
|
||||
streamWarning = e
|
||||
}
|
||||
}
|
||||
process.on('warning', saveWarning)
|
||||
|
||||
const data = 'hello'.repeat(10)
|
||||
for (let i = 0; i < 1000; i++) {
|
||||
if (streamWarning?.message === expectedWarning) {
|
||||
break
|
||||
}
|
||||
stream.write(data)
|
||||
await new Promise((resolve) => {
|
||||
setTimeout(resolve, 1)
|
||||
})
|
||||
}
|
||||
|
||||
process.off('warning', saveWarning)
|
||||
t.equal(streamWarning?.message, expectedWarning)
|
||||
|
||||
await retryUntilTimeout(() => stream.worker.exited === true, 3000)
|
||||
})
|
||||
Reference in New Issue
Block a user