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