Notify kernel of creation of new workspace multifs. To test this, set attribute/entry TTLs of the test mount. Change-Id: I31c92e3a5f046a720171703b2d61d069d8f54549
diff --git a/fs/gitilesfs_test.go b/fs/gitilesfs_test.go index 42bcef7..c568e35 100644 --- a/fs/gitilesfs_test.go +++ b/fs/gitilesfs_test.go
@@ -29,6 +29,7 @@ "strings" "syscall" "testing" + "time" "github.com/google/gitfs/cache" "github.com/google/gitfs/gitiles" @@ -527,8 +528,14 @@ return err } + fuseOpts := &nodefs.Options{ + EntryTimeout: time.Hour, + NegativeTimeout: time.Hour, + AttrTimeout: time.Hour, + } + var err error - f.server, _, err = nodefs.MountRoot(f.mntDir, root, nil) + f.server, _, err = nodefs.MountRoot(f.mntDir, root, fuseOpts) if err != nil { return err } @@ -542,18 +549,13 @@ return nil } -func TestMultiFS(t *testing.T) { +func TestMultiFSBrokenXML(t *testing.T) { fix, err := newTestFixture() if err != nil { t.Fatalf("newTestFixture: %v", err) } defer fix.cleanup() - xmlFile := filepath.Join(fix.dir, "manifest.xml") - if err := ioutil.WriteFile(xmlFile, []byte(testManifestXML), 0644); err != nil { - t.Errorf("WriteFile(%s): %v", xmlFile, err) - } - brokenXMLFile := filepath.Join(fix.dir, "broken.xml") if err := ioutil.WriteFile(brokenXMLFile, []byte("I'm not XML."), 0644); err != nil { t.Errorf("WriteFile(%s): %v", brokenXMLFile, err) @@ -569,6 +571,26 @@ if err := os.Symlink(brokenXMLFile, filepath.Join(fix.mntDir, "config", "ws")); err == nil { t.Fatalf("want error for broken XML file") } +} + +func TestMultiFSBasic(t *testing.T) { + fix, err := newTestFixture() + if err != nil { + t.Fatalf("newTestFixture: %v", err) + } + defer fix.cleanup() + + xmlFile := filepath.Join(fix.dir, "manifest.xml") + if err := ioutil.WriteFile(xmlFile, []byte(testManifestXML), 0644); err != nil { + t.Errorf("WriteFile(%s): %v", xmlFile, err) + } + + opts := MultiFSOptions{} + fs := NewMultiFS(fix.service, fix.cache, opts) + + if err := fix.mount(fs); err != nil { + t.Fatalf("mount: %v", err) + } wsDir := filepath.Join(fix.mntDir, "ws") if fi, err := os.Lstat(wsDir); err == nil {
diff --git a/fs/multifs.go b/fs/multifs.go index 444b49a..c8edfcb 100644 --- a/fs/multifs.go +++ b/fs/multifs.go
@@ -126,8 +126,8 @@ } fs.(*manifestFSRoot).nodeCache = c.root.nodeCache - ch := c.root.Inode().NewChild(name, true, fs) - if ch == nil { + child := c.root.Inode().NewChild(name, true, fs) + if child == nil { // TODO(hanwen): can this ever happen? return nil, fuse.EINVAL } @@ -140,12 +140,14 @@ if err := fs.(*manifestFSRoot).onMount(c.root.fsConn); err != nil { log.Println("onMount(%s): %v", name, err) - for k := range ch.Children() { - ch.RmChild(k) + for k := range child.Children() { + child.RmChild(k) } - ch.NewChild("ERROR", false, &dataNode{nodefs.NewDefaultNode(), []byte(err.Error())}) + child.NewChild("ERROR", false, &dataNode{nodefs.NewDefaultNode(), []byte(err.Error())}) } + c.root.fsConn.EntryNotify(c.root.Inode(), name) + return config, fuse.OK }