@@ -381,3 +381,59 @@ func TestActions(t *testing.T) {
381381 assert .True (t , actions .Has (FileModified ))
382382 assert .True (t , actions .Has (FileDeleted ))
383383}
384+
385+ func TestMultipleEvents (t * testing.T ) {
386+ l , err := NewListener ("/" , 4096 , true )
387+ assert .Nil (t , err )
388+ assert .NotNil (t , l )
389+ go l .Start ()
390+ defer l .Stop ()
391+
392+ watchDir := t .TempDir ()
393+ actions := FileOrDirCreated .Or (FileModified .Or (FileDeleted ))
394+ l .AddWatch (watchDir , actions )
395+ testFile := fmt .Sprintf ("%s/test.txt" , watchDir )
396+ pid , err := runAsCmd ("touch" , testFile ) // create file
397+ assert .Nil (t , err )
398+ select {
399+ case <- time .After (100 * time .Millisecond ):
400+ t .Error ("Timeout Error: FileCreated event not received" )
401+ case event := <- l .Events :
402+ assert .Equal (t , fmt .Sprintf ("%s/%s" , event .Path , event .FileName ), testFile )
403+ assert .Equal (t , event .Pid , pid )
404+ assert .True (t , event .Actions .Has (FileCreated ))
405+ t .Logf ("Received: (%s)" , event )
406+ }
407+ touchPid := pid
408+
409+ // modify file
410+ os .WriteFile (testFile , []byte ("test string" ), 0666 )
411+ pid = os .Getpid ()
412+ select {
413+ case <- time .After (100 * time .Millisecond ):
414+ t .Error ("Timeout Error: FileModified event not received" )
415+ case event := <- l .Events :
416+ assert .Equal (t , fmt .Sprintf ("%s/%s" , event .Path , event .FileName ), testFile )
417+ assert .Equal (t , event .Pid , pid )
418+ assert .True (t , event .Actions .Has (FileModified ))
419+ t .Logf ("Received: (%s)" , event )
420+ }
421+
422+ t .Logf ("Pids: Self(%d), Touch(%d)" , pid , touchPid )
423+ // NOTE: os.WriteFile sends two modify events; so draining them
424+ for len (l .Events ) > 0 {
425+ e := <- l .Events
426+ t .Logf ("Drain-Event: (%s)" , e )
427+ }
428+ pid , err = runAsCmd ("rm" , "-f" , testFile )
429+ assert .Nil (t , err )
430+ select {
431+ case <- time .After (100 * time .Millisecond ):
432+ t .Error ("Timeout Error: FileDeleted event not received" )
433+ case event := <- l .Events :
434+ assert .Equal (t , fmt .Sprintf ("%s/%s" , event .Path , event .FileName ), testFile )
435+ assert .Equal (t , event .Pid , pid )
436+ assert .True (t , event .Actions .Has (FileDeleted ))
437+ t .Logf ("Received: (%s)" , event )
438+ }
439+ }
0 commit comments