diff --git a/fuse/test/notify_test.go b/fuse/test/notify_test.go index 575e014fefea67af8721f8151cc129804ebe3919..29597895631352ad5ed5ab21ae57489393c4eb62 100644 --- a/fuse/test/notify_test.go +++ b/fuse/test/notify_test.go @@ -2,7 +2,6 @@ package test import ( "io/ioutil" - "log" "os" "testing" "time" @@ -12,20 +11,47 @@ import ( "github.com/hanwen/go-fuse/fuse/pathfs" ) -var _ = log.Println - type NotifyFs struct { pathfs.FileSystem size uint64 exist bool + + sizeChan chan uint64 + existChan chan bool +} + +func newNotifyFs() *NotifyFs { + return &NotifyFs{ + FileSystem: pathfs.NewDefaultFileSystem(), + sizeChan: make(chan uint64, 1), + existChan: make(chan bool, 1), + } +} + +func (fs *NotifyFs) Exists() bool { + select { + case s := <-fs.existChan: + fs.exist = s + default: + } + return fs.exist +} + +func (fs *NotifyFs) Size() uint64 { + select { + case s := <-fs.sizeChan: + fs.size = s + default: + } + return fs.size } func (fs *NotifyFs) GetAttr(name string, context *fuse.Context) (*fuse.Attr, fuse.Status) { if name == "" { return &fuse.Attr{Mode: fuse.S_IFDIR | 0755}, fuse.OK } - if name == "file" || (name == "dir/file" && fs.exist) { - return &fuse.Attr{Mode: fuse.S_IFREG | 0644, Size: fs.size}, fuse.OK + if name == "file" || (name == "dir/file" && fs.Exists()) { + return &fuse.Attr{Mode: fuse.S_IFREG | 0644, Size: fs.Size()}, fuse.OK } if name == "dir" { return &fuse.Attr{Mode: fuse.S_IFDIR | 0755}, fuse.OK @@ -47,7 +73,7 @@ type NotifyTest struct { func NewNotifyTest(t *testing.T) *NotifyTest { me := &NotifyTest{} - me.fs = &NotifyFs{FileSystem: pathfs.NewDefaultFileSystem()} + me.fs = newNotifyFs() var err error me.dir, err = ioutil.TempDir("", "go-fuse-notify_test") if err != nil { @@ -85,8 +111,7 @@ func TestInodeNotify(t *testing.T) { fs := test.fs dir := test.dir - fs.size = 42 - test.state.ThreadSanitizerSync() + fs.sizeChan <- 42 fi, err := os.Lstat(dir + "/file") if err != nil { @@ -96,8 +121,7 @@ func TestInodeNotify(t *testing.T) { t.Error(fi) } - test.state.ThreadSanitizerSync() - fs.size = 666 + fs.sizeChan <- 666 fi, err = os.Lstat(dir + "/file") if err != nil { @@ -126,9 +150,8 @@ func TestEntryNotify(t *testing.T) { defer test.Clean() dir := test.dir - test.fs.size = 42 - test.fs.exist = false - test.state.ThreadSanitizerSync() + test.fs.sizeChan <- 42 + test.fs.existChan <- false fn := dir + "/dir/file" fi, _ := os.Lstat(fn) @@ -136,8 +159,7 @@ func TestEntryNotify(t *testing.T) { t.Errorf("File should not exist, %#v", fi) } - test.fs.exist = true - test.state.ThreadSanitizerSync() + test.fs.existChan <- true fi, _ = os.Lstat(fn) if fi != nil { t.Errorf("negative entry should have been cached: %#v", fi)