|
| 1 | +'use strict' |
| 2 | + |
| 3 | +const { test, after } = require('node:test') |
| 4 | +const { createServer } = require('node:http') |
| 5 | +const { once } = require('node:events') |
| 6 | +const { tspl } = require('@matteo.collina/tspl') |
| 7 | + |
| 8 | +const { Agent, request } = require('..') |
| 9 | + |
| 10 | +// https://github.com/nodejs/undici/issues/4806 |
| 11 | +test('Agent clientTtl cleanup does not trigger unhandled rejections', async (t) => { |
| 12 | + t = tspl(t, { plan: 2 }) |
| 13 | + |
| 14 | + const server = createServer((req, res) => { |
| 15 | + res.end('ok') |
| 16 | + }) |
| 17 | + |
| 18 | + after(() => server.close()) |
| 19 | + |
| 20 | + server.listen(0, async () => { |
| 21 | + const agent = new Agent({ clientTtl: 10 }) |
| 22 | + after(async () => agent.close()) |
| 23 | + |
| 24 | + const onUnhandled = (err) => t.fail(err) |
| 25 | + process.once('unhandledRejection', onUnhandled) |
| 26 | + after(() => process.removeListener('unhandledRejection', onUnhandled)) |
| 27 | + |
| 28 | + const origin = `http://localhost:${server.address().port}` |
| 29 | + |
| 30 | + const res1 = await request(origin, { dispatcher: agent }) |
| 31 | + t.strictEqual(res1.statusCode, 200) |
| 32 | + |
| 33 | + await new Promise(resolve => setTimeout(resolve, 20)) |
| 34 | + |
| 35 | + const res2 = await request(origin, { dispatcher: agent }) |
| 36 | + t.strictEqual(res2.statusCode, 200) |
| 37 | + res2.body.resume() |
| 38 | + await once(res2.body, 'end') |
| 39 | + |
| 40 | + await new Promise(resolve => setTimeout(resolve, 20)) |
| 41 | + }) |
| 42 | + |
| 43 | + await t.completed |
| 44 | +}) |
0 commit comments