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  }