@@ -46,6 +46,52 @@ describe('worker_threads', () => {
4646 ` )
4747 expect ( result ) . toBe ( threadId )
4848 } )
49+
50+ test ( 'channel is closed when isolated' , async ( ) => {
51+ const pool = createPool ( {
52+ runtime : 'worker_threads' ,
53+ isolateWorkers : true ,
54+ minThreads : 2 ,
55+ maxThreads : 2 ,
56+ } )
57+
58+ const events : string [ ] = [ ]
59+
60+ await pool . run ( '' , { channel : { onClose : ( ) => events . push ( 'call #1' ) } } )
61+ expect ( events ) . toStrictEqual ( [ 'call #1' ] )
62+
63+ await pool . run ( '' , { channel : { onClose : ( ) => events . push ( 'call #2' ) } } )
64+ expect ( events ) . toStrictEqual ( [ 'call #1' , 'call #2' ] )
65+
66+ await pool . run ( '' , { channel : { onClose : ( ) => events . push ( 'call #3' ) } } )
67+ expect ( events ) . toStrictEqual ( [ 'call #1' , 'call #2' , 'call #3' ] )
68+
69+ await pool . destroy ( )
70+ expect ( events ) . toStrictEqual ( [ 'call #1' , 'call #2' , 'call #3' ] )
71+ } )
72+
73+ test ( 'channel is closed when non-isolated' , async ( ) => {
74+ const pool = createPool ( {
75+ runtime : 'worker_threads' ,
76+ isolateWorkers : false ,
77+ minThreads : 2 ,
78+ maxThreads : 2 ,
79+ } )
80+
81+ const events : string [ ] = [ ]
82+
83+ await pool . run ( '' , { channel : { onClose : ( ) => events . push ( 'call #1' ) } } )
84+ expect ( events ) . toStrictEqual ( [ ] )
85+
86+ await pool . run ( '' , { channel : { onClose : ( ) => events . push ( 'call #2' ) } } )
87+ expect ( events ) . toStrictEqual ( [ 'call #1' ] )
88+
89+ await pool . run ( '' , { channel : { onClose : ( ) => events . push ( 'call #3' ) } } )
90+ expect ( events ) . toStrictEqual ( [ 'call #1' , 'call #2' ] )
91+
92+ await pool . destroy ( )
93+ expect ( events ) . toStrictEqual ( [ 'call #1' , 'call #2' , 'call #3' ] )
94+ } )
4995} )
5096
5197describe ( 'child_process' , ( ) => {
@@ -152,6 +198,52 @@ describe('child_process', () => {
152198 response : 'Hello from worker' ,
153199 } )
154200 } )
201+
202+ test ( 'channel is closed when isolated' , async ( ) => {
203+ const pool = createPool ( {
204+ runtime : 'child_process' ,
205+ isolateWorkers : true ,
206+ minThreads : 2 ,
207+ maxThreads : 2 ,
208+ } )
209+
210+ const events : string [ ] = [ ]
211+
212+ await pool . run ( '' , { channel : { onClose : ( ) => events . push ( 'call #1' ) } } )
213+ expect ( events ) . toStrictEqual ( [ 'call #1' ] )
214+
215+ await pool . run ( '' , { channel : { onClose : ( ) => events . push ( 'call #2' ) } } )
216+ expect ( events ) . toStrictEqual ( [ 'call #1' , 'call #2' ] )
217+
218+ await pool . run ( '' , { channel : { onClose : ( ) => events . push ( 'call #3' ) } } )
219+ expect ( events ) . toStrictEqual ( [ 'call #1' , 'call #2' , 'call #3' ] )
220+
221+ await pool . destroy ( )
222+ expect ( events ) . toStrictEqual ( [ 'call #1' , 'call #2' , 'call #3' ] )
223+ } )
224+
225+ test ( 'channel is closed when non-isolated' , async ( ) => {
226+ const pool = createPool ( {
227+ runtime : 'child_process' ,
228+ isolateWorkers : false ,
229+ minThreads : 2 ,
230+ maxThreads : 2 ,
231+ } )
232+
233+ const events : string [ ] = [ ]
234+
235+ await pool . run ( '' , { channel : { onClose : ( ) => events . push ( 'call #1' ) } } )
236+ expect ( events ) . toStrictEqual ( [ ] )
237+
238+ await pool . run ( '' , { channel : { onClose : ( ) => events . push ( 'call #2' ) } } )
239+ expect ( events ) . toStrictEqual ( [ 'call #1' ] )
240+
241+ await pool . run ( '' , { channel : { onClose : ( ) => events . push ( 'call #3' ) } } )
242+ expect ( events ) . toStrictEqual ( [ 'call #1' , 'call #2' ] )
243+
244+ await pool . destroy ( )
245+ expect ( events ) . toStrictEqual ( [ 'call #1' , 'call #2' , 'call #3' ] )
246+ } )
155247} )
156248
157249test ( 'runtime can be changed after recycle' , async ( ) => {
0 commit comments