github.com/Azure/aad-pod-identity@v1.8.17/pkg/filewatcher/filewatcher_test.go (about) 1 package filewatcher 2 3 import ( 4 "os" 5 "testing" 6 "time" 7 8 "github.com/fsnotify/fsnotify" 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func TestFileWatcher(t *testing.T) { 13 tempFile, err := os.CreateTemp("", "") 14 if err != nil { 15 t.Fatal(err) 16 } 17 defer func() { 18 err := os.Remove(tempFile.Name()) 19 assert.NoError(t, err) 20 }() 21 22 writeCh := make(chan string, 1) 23 errCh := make(chan error, 1) 24 fw, err := NewFileWatcher( 25 func(event fsnotify.Event) { 26 if event.Op&fsnotify.Write == fsnotify.Write { 27 writeCh <- event.Name 28 } 29 }, func(err error) { 30 errCh <- err 31 }) 32 assert.NoError(t, err) 33 34 fw.Start(make(chan struct{})) 35 _, err = tempFile.Write([]byte("test0")) 36 assert.NoError(t, err) 37 assert.Len(t, errCh, 0) 38 assert.Len(t, writeCh, 0) 39 40 err = fw.Add(tempFile.Name()) 41 assert.NoError(t, err) 42 assert.Len(t, errCh, 0) 43 assert.Len(t, writeCh, 0) 44 45 _, err = tempFile.Write([]byte("test1")) 46 assert.NoError(t, err) 47 assert.Len(t, errCh, 0) 48 select { 49 case f := <-writeCh: 50 assert.Equal(t, tempFile.Name(), f) 51 case <-time.After(100 * time.Millisecond): 52 t.Fatal("Timeout waiting for a fsnotify event") 53 } 54 }