File tree Expand file tree Collapse file tree 1 file changed +28
-0
lines changed Expand file tree Collapse file tree 1 file changed +28
-0
lines changed Original file line number Diff line number Diff line change 2
2
3
3
const { test } = require ( 'node:test' )
4
4
const assert = require ( 'node:assert' )
5
+ const { setImmediate } = require ( 'node:timers/promises' )
6
+ const { AsyncLocalStorage } = require ( 'node:async_hooks' )
5
7
const { tspl } = require ( '@matteo.collina/tspl' )
6
8
const {
7
9
Response,
@@ -300,3 +302,29 @@ test('fromInnerResponse', () => {
300
302
assert . strictEqual ( getHeadersList ( response [ kHeaders ] ) , innerResponse . headersList )
301
303
assert . strictEqual ( getHeadersGuard ( response [ kHeaders ] ) , 'immutable' )
302
304
} )
305
+
306
+ test ( 'clone body garbage collection' , async ( ) => {
307
+ const asyncLocalStorage = new AsyncLocalStorage ( )
308
+ let ref
309
+
310
+ await new Promise ( resolve => {
311
+ asyncLocalStorage . run ( new Map ( ) , async ( ) => {
312
+ const res = new Response ( 'hello world' )
313
+ const clone = res . clone ( )
314
+
315
+ asyncLocalStorage . getStore ( ) . set ( 'key' , clone )
316
+ ref = new WeakRef ( clone . body )
317
+
318
+ await res . text ( )
319
+ await clone . text ( ) // consume body
320
+
321
+ resolve ( )
322
+ } )
323
+ } )
324
+
325
+ await setImmediate ( )
326
+ global . gc ( )
327
+
328
+ const cloneBody = ref . deref ( )
329
+ assert . equal ( cloneBody , undefined , 'clone body was not garbage collected' )
330
+ } )
You can’t perform that action at this time.
0 commit comments