@@ -204,6 +204,14 @@ impl<'cfg> NextestProfile<'cfg> {
204
204
. unwrap_or ( self . default_profile . slow_timeout )
205
205
}
206
206
207
+ /// Returns the time after which a child process that hasn't closed its handles is marked as
208
+ /// leaky.
209
+ pub fn leak_timeout ( & self ) -> Duration {
210
+ self . custom_profile
211
+ . and_then ( |profile| profile. leak_timeout )
212
+ . unwrap_or ( self . default_profile . leak_timeout )
213
+ }
214
+
207
215
/// Returns the test status level.
208
216
pub fn status_level ( & self ) -> StatusLevel {
209
217
self . custom_profile
@@ -243,6 +251,7 @@ impl<'cfg> NextestProfile<'cfg> {
243
251
pub fn overrides_for ( & self , query : & TestQuery < ' _ > ) -> ProfileOverrides {
244
252
let mut retries = None ;
245
253
let mut slow_timeout = None ;
254
+ let mut leak_timeout = None ;
246
255
247
256
for & override_ in & self . overrides {
248
257
if !override_. expr . matches_test ( query) {
@@ -254,11 +263,15 @@ impl<'cfg> NextestProfile<'cfg> {
254
263
if slow_timeout. is_none ( ) && override_. data . slow_timeout . is_some ( ) {
255
264
slow_timeout = override_. data . slow_timeout ;
256
265
}
266
+ if leak_timeout. is_none ( ) && override_. data . leak_timeout . is_some ( ) {
267
+ leak_timeout = override_. data . leak_timeout ;
268
+ }
257
269
}
258
270
259
271
ProfileOverrides {
260
272
retries,
261
273
slow_timeout,
274
+ leak_timeout,
262
275
}
263
276
}
264
277
@@ -288,6 +301,7 @@ impl<'cfg> NextestProfile<'cfg> {
288
301
pub struct ProfileOverrides {
289
302
retries : Option < usize > ,
290
303
slow_timeout : Option < SlowTimeout > ,
304
+ leak_timeout : Option < Duration > ,
291
305
}
292
306
293
307
impl ProfileOverrides {
@@ -300,6 +314,11 @@ impl ProfileOverrides {
300
314
pub fn slow_timeout ( & self ) -> Option < SlowTimeout > {
301
315
self . slow_timeout
302
316
}
317
+
318
+ /// Returns the leak timeout for this test.
319
+ pub fn leak_timeout ( & self ) -> Option < Duration > {
320
+ self . leak_timeout
321
+ }
303
322
}
304
323
305
324
/// JUnit configuration for nextest, returned by a [`NextestProfile`].
@@ -376,6 +395,8 @@ struct DefaultProfileImpl {
376
395
fail_fast : bool ,
377
396
#[ serde( deserialize_with = "require_deserialize_slow_timeout" ) ]
378
397
slow_timeout : SlowTimeout ,
398
+ #[ serde( with = "humantime_serde" ) ]
399
+ leak_timeout : Duration ,
379
400
#[ serde( default ) ]
380
401
overrides : Vec < ProfileOverrideSource > ,
381
402
junit : DefaultJunitImpl ,
@@ -547,6 +568,8 @@ struct CustomProfileImpl {
547
568
fail_fast : Option < bool > ,
548
569
#[ serde( default , deserialize_with = "deserialize_slow_timeout" ) ]
549
570
slow_timeout : Option < SlowTimeout > ,
571
+ #[ serde( default , with = "humantime_serde::option" ) ]
572
+ leak_timeout : Option < Duration > ,
550
573
#[ serde( default ) ]
551
574
overrides : Vec < ProfileOverrideSource > ,
552
575
#[ serde( default ) ]
@@ -571,6 +594,8 @@ struct ProfileOverrideData {
571
594
retries : Option < usize > ,
572
595
#[ serde( default , deserialize_with = "deserialize_slow_timeout" ) ]
573
596
slow_timeout : Option < SlowTimeout > ,
597
+ #[ serde( default ) ]
598
+ leak_timeout : Option < Duration > ,
574
599
}
575
600
576
601
#[ derive( Clone , Debug , Default ) ]
0 commit comments