github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/config/watcher_test.go (about) 1 package config 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "testing" 8 "time" 9 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestWatcherInvalidDirectory(t *testing.T) { 14 if testing.Short() { 15 t.Skip("skipping watcher test in short mode") 16 } 17 18 callback := func() {} 19 _, err := newWatcher("/does/not/exist", callback) 20 require.Error(t, err, "should have failed to watch a non-existent directory") 21 } 22 23 func TestWatcher(t *testing.T) { 24 if testing.Short() { 25 t.Skip("skipping watcher test in short mode") 26 } 27 28 tempDir, err := ioutil.TempDir("", "TestWatcher") 29 require.NoError(t, err) 30 defer os.RemoveAll(tempDir) 31 32 f, err := ioutil.TempFile(tempDir, "TestWatcher") 33 require.NoError(t, err) 34 defer f.Close() 35 defer os.Remove(f.Name()) 36 37 called := make(chan bool) 38 callback := func() { 39 called <- true 40 } 41 watcher, err := newWatcher(f.Name(), callback) 42 require.NoError(t, err) 43 defer watcher.Close() 44 45 // Write to a different file 46 ioutil.WriteFile(filepath.Join(tempDir, "unrelated"), []byte("data"), 0644) 47 select { 48 case <-called: 49 require.Fail(t, "callback should not have been called for unrelated file") 50 case <-time.After(1 * time.Second): 51 } 52 53 // Write to the watched file 54 ioutil.WriteFile(f.Name(), []byte("data"), 0644) 55 select { 56 case <-called: 57 case <-time.After(5 * time.Second): 58 require.Fail(t, "callback should have been called when file written") 59 } 60 }