for {
ok, err := poller.wait()
if err != nil {
- t.Fatalf("poller failed: %v", err)
+ t.Errorf("poller failed: %v", err)
}
oks <- ok
if !<-live {
t.Fatalf("expected true")
}
tfd.get(t)
+
+ // wait for all goroutines for finish.
+ live <- false
+ <-oks
}
if err != nil {
t.Fatalf("Failed to create watcher: %v", err)
}
- defer w.Close()
err = w.Add(testFile)
if err != nil {
t.Fatalf("Failed to add testFile: %v", err)
}
+ var wg sync.WaitGroup
+ wg.Add(1)
go func() {
+ defer wg.Done()
for err := range w.Errors {
- t.Fatalf("error received: %s", err)
+ t.Errorf("error received: %s", err)
}
}()
if len(w.paths) != 0 {
t.Fatalf("Expected paths len is 0, but got: %d, %v", len(w.paths), w.paths)
}
+
+ w.Close()
+ wg.Wait()
}
func TestInotifyOverflow(t *testing.T) {
"path"
"path/filepath"
"runtime"
+ "sync"
"sync/atomic"
"testing"
"time"
watcher := newWatcher(t)
// Receive errors on the error channel on a separate goroutine
+ var wg sync.WaitGroup
+ wg.Add(1)
go func() {
+ defer wg.Done()
for err := range watcher.Errors {
- t.Fatalf("error received: %s", err)
+ t.Errorf("error received: %s", err)
}
}()
case <-time.After(2 * time.Second):
t.Fatal("event stream was not closed after 2 seconds")
}
+
+ // wait for all groutines to finish.
+ wg.Wait()
}
func TestFsnotifyMultipleCreates(t *testing.T) {
t.Fatalf("Could not remove the watch: %v\n", err)
}
+ var wg sync.WaitGroup
+ wg.Add(1)
go func() {
+ defer wg.Done()
select {
case ev := <-watcher.Events:
- t.Fatalf("We received event: %v\n", ev)
+ t.Errorf("We received event: %v\n", ev)
case <-time.After(500 * time.Millisecond):
t.Log("No event received, as expected.")
}
if err := os.Chmod(testFileAlreadyExists, 0700); err != nil {
t.Fatalf("chmod failed: %s", err)
}
- time.Sleep(400 * time.Millisecond)
+
+ // wait for all groutines to finish.
+ wg.Wait()
}
func TestFsnotifyAttrib(t *testing.T) {