@@ -295,3 +295,66 @@ func TestGHIssue16(t *testing.T) {
295295 }
296296 defer rl .Close ()
297297}
298+
299+ func TestRotationGenerationalNames (t * testing.T ) {
300+ dir , err := ioutil .TempDir ("" , "file-rotatelogs-generational" )
301+ if ! assert .NoError (t , err , `creating temporary directory should succeed` ) {
302+ return
303+ }
304+ defer os .RemoveAll (dir )
305+
306+ t .Run ("Rotate over unchanged pattern" , func (t * testing.T ) {
307+ rl , err := rotatelogs .New (
308+ filepath .Join (dir , "unchaged-pattern.log" ),
309+ )
310+ if ! assert .NoError (t , err , `rotatelogs.New should succeed` ) {
311+ return
312+ }
313+
314+ seen := map [string ]struct {}{}
315+ for i := 0 ; i < 10 ; i ++ {
316+ rl .Write ([]byte ("Hello, World!" ))
317+ if ! assert .NoError (t , rl .Rotate (), "rl.Rotate should succeed" ) {
318+ return
319+ }
320+
321+ // Because every call to Rotate should yield a new log file,
322+ // and the previous files already exist, the filenames should share
323+ // the same prefix and have a unique suffix
324+ fn := filepath .Base (rl .CurrentFileName ())
325+ if ! assert .True (t , strings .HasPrefix (fn , "unchaged-pattern.log" ), "prefix for all filenames should match" ) {
326+ return
327+ }
328+ suffix := strings .TrimPrefix (fn , "unchanged-pattern.log" )
329+ if _ , ok := seen [suffix ]; ! assert .False (t , ok , `filename suffix %s should be unique` , suffix ) {
330+ return
331+ }
332+ seen [suffix ] = struct {}{}
333+ }
334+ defer rl .Close ()
335+ })
336+ t .Run ("Rotate over pattern change over every second" , func (t * testing.T ) {
337+ rl , err := rotatelogs .New (
338+ filepath .Join (dir , "every-second-pattern-%Y%m%d%H%M%S.log" ),
339+ rotatelogs .WithRotationTime (time .Nanosecond ),
340+ )
341+ if ! assert .NoError (t , err , `rotatelogs.New should succeed` ) {
342+ return
343+ }
344+
345+ for i := 0 ; i < 10 ; i ++ {
346+ time .Sleep (time .Second )
347+ rl .Write ([]byte ("Hello, World!" ))
348+ if ! assert .NoError (t , rl .Rotate (), "rl.Rotate should succeed" ) {
349+ return
350+ }
351+
352+ // because every new Write should yield a new logfile,
353+ // every rorate should be create a filename ending with a .1
354+ if ! assert .True (t , strings .HasSuffix (rl .CurrentFileName (), ".1" ), "log name should end with .1" ) {
355+ return
356+ }
357+ }
358+ defer rl .Close ()
359+ })
360+ }
0 commit comments