Browse Source
FUSE mount: fix failed git clone (#8344)
FUSE mount: fix failed git clone (#8344)
tests: reset MemoryStore to avoid test pollution; fix port reservation to prevent duplicate ports in mini Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>pull/8347/head
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 101 additions and 0 deletions
@ -0,0 +1,93 @@ |
|||
package mount |
|||
|
|||
import ( |
|||
"context" |
|||
"path/filepath" |
|||
"testing" |
|||
|
|||
"github.com/seaweedfs/seaweedfs/weed/mount/meta_cache" |
|||
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" |
|||
"github.com/seaweedfs/seaweedfs/weed/util" |
|||
) |
|||
|
|||
func TestHandleRenameResponseCachesTargetForUncachedDirectory(t *testing.T) { |
|||
uidGidMapper, err := meta_cache.NewUidGidMapper("", "") |
|||
if err != nil { |
|||
t.Fatalf("create uid/gid mapper: %v", err) |
|||
} |
|||
|
|||
root := util.FullPath("/") |
|||
inodeToPath := NewInodeToPath(root, 1) |
|||
|
|||
mc := meta_cache.NewMetaCache( |
|||
filepath.Join(t.TempDir(), "meta"), |
|||
uidGidMapper, |
|||
root, |
|||
func(path util.FullPath) { |
|||
inodeToPath.MarkChildrenCached(path) |
|||
}, |
|||
func(path util.FullPath) bool { |
|||
return inodeToPath.IsChildrenCached(path) |
|||
}, |
|||
func(util.FullPath, *filer_pb.Entry) {}, |
|||
nil, |
|||
) |
|||
defer mc.Shutdown() |
|||
|
|||
parentPath := util.FullPath("/repo/.git") |
|||
sourcePath := parentPath.Child("config.lock") |
|||
targetPath := parentPath.Child("config") |
|||
|
|||
inodeToPath.Lookup(parentPath, 1, true, false, 0, true) |
|||
sourceInode := inodeToPath.Lookup(sourcePath, 1, false, false, 0, true) |
|||
inodeToPath.Lookup(targetPath, 1, false, false, 0, true) |
|||
|
|||
wfs := &WFS{ |
|||
metaCache: mc, |
|||
inodeToPath: inodeToPath, |
|||
fhMap: NewFileHandleToInode(), |
|||
} |
|||
|
|||
resp := &filer_pb.StreamRenameEntryResponse{ |
|||
Directory: string(parentPath), |
|||
EventNotification: &filer_pb.EventNotification{ |
|||
OldEntry: &filer_pb.Entry{ |
|||
Name: "config.lock", |
|||
}, |
|||
NewEntry: &filer_pb.Entry{ |
|||
Name: "config", |
|||
Attributes: &filer_pb.FuseAttributes{ |
|||
Crtime: 1, |
|||
Mtime: 1, |
|||
FileMode: 0100644, |
|||
FileSize: 53, |
|||
Inode: sourceInode, |
|||
}, |
|||
}, |
|||
NewParentPath: string(parentPath), |
|||
}, |
|||
} |
|||
|
|||
if err := wfs.handleRenameResponse(context.Background(), resp); err != nil { |
|||
t.Fatalf("handle rename response: %v", err) |
|||
} |
|||
|
|||
entry, findErr := mc.FindEntry(context.Background(), targetPath) |
|||
if findErr != nil { |
|||
t.Fatalf("find target entry: %v", findErr) |
|||
} |
|||
if entry == nil { |
|||
t.Fatalf("target entry %s not cached", targetPath) |
|||
} |
|||
if entry.FileSize != 53 { |
|||
t.Fatalf("cached file size = %d, want 53", entry.FileSize) |
|||
} |
|||
|
|||
updatedInode, found := inodeToPath.GetInode(targetPath) |
|||
if !found { |
|||
t.Fatalf("target path %s missing inode mapping", targetPath) |
|||
} |
|||
if updatedInode != sourceInode { |
|||
t.Fatalf("target inode = %d, want %d", updatedInode, sourceInode) |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue