func (t *DirTest) ReadEntries_NonEmpty_ImplicitDirsEnabled() { var err error var entry fuseutil.Dirent // Enable implicit dirs. t.resetInode(true) // Set up contents. objs := []string{ dirInodeName + "backed_dir_empty/", dirInodeName + "backed_dir_nonempty/", dirInodeName + "backed_dir_nonempty/blah", dirInodeName + "file", dirInodeName + "implicit_dir/blah", dirInodeName + "symlink", } err = gcsutil.CreateEmptyObjects(t.ctx, t.bucket, objs) AssertEq(nil, err) // Set up the symlink target. err = t.setSymlinkTarget(dirInodeName+"symlink", "blah") AssertEq(nil, err) // Read entries. entries, err := t.readAllEntries() AssertEq(nil, err) AssertEq(5, len(entries)) entry = entries[0] ExpectEq("backed_dir_empty", entry.Name) ExpectEq(fuseutil.DT_Directory, entry.Type) entry = entries[1] ExpectEq("backed_dir_nonempty", entry.Name) ExpectEq(fuseutil.DT_Directory, entry.Type) entry = entries[2] ExpectEq("file", entry.Name) ExpectEq(fuseutil.DT_File, entry.Type) entry = entries[3] ExpectEq("implicit_dir", entry.Name) ExpectEq(fuseutil.DT_Directory, entry.Type) entry = entries[4] ExpectEq("symlink", entry.Name) ExpectEq(fuseutil.DT_Link, entry.Type) }
func (t *ForeignModsTest) UnreachableObjects() { var fi os.FileInfo var err error // Set up objects that appear to be directory contents, but for which there // is no directory placeholder object. We don't have implicit directories // enabled, so these should be unreachable. err = gcsutil.CreateEmptyObjects( t.ctx, t.bucket, []string{ // Implicit directory contents, conflicting file name. "foo", "foo/0", "foo/1", // Implicit directory contents, no conflicting file name. "bar/0/", }) AssertEq(nil, err) // Only the conflicitng file name should show up in the root. entries, err := fusetesting.ReadDirPicky(t.Dir) AssertEq(nil, err) AssertEq(1, len(entries)) fi = entries[0] ExpectEq("foo", fi.Name()) ExpectEq(filePerms, fi.Mode()) ExpectEq(1, fi.Sys().(*syscall.Stat_t).Nlink) // Statting the conflicting name should give the file. fi, err = os.Stat(path.Join(t.mfs.Dir(), "foo")) AssertEq(nil, err) ExpectEq("foo", fi.Name()) ExpectEq(filePerms, fi.Mode()) ExpectEq(1, fi.Sys().(*syscall.Stat_t).Nlink) // Statting the other name shouldn't work at all. _, err = os.Stat(path.Join(t.mfs.Dir(), "bar")) ExpectTrue(os.IsNotExist(err), "err: %v", err) }
func (t *fsTest) createEmptyObjects(names []string) error { err := gcsutil.CreateEmptyObjects(t.ctx, t.bucket, names) return err }