@@ -151,3 +151,156 @@ pub(crate) fn kill_tree_internal(
151
151
}
152
152
Ok ( outputs)
153
153
}
154
+
155
+ #[ cfg( test) ]
156
+ mod tests {
157
+ use super :: * ;
158
+
159
+ #[ cfg( windows) ]
160
+ #[ test]
161
+ fn available_max_process_id_windows ( ) {
162
+ assert_eq ! ( get_available_max_process_id( ) , 0xFFFF_FFFF ) ;
163
+ }
164
+
165
+ #[ cfg( target_os = "linux" ) ]
166
+ #[ test]
167
+ fn available_max_process_id_linux ( ) {
168
+ assert_eq ! ( get_available_max_process_id( ) , 0x0040_0000 ) ;
169
+ }
170
+
171
+ #[ cfg( target_os = "macos" ) ]
172
+ #[ test]
173
+ fn available_max_process_id_macos ( ) {
174
+ assert_eq ! ( get_available_max_process_id( ) , 99998 ) ;
175
+ }
176
+
177
+ #[ test]
178
+ fn get_child_process_id_map_no_filter ( ) {
179
+ let process_infos = vec ! [
180
+ ProcessInfo {
181
+ process_id: 1 ,
182
+ parent_process_id: 0 ,
183
+ name: "1" . to_string( ) ,
184
+ } ,
185
+ ProcessInfo {
186
+ process_id: 2 ,
187
+ parent_process_id: 1 ,
188
+ name: "2" . to_string( ) ,
189
+ } ,
190
+ ProcessInfo {
191
+ process_id: 3 ,
192
+ parent_process_id: 1 ,
193
+ name: "3" . to_string( ) ,
194
+ } ,
195
+ ] ;
196
+ let filter = |_: & ProcessInfo | false ;
197
+ let map = get_child_process_id_map ( & process_infos, filter) ;
198
+ assert_eq ! ( map. len( ) , 2 ) ;
199
+ }
200
+
201
+ #[ test]
202
+ fn get_child_process_id_map_filter_process_id_and_parant_process_id_is_same ( ) {
203
+ let process_infos = vec ! [
204
+ ProcessInfo {
205
+ process_id: 1 ,
206
+ parent_process_id: 1 ,
207
+ name: "1" . to_string( ) ,
208
+ } ,
209
+ ProcessInfo {
210
+ process_id: 2 ,
211
+ parent_process_id: 1 ,
212
+ name: "2" . to_string( ) ,
213
+ } ,
214
+ ProcessInfo {
215
+ process_id: 3 ,
216
+ parent_process_id: 1 ,
217
+ name: "3" . to_string( ) ,
218
+ } ,
219
+ ] ;
220
+ let filter =
221
+ |process_info : & ProcessInfo | process_info. process_id == process_info. parent_process_id ;
222
+ let map = get_child_process_id_map ( & process_infos, filter) ;
223
+ assert_eq ! ( map. len( ) , 1 ) ;
224
+ }
225
+
226
+ #[ test]
227
+ fn get_process_info_map_test ( ) {
228
+ let process_infos = vec ! [
229
+ ProcessInfo {
230
+ process_id: 1 ,
231
+ parent_process_id: 0 ,
232
+ name: "1" . to_string( ) ,
233
+ } ,
234
+ ProcessInfo {
235
+ process_id: 2 ,
236
+ parent_process_id: 1 ,
237
+ name: "2" . to_string( ) ,
238
+ } ,
239
+ ProcessInfo {
240
+ process_id: 3 ,
241
+ parent_process_id: 1 ,
242
+ name: "3" . to_string( ) ,
243
+ } ,
244
+ ] ;
245
+ let map = get_process_info_map ( process_infos) ;
246
+ assert_eq ! ( map. len( ) , 3 ) ;
247
+ }
248
+
249
+ #[ test]
250
+ fn get_process_ids_to_kill_test ( ) {
251
+ let process_infos = vec ! [
252
+ ProcessInfo {
253
+ process_id: 1 ,
254
+ parent_process_id: 0 ,
255
+ name: "1" . to_string( ) ,
256
+ } ,
257
+ ProcessInfo {
258
+ process_id: 2 ,
259
+ parent_process_id: 1 ,
260
+ name: "2" . to_string( ) ,
261
+ } ,
262
+ ProcessInfo {
263
+ process_id: 3 ,
264
+ parent_process_id: 1 ,
265
+ name: "3" . to_string( ) ,
266
+ } ,
267
+ ] ;
268
+ let child_process_id_map =
269
+ get_child_process_id_map ( & process_infos, |_: & ProcessInfo | false ) ;
270
+ let config = Config :: default ( ) ;
271
+ let process_ids_to_kill = get_process_ids_to_kill ( 1 , & child_process_id_map, & config) ;
272
+ assert_eq ! ( process_ids_to_kill, vec![ 1 , 2 , 3 ] ) ;
273
+ }
274
+
275
+ #[ test]
276
+ fn parse_kill_output_test ( ) {
277
+ let mut process_info_map = ProcessInfoMap :: new ( ) ;
278
+ process_info_map. insert (
279
+ 1 ,
280
+ ProcessInfo {
281
+ process_id : 1 ,
282
+ parent_process_id : 0 ,
283
+ name : "1" . to_string ( ) ,
284
+ } ,
285
+ ) ;
286
+ let kill_output = KillOutput :: Killed { process_id : 1 } ;
287
+ let output = parse_kill_output ( kill_output, & mut process_info_map) . expect ( "output is None" ) ;
288
+ match output {
289
+ Output :: Killed {
290
+ process_id,
291
+ parent_process_id,
292
+ name,
293
+ } => {
294
+ assert_eq ! ( process_id, 1 ) ;
295
+ assert_eq ! ( parent_process_id, 0 ) ;
296
+ assert_eq ! ( name, "1" ) ;
297
+ }
298
+ Output :: MaybeAlreadyTerminated {
299
+ process_id : _process_id,
300
+ source : _source,
301
+ } => {
302
+ panic ! ( "output is MaybeAlreadyTerminated" ) ;
303
+ }
304
+ }
305
+ }
306
+ }
0 commit comments