mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-10-19 20:44:28 +02:00
webdav: create a folder under its own name (#11810)
* webdav: create a folder under its own name * webdav: reuse NormalizePath for the MKCOL entry split --------- Co-authored-by: Chris Lu <chris.lu@gmail.com>
This commit is contained in:
1 parent
ab39e3a51b
commit
006d4150f0
2 files changed
+32
-1
No files matched your search
@@ -205,7 +205,7 @@ func (fs *WebDavFileSystem) Mkdir(ctx context.Context, fullDirPath string, perm
|
||||
}
|
||||
|
||||
return fs.WithFilerClient(false, func(client filer_pb.SeaweedFilerClient) error {
|
||||
dir, name := util.FullPath(fullDirPath).DirAndName()
|
||||
dir, name := util.NormalizePath(fullDirPath).DirAndName()
|
||||
request := &filer_pb.CreateEntryRequest{
|
||||
Directory: dir,
|
||||
Entry: &filer_pb.Entry{
|
||||
|
||||
@@ -71,6 +71,20 @@ func (f *noVolumeFiler) LookupVolume(_ context.Context, _ *filer_pb.LookupVolume
|
||||
return &filer_pb.LookupVolumeResponse{LocationsMap: map[string]*filer_pb.Locations{}}, nil
|
||||
}
|
||||
|
||||
type createRecordingFiler struct {
|
||||
filer_pb.UnimplementedSeaweedFilerServer
|
||||
req *filer_pb.CreateEntryRequest
|
||||
}
|
||||
|
||||
func (f *createRecordingFiler) LookupDirectoryEntry(_ context.Context, _ *filer_pb.LookupDirectoryEntryRequest) (*filer_pb.LookupDirectoryEntryResponse, error) {
|
||||
return nil, filer_pb.ErrNotFound
|
||||
}
|
||||
|
||||
func (f *createRecordingFiler) CreateEntry(_ context.Context, req *filer_pb.CreateEntryRequest) (*filer_pb.CreateEntryResponse, error) {
|
||||
f.req = req
|
||||
return &filer_pb.CreateEntryResponse{}, nil
|
||||
}
|
||||
|
||||
func startFakeWebDavFiler(t *testing.T, impl filer_pb.SeaweedFilerServer) pb.ServerAddress {
|
||||
t.Helper()
|
||||
lis, err := net.Listen("tcp", "127.0.0.1:0")
|
||||
@@ -130,3 +144,20 @@ func TestWebDavFile_Read_InlineContent(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "inl", string(buf[:n]))
|
||||
}
|
||||
|
||||
// MKCOL paths end in "/"; the entry must be created under its own name, not as "" inside itself.
|
||||
func TestWebDavFileSystem_Mkdir_EntryName(t *testing.T) {
|
||||
filer := &createRecordingFiler{}
|
||||
filerAddr := startFakeWebDavFiler(t, filer)
|
||||
fs := &WebDavFileSystem{option: &WebDavOption{
|
||||
Filer: filerAddr,
|
||||
GrpcDialOption: grpc.WithTransportCredentials(insecure.NewCredentials()),
|
||||
}}
|
||||
|
||||
assert.NoError(t, fs.Mkdir(context.Background(), "/dir/sub/", 0755))
|
||||
if assert.NotNil(t, filer.req) {
|
||||
assert.Equal(t, "/dir", filer.req.Directory)
|
||||
assert.Equal(t, "sub", filer.req.Entry.Name)
|
||||
assert.True(t, filer.req.Entry.IsDirectory)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user