cloudflared-mirror/watcher/file_test.go

58 lines
997 B
Go

//go:build !windows
// +build !windows
package watcher
import (
"bufio"
"os"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
type mockNotifier struct {
eventPath string
}
func (n *mockNotifier) WatcherItemDidChange(path string) {
n.eventPath = path
}
func (n *mockNotifier) WatcherDidError(err error) {
}
func TestFileChanged(t *testing.T) {
filePath := "test_file"
f, err := os.Create(filePath)
assert.NoError(t, err)
defer func() {
f.Close()
os.Remove(filePath)
}()
service, err := NewFile()
assert.NoError(t, err)
err = service.Add(filePath)
assert.NoError(t, err)
n := &mockNotifier{}
go service.Start(n)
f.Sync()
w := bufio.NewWriter(f)
_, err = w.WriteString("hello Austin, do you like my file watcher?\n")
assert.NoError(t, err)
err = w.Flush()
assert.NoError(t, err)
// give it time to trigger
time.Sleep(20 * time.Millisecond)
service.Shutdown()
assert.Equal(t, filePath, n.eventPath, "notifier didn't get an new file write event")
}