@@ -20,7 +20,7 @@ public void SetUp()
20
20
filesFromPreviousRuns . ForEach ( File . Delete ) ;
21
21
var directoriesFromPreviousRuns =
22
22
Directory . EnumerateDirectories ( TestContext . CurrentContext . TestDirectory )
23
- . Where ( dirPath => Path . GetDirectoryName ( dirPath ) ? . StartsWith ( "integrationTestLogDir" , StringComparison . InvariantCultureIgnoreCase ) == true )
23
+ . Where ( dirPath => Path . GetFileName ( dirPath ) . StartsWith ( "integrationTestLogDir" , StringComparison . InvariantCultureIgnoreCase ) )
24
24
. ToList ( ) ;
25
25
directoriesFromPreviousRuns . ForEach ( d => Directory . Delete ( d , true ) ) ;
26
26
}
@@ -79,10 +79,10 @@ public void Log4Net_WritesLogFile_AndContentIsCorrectAfterRestart()
79
79
[ Test ]
80
80
public void Log4Net_WritesLogFile_WithRollAndNoAppend_AndContentIsCorrectAfterRestart ( )
81
81
{
82
- for ( int i = 0 ; i < 10 ; i ++ )
82
+ for ( int i = 0 ; i < 20 ; i ++ )
83
83
{
84
84
// Arrange: configure log4net from config file
85
- var config = "log4net.roll.config.xml " ;
85
+ var config = "log4net.roll.config" ;
86
86
string configPath = Path . Combine ( TestContext . CurrentContext . TestDirectory , "Integration" , config ) ;
87
87
var repo = LogManager . CreateRepository ( Guid . NewGuid ( ) . ToString ( ) ) ;
88
88
XmlConfigurator . Configure ( repo , new FileInfo ( configPath ) ) ;
@@ -98,7 +98,66 @@ public void Log4Net_WritesLogFile_WithRollAndNoAppend_AndContentIsCorrectAfterRe
98
98
99
99
// Assert: log file exists and contains expected content
100
100
string [ ] logFiles = Directory . GetFiles ( "integrationTestLogDir_1" ) ;
101
- Assert . That ( logFiles . Length , Is . EqualTo ( 10 ) ) ;
101
+ Assert . That ( logFiles . Length , Is . EqualTo ( 12 + 1 ) ) ;
102
+ }
103
+
104
+ [ Test ]
105
+ public void Log4Net_WritesLogFile_WithMaxSizeRoll_Config_Works ( )
106
+ {
107
+ var logDir = Path . Combine ( TestContext . CurrentContext . TestDirectory , "integrationTestLogDir_maxsizeroll" ) ;
108
+ if ( Directory . Exists ( logDir ) ) Directory . Delete ( logDir , true ) ;
109
+ Directory . CreateDirectory ( logDir ) ;
110
+ var config = "log4net.maxsizeroll.config" ;
111
+ string configPath = Path . Combine ( TestContext . CurrentContext . TestDirectory , "Integration" , config ) ;
112
+ var repo = LogManager . CreateRepository ( Guid . NewGuid ( ) . ToString ( ) ) ;
113
+ log4net . Config . XmlConfigurator . Configure ( repo , new FileInfo ( configPath ) ) ;
114
+ var log = LogManager . GetLogger ( repo . Name , "log" ) ;
115
+ // Write enough lines to trigger rolling
116
+ for ( int i = 0 ; i < 1000 ; ++ i )
117
+ {
118
+ log . Info ( $ "Log entry { i } ") ;
119
+ }
120
+ repo . Shutdown ( ) ;
121
+ // Assert: rolled files exist
122
+ string [ ] logFiles = Directory . GetFiles ( logDir , "*.log" ) ;
123
+ Assert . That ( logFiles . Length , Is . EqualTo ( 4 ) ) ; // 1 current + 3 backups
124
+ // Optionally, check that each file is <= 10KB
125
+ foreach ( var file in logFiles ) Assert . That ( new FileInfo ( file ) . Length , Is . LessThanOrEqualTo ( 10 * 1024 + 100 ) ) ;
126
+ }
127
+
128
+ [ Test ]
129
+ public void Log4Net_WritesLogFile_WithDateAndSizeRoll_Config_Works ( )
130
+ {
131
+ var logDir = Path . Combine ( TestContext . CurrentContext . TestDirectory , "integrationTestLogDir_maxsizerolldate" ) ;
132
+ if ( Directory . Exists ( logDir ) ) Directory . Delete ( logDir , true ) ;
133
+ Directory . CreateDirectory ( logDir ) ;
134
+ var config = "log4net.maxsizeroll_date.config" ;
135
+ string configPath = Path . Combine ( TestContext . CurrentContext . TestDirectory , "Integration" , config ) ;
136
+ var repo = LogManager . CreateRepository ( Guid . NewGuid ( ) . ToString ( ) ) ;
137
+ log4net . Config . XmlConfigurator . Configure ( repo , new FileInfo ( configPath ) ) ;
138
+ var log = LogManager . GetLogger ( repo . Name , "log" ) ;
139
+ // Write enough lines to trigger rolling by size and date
140
+ for ( int i = 1 ; i < 10000 ; ++ i )
141
+ {
142
+ log . Debug ( $ "DateRoll entry { i } ") ;
143
+ if ( i % 5000 == 0 ) System . Threading . Thread . Sleep ( TimeSpan . FromMinutes ( 1 ) ) ; // allow time for date to change if needed
144
+ }
145
+ repo . Shutdown ( ) ;
146
+ // Assert: rolled files exist (date+size pattern)
147
+ string [ ] logFiles = Directory . GetFiles ( logDir , "*.log" ) ;
148
+ Assert . That ( logFiles . Length , Is . EqualTo ( 8 ) ) ;
149
+ // Group files by date part in the filename (yyyy-MM-dd-mm)
150
+ var dateGroups = logFiles
151
+ . Select ( f => Path . GetFileNameWithoutExtension ( f ) )
152
+ . Select ( name => name . Split ( '.' ) . First ( ) )
153
+ . GroupBy ( date => date )
154
+ . ToDictionary ( g => g . Key , g => g . Count ( ) ) ;
155
+ // Assert that at least one group exists and print group counts
156
+ Assert . That ( dateGroups . Count , Is . EqualTo ( 2 ) ) ;
157
+ foreach ( var group in dateGroups )
158
+ {
159
+ TestContext . WriteLine ( $ "Date group: { group . Key } , file count: { group . Value } ") ;
160
+ }
102
161
}
103
162
}
104
163
}
0 commit comments