Skip to content

Commit 5287054

Browse files
snyamathimcollina
authored andcommitted
test: add test for memory leak (#3450)
* test: add test for memory leak * lint
1 parent c81f5a7 commit 5287054

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

test/fetch/response.js

+28
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
const { test } = require('node:test')
44
const assert = require('node:assert')
5+
const { setImmediate } = require('node:timers/promises')
6+
const { AsyncLocalStorage } = require('node:async_hooks')
57
const { tspl } = require('@matteo.collina/tspl')
68
const {
79
Response,
@@ -285,3 +287,29 @@ test('fromInnerResponse', () => {
285287
assert.strictEqual(getHeadersList(response[kHeaders]), innerResponse.headersList)
286288
assert.strictEqual(getHeadersGuard(response[kHeaders]), 'immutable')
287289
})
290+
291+
test('clone body garbage collection', async () => {
292+
const asyncLocalStorage = new AsyncLocalStorage()
293+
let ref
294+
295+
await new Promise(resolve => {
296+
asyncLocalStorage.run(new Map(), async () => {
297+
const res = new Response('hello world')
298+
const clone = res.clone()
299+
300+
asyncLocalStorage.getStore().set('key', clone)
301+
ref = new WeakRef(clone.body)
302+
303+
await res.text()
304+
await clone.text() // consume body
305+
306+
resolve()
307+
})
308+
})
309+
310+
await setImmediate()
311+
global.gc()
312+
313+
const cloneBody = ref.deref()
314+
assert.equal(cloneBody, undefined, 'clone body was not garbage collected')
315+
})

0 commit comments

Comments
 (0)