From: Chris Howey Date: Tue, 18 Oct 2011 12:31:13 +0000 (-0700) Subject: Dir only test X-Git-Tag: v1.7.2~461 X-Git-Url: https://go.fuhry.dev/?a=commitdiff_plain;h=5dc4efdd3a1ab02369d249715470732623bf7dc2;p=fsnotify.git Dir only test --- diff --git a/fsnotify_test.go b/fsnotify_test.go index 9acfd05..85d5581 100644 --- a/fsnotify_test.go +++ b/fsnotify_test.go @@ -92,6 +92,82 @@ func TestFsnotifyEvents(t *testing.T) { } } +func TestFsnotifyDirOnly(t *testing.T) { + // Create an fsnotify watcher instance and initialize it + watcher, err := NewWatcher() + if err != nil { + t.Fatalf("NewWatcher() failed: %s", err) + } + + const testDir string = "_test" + + // Add a watch for testDir + err = watcher.Watch(testDir) + if err != nil { + t.Fatalf("Watcher.Watch() failed: %s", err) + } + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Error { + t.Fatalf("error received: %s", err) + } + }() + + const testFile string = "_test/TestFsnotifyEvents.testfile" + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Event + var eventsReceived = 0 + done := make(chan bool) + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == testDir || event.Name == testFile { + eventsReceived++ + t.Logf("event received: %s", event) + } else { + t.Logf("unexpected event received: %s", event) + } + } + done <- true + }() + + // Create a file + // This should add at least one event to the fsnotify event queue + var f *os.File + f, err = os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + + f.WriteString("data") + f.Sync() + f.Close() + + os.Remove(testFile) + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500e6) // 500 ms + if eventsReceived == 0 { + t.Fatal("fsnotify event hasn't been received after 500 ms") + } + + t.Logf("Received %d events.", eventsReceived) + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() + t.Log("waiting for the event channel to become closed...") + select { + case <-done: + t.Log("event channel closed") + case <-time.After(1e9): + t.Fatal("event stream was not closed after 1 second") + } +} + func TestFsnotifyClose(t *testing.T) { watcher, _ := NewWatcher() watcher.Close()