@@ -5,7 +5,10 @@ fn test_cleanup_by_day_limit() {
5
5
use filetime:: { set_file_mtime, FileTime } ;
6
6
use flexi_logger:: { Cleanup , Criterion , Duplicate , FileSpec , Logger , Naming } ;
7
7
use log:: * ;
8
- use std:: { fs, thread, time:: Duration } ;
8
+ use std:: {
9
+ fs, thread,
10
+ time:: { Duration , Instant , SystemTime } ,
11
+ } ;
9
12
10
13
let directory = test_utils:: dir ( ) ;
11
14
@@ -21,47 +24,37 @@ fn test_cleanup_by_day_limit() {
21
24
. start ( )
22
25
. unwrap ( ) ;
23
26
24
- for i in 0 ..5 {
27
+ // create four "full" log files (r00000, r00001, r00002, rCURRENT)
28
+ for i in 0 ..12 {
25
29
info ! ( "log line {i}" ) ;
26
30
}
27
31
28
32
let mut log_files: Vec < _ > = fs:: read_dir ( & directory)
29
33
. unwrap ( )
30
- . filter_map ( |e | {
31
- let p = e . unwrap ( ) . path ( ) ;
34
+ . filter_map ( |r_dir_entry | {
35
+ let p = r_dir_entry . unwrap ( ) . path ( ) ;
32
36
if p. extension ( ) . map ( |ext| ext == "log" ) . unwrap_or ( false ) {
33
37
Some ( p)
34
38
} else {
35
39
None
36
40
}
37
41
} )
38
42
. collect ( ) ;
39
- let two_days_ago = std:: time:: SystemTime :: now ( ) - Duration :: from_secs ( 2 * 24 * 3600 ) ;
40
- let ft = FileTime :: from_system_time ( two_days_ago) ;
41
- for file in & log_files {
42
- if file. exists ( ) {
43
- let _ = set_file_mtime ( file, ft) ;
44
- }
45
- }
46
43
log_files. sort ( ) ;
47
- let old_file = log_files. first ( ) . expect ( "should have log files" ) ;
48
- let two_days_ago = std:: time:: SystemTime :: now ( ) - Duration :: from_secs ( 2 * 24 * 3600 ) ;
49
- let ft = FileTime :: from_system_time ( two_days_ago) ;
50
- if old_file. exists ( ) {
51
- set_file_mtime ( old_file, ft) . unwrap ( ) ;
52
- }
53
44
54
- for i in 0 .. 3 {
55
- info ! ( "trigger cleanup {i}" ) ;
56
- thread :: sleep ( Duration :: from_millis ( 120 ) ) ;
57
- }
45
+ // artificially age the first file...
46
+ let first_file = log_files . first ( ) . unwrap ( ) ;
47
+ let two_days_ago = SystemTime :: now ( ) - Duration :: from_secs ( 2 * 24 * 3600 ) ;
48
+ set_file_mtime ( first_file , FileTime :: from_system_time ( two_days_ago ) ) . unwrap ( ) ;
58
49
59
- let start = std:: time:: Instant :: now ( ) ;
60
- while old_file. exists ( ) && start. elapsed ( ) . as_secs ( ) < 2 {
50
+ // ...and ensure it gets deleted automatically with the next rotation
51
+ info ! ( "add line to trigger the cleanup" ) ;
52
+ let start = Instant :: now ( ) ;
53
+ while first_file. exists ( ) && start. elapsed ( ) . as_secs ( ) < 2 {
61
54
thread:: sleep ( Duration :: from_millis ( 50 ) ) ;
62
55
}
63
56
assert ! (
64
- !old_file . exists( ) ,
57
+ !first_file . exists( ) ,
65
58
"old file should be deleted by day_limit cleanup"
66
59
) ;
67
60
}
0 commit comments