vfs: [bugfix] Implement Name() method in WriteFileHandle and ReadFileHandle

Name() method was originally left out and defaulted to the base
class which always returns empty. This trigerred incorrect behavior
in serve nfs where it relied on the Name() of the interafce to figure
out what file it was modifying.

This method is copied from RWFileHandle struct.

Added extra assert in the tests.
This commit is contained in:
Saleh Dindar 2023-08-31 06:28:10 -07:00 committed by Nick Craig-Wood
parent 3337fe31c7
commit 23f8dea182
5 changed files with 19 additions and 0 deletions

View File

@ -484,6 +484,11 @@ func (fh *ReadFileHandle) Release() error {
return err return err
} }
// Name returns the name of the file from the underlying Object.
func (fh *ReadFileHandle) Name() string {
return fh.file.String()
}
// Size returns the size of the underlying file // Size returns the size of the underlying file
func (fh *ReadFileHandle) Size() int64 { func (fh *ReadFileHandle) Size() int64 {
fh.mu.Lock() fh.mu.Lock()

View File

@ -44,6 +44,9 @@ func TestReadFileHandleMethods(t *testing.T) {
assert.Equal(t, "<nil *ReadFileHandle>", (*ReadFileHandle)(nil).String()) assert.Equal(t, "<nil *ReadFileHandle>", (*ReadFileHandle)(nil).String())
assert.Equal(t, "<nil *ReadFileHandle.file>", new(ReadFileHandle).String()) assert.Equal(t, "<nil *ReadFileHandle.file>", new(ReadFileHandle).String())
// Name
assert.Equal(t, "dir/file1", fh.Name())
// Node // Node
node := fh.Node() node := fh.Node()
assert.Equal(t, "file1", node.Name()) assert.Equal(t, "file1", node.Name())

View File

@ -346,6 +346,9 @@ func TestRWFileHandleWriteAt(t *testing.T) {
return n return n
} }
// Name
assert.Equal(t, "file1", fh.Name())
// Preconditions // Preconditions
assert.Equal(t, int64(0), offset()) assert.Equal(t, int64(0), offset())
assert.True(t, fh.opened) assert.True(t, fh.opened)

View File

@ -322,3 +322,8 @@ func (fh *WriteFileHandle) ReadAt(p []byte, off int64) (n int, err error) {
func (fh *WriteFileHandle) Sync() error { func (fh *WriteFileHandle) Sync() error {
return nil return nil
} }
// Name returns the name of the file from the underlying Object.
func (fh *WriteFileHandle) Name() string {
return fh.file.String()
}

View File

@ -39,6 +39,9 @@ func TestWriteFileHandleReadonly(t *testing.T) {
} }
r, vfs, fh := writeHandleCreate(t) r, vfs, fh := writeHandleCreate(t)
// Name
assert.Equal(t, "file1", fh.Name())
// Write a file, so underlying remote will be created // Write a file, so underlying remote will be created
_, err := fh.Write([]byte("hello")) _, err := fh.Write([]byte("hello"))
assert.NoError(t, err) assert.NoError(t, err)