Files
pspy/internal/fswatcher/inotify/inotify_test.go
2018-03-14 09:21:14 +01:00

74 lines
1.4 KiB
Go

package inotify
import (
"fmt"
"io/ioutil"
"os"
"strings"
"testing"
"golang.org/x/sys/unix"
)
func TestInotify(t *testing.T) {
// init
i := NewInotify()
err := i.Init()
expectNoError(t, err)
// add watchers
err = i.Watch("testdata/folder")
expectNoError(t, err)
err = i.Watch("testdata/non-existing-folder")
if fmt.Sprintf("%v", err) != "adding watch to testdata/non-existing-folder: errno: 2" {
t.Errorf("Wrong error for non-existing-folder: got %v", err)
}
numW := i.NumWatchers()
if numW != 1 {
t.Errorf("Expected 1 watcher but have %d", numW)
}
// create and parse events
err = ioutil.WriteFile("testdata/folder/f1", []byte("file content"), 0644)
expectNoError(t, err)
defer os.Remove("testdata/folder/f1")
buf := make([]byte, 5*unix.SizeofInotifyEvent)
_, err = i.Read(buf)
expectNoError(t, err)
e, offset, err := i.ParseNextEvent(buf[0:])
expectNoError(t, err)
if e.Name != "testdata/folder/f1" {
t.Fatalf("Wrong event name: %s", e.Name)
}
if e.Op != "CREATE" {
t.Fatalf("Wrong op: %s", e.Op)
}
if offset != 32 {
t.Fatalf("Wrong offset: %d", offset)
}
// finish
err = i.Close()
expectNoError(t, err)
_, err = i.Read(buf)
if !strings.HasSuffix(fmt.Sprintf("%v", err), "errno: 9") {
t.Errorf("Wrong error for reading after close: got %v", err)
}
}
func expectNoError(t *testing.T, err error) {
if err != nil {
t.Fatalf("Unexpected error: %v", err)
}
}