]> go.fuhry.dev Git - fsnotify.git/commitdiff
Test: Rename file
authorChris Howey <chris@howey.me>
Tue, 18 Oct 2011 12:43:07 +0000 (05:43 -0700)
committerChris Howey <chris@howey.me>
Tue, 18 Oct 2011 12:43:07 +0000 (05:43 -0700)
fsnotify_test.go

index 85d5581d39ec54486889085e003d6e37486eb2b8..c17c995428c80e9ebb213038393667eaae5e9a91 100644 (file)
@@ -168,6 +168,85 @@ func TestFsnotifyDirOnly(t *testing.T) {
        }
 }
 
+func TestFsnotifyRename(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"
+       const testFileRenamed string = "_test/TestFsnotifyEvents.testfileRenamed"
+
+       // 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.Rename(testFile, testFileRenamed)
+
+       os.Remove(testFileRenamed)
+
+       // 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()