Skip to content

Commit

Permalink
Test: Rename file
Browse files Browse the repository at this point in the history
  • Loading branch information
howeyc committed Oct 18, 2011
1 parent 84058fc commit dfb39b5
Showing 1 changed file with 79 additions and 0 deletions.
79 changes: 79 additions & 0 deletions fsnotify_test.go
Expand Up @@ -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()
Expand Down

0 comments on commit dfb39b5

Please sign in to comment.