github.com/mattolenik/notify@v0.9.1/watcher_inotify_test.go (about) 1 // Copyright (c) 2014-2015 The Notify Authors. All rights reserved. 2 // Use of this source code is governed by the MIT license that can be 3 // found in the LICENSE file. 4 5 // +build linux 6 7 package notify 8 9 import ( 10 "os" 11 "path/filepath" 12 "testing" 13 ) 14 15 func icreate(w *W, path string) WCase { 16 cas := create(w, path) 17 cas.Events = append(cas.Events, 18 &Call{P: path, E: InCreate}, 19 ) 20 return cas 21 } 22 23 func iremove(w *W, path string) WCase { 24 cas := remove(w, path) 25 cas.Events = append(cas.Events, 26 &Call{P: path, E: InDelete}, 27 ) 28 return cas 29 } 30 31 func iopen(w *W, path string) WCase { 32 return WCase{ 33 Action: func() { 34 f, err := os.OpenFile(filepath.Join(w.root, path), os.O_RDWR, 0644) 35 if err != nil { 36 w.Fatalf("OpenFile(%q)=%v", path, err) 37 } 38 if err := f.Close(); err != nil { 39 w.Fatalf("Close(%q)=%v", path, err) 40 } 41 }, 42 Events: []EventInfo{ 43 &Call{P: path, E: InAccess}, 44 &Call{P: path, E: InOpen}, 45 &Call{P: path, E: InCloseNowrite}, 46 }, 47 } 48 } 49 50 func iread(w *W, path string, p []byte) WCase { 51 return WCase{ 52 Action: func() { 53 f, err := os.OpenFile(filepath.Join(w.root, path), os.O_RDWR, 0644) 54 if err != nil { 55 w.Fatalf("OpenFile(%q)=%v", path, err) 56 } 57 if _, err := f.Read(p); err != nil { 58 w.Fatalf("Read(%q)=%v", path, err) 59 } 60 if err := f.Close(); err != nil { 61 w.Fatalf("Close(%q)=%v", path, err) 62 } 63 }, 64 Events: []EventInfo{ 65 &Call{P: path, E: InAccess}, 66 &Call{P: path, E: InOpen}, 67 &Call{P: path, E: InModify}, 68 &Call{P: path, E: InCloseNowrite}, 69 }, 70 } 71 } 72 73 func iwrite(w *W, path string, p []byte) WCase { 74 cas := write(w, path, p) 75 path = cas.Events[0].Path() 76 cas.Events = append(cas.Events, 77 &Call{P: path, E: InAccess}, 78 &Call{P: path, E: InOpen}, 79 &Call{P: path, E: InModify}, 80 &Call{P: path, E: InCloseWrite}, 81 ) 82 return cas 83 } 84 85 func irename(w *W, path string) WCase { 86 const ext = ".notify" 87 return WCase{ 88 Action: func() { 89 file := filepath.Join(w.root, path) 90 if err := os.Rename(file, file+ext); err != nil { 91 w.Fatalf("Rename(%q, %q)=%v", path, path+ext, err) 92 } 93 }, 94 Events: []EventInfo{ 95 &Call{P: path, E: InMovedFrom}, 96 &Call{P: path + ext, E: InMovedTo}, 97 &Call{P: path, E: InOpen}, 98 &Call{P: path, E: InAccess}, 99 &Call{P: path, E: InCreate}, 100 }, 101 } 102 } 103 104 var events = []Event{ 105 InAccess, 106 InModify, 107 InAttrib, 108 InCloseWrite, 109 InCloseNowrite, 110 InOpen, 111 InMovedFrom, 112 InMovedTo, 113 InCreate, 114 InDelete, 115 InDeleteSelf, 116 InMoveSelf, 117 } 118 119 func TestWatcherInotify(t *testing.T) { 120 w := NewWatcherTest(t, "testdata/vfs.txt", events...) 121 defer w.Close() 122 123 cases := [...]WCase{ 124 iopen(w, "src/github.com/rjeczalik/fs/fs.go"), 125 iwrite(w, "src/github.com/rjeczalik/fs/fs.go", []byte("XD")), 126 iread(w, "src/github.com/rjeczalik/fs/fs.go", []byte("XD")), 127 iremove(w, "src/github.com/ppknap/link/README.md"), 128 irename(w, "src/github.com/rjeczalik/fs/LICENSE"), 129 } 130 131 w.ExpectAny(cases[:]) 132 }