github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/filenotifywatcher/watcher_test.go (about) 1 // Copyright 2023 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package filenotifywatcher 5 6 import ( 7 "fmt" 8 "os" 9 "path/filepath" 10 time "time" 11 12 jc "github.com/juju/testing/checkers" 13 "github.com/juju/worker/v3/workertest" 14 gc "gopkg.in/check.v1" 15 16 "github.com/juju/juju/testing" 17 ) 18 19 type watcherSuite struct { 20 baseSuite 21 } 22 23 var _ = gc.Suite(&watcherSuite{}) 24 25 func (s *watcherSuite) TestWatching(c *gc.C) { 26 dir, err := os.MkdirTemp("", "inotify") 27 c.Assert(err, jc.ErrorIsNil) 28 defer os.RemoveAll(dir) 29 30 w, err := NewWatcher("controller", WithPath(dir)) 31 c.Assert(err, jc.ErrorIsNil) 32 defer workertest.DirtyKill(c, w) 33 34 file := filepath.Join(dir, "controller") 35 _, err = os.OpenFile(file, os.O_WRONLY|os.O_CREATE, 0666) 36 c.Assert(err, jc.ErrorIsNil) 37 38 defer os.Remove(file) 39 40 select { 41 case change := <-w.Changes(): 42 c.Assert(change, jc.IsTrue) 43 case <-time.After(testing.LongWait): 44 c.Fatalf("timed out waiting for file create changes") 45 } 46 47 err = os.Remove(file) 48 c.Assert(err, jc.ErrorIsNil) 49 50 select { 51 case change := <-w.Changes(): 52 c.Assert(change, jc.IsFalse) 53 case <-time.After(testing.LongWait): 54 c.Fatalf("timed out waiting for file delete changes") 55 } 56 57 workertest.CleanKill(c, w) 58 } 59 60 func (s *watcherSuite) TestNotWatching(c *gc.C) { 61 dir, err := os.MkdirTemp("", "inotify") 62 c.Assert(err, jc.ErrorIsNil) 63 defer os.RemoveAll(dir) 64 65 w, err := NewWatcher("controller", WithPath(dir)) 66 c.Assert(err, jc.ErrorIsNil) 67 defer workertest.DirtyKill(c, w) 68 69 file := filepath.Join(dir, "controller") 70 f, err := os.OpenFile(file, os.O_WRONLY|os.O_CREATE, 0666) 71 c.Assert(err, jc.ErrorIsNil) 72 73 defer os.Remove(file) 74 75 select { 76 case change := <-w.Changes(): 77 c.Assert(change, jc.IsTrue) 78 case <-time.After(testing.LongWait): 79 c.Fatalf("timed out waiting for file create changes") 80 } 81 82 _, err = fmt.Fprintln(f, "hello world") 83 c.Assert(err, jc.ErrorIsNil) 84 85 select { 86 case <-w.Changes(): 87 c.Fatalf("unexpected change") 88 case <-time.After(time.Second): 89 } 90 91 err = os.Remove(file) 92 c.Assert(err, jc.ErrorIsNil) 93 94 select { 95 case change := <-w.Changes(): 96 c.Assert(change, jc.IsFalse) 97 case <-time.After(testing.LongWait): 98 c.Fatalf("timed out waiting for file delete changes") 99 } 100 101 workertest.CleanKill(c, w) 102 }