@@ -46,6 +46,52 @@ describe('worker_threads', () => {
46
46
` )
47
47
expect ( result ) . toBe ( threadId )
48
48
} )
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
+ } )
49
95
} )
50
96
51
97
describe ( 'child_process' , ( ) => {
@@ -152,6 +198,52 @@ describe('child_process', () => {
152
198
response : 'Hello from worker' ,
153
199
} )
154
200
} )
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
+ } )
155
247
} )
156
248
157
249
test ( 'runtime can be changed after recycle' , async ( ) => {
0 commit comments