feat: Add rest of tests for symlink behaviour of File.Name

This commit is contained in:
Felicitas Pojtinger
2022-01-24 01:02:14 +01:00
parent 9f842d1807
commit 01313dcd2b
3 changed files with 112 additions and 0 deletions

View File

@@ -371,6 +371,14 @@ func (f *File) Name() string {
f.ioLock.Lock()
defer f.ioLock.Unlock()
if f.link != "" {
if pathext.IsRoot(f.link, false) {
return ""
}
return f.link
}
if pathext.IsRoot(f.path, false) {
return ""
}

View File

@@ -130,6 +130,106 @@ var fileNameTests = []struct {
true,
true,
},
{
"Can get correct file name for symlink to /test.txt",
"/existingsymlink",
func(f symFs) error {
if _, err := f.Create("/test.txt"); err != nil {
return err
}
if err := f.SymlinkIfPossible("/test.txt", "/existingsymlink"); err != nil {
return nil
}
return nil
},
func(got string) error {
want := "/existingsymlink"
if got != want {
return fmt.Errorf("invalid name, got %v, want %v", got, want)
}
return nil
},
true,
true,
},
{
"Can get correct file name for symlink to /mydir",
"/existingsymlink",
func(f symFs) error {
if err := f.Mkdir("/mydir", os.ModePerm); err != nil {
return err
}
if err := f.SymlinkIfPossible("/mydir", "/existingsymlink"); err != nil {
return nil
}
return nil
},
func(got string) error {
want := "/existingsymlink"
if got != want {
return fmt.Errorf("invalid name, got %v, want %v", got, want)
}
return nil
},
true,
true,
},
{
"Can get correct file name for symlink to /mydir/nesteddir",
"/existingsymlink",
func(f symFs) error {
if err := f.MkdirAll("/mydir/nesteddir", os.ModePerm); err != nil {
return err
}
if err := f.SymlinkIfPossible("/mydir/nesteddir", "/existingsymlink"); err != nil {
return nil
}
return nil
},
func(got string) error {
want := "/existingsymlink"
if got != want {
return fmt.Errorf("invalid name, got %v, want %v", got, want)
}
return nil
},
true,
true,
},
{
"Can get correct file name for symlink to root",
"/existingsymlink",
func(f symFs) error {
if err := f.SymlinkIfPossible("/", "/existingsymlink"); err != nil {
return nil
}
return nil
},
func(got string) error {
want := "/existingsymlink"
if got != want {
return fmt.Errorf("invalid name, got %v, want %v", got, want)
}
return nil
},
true,
true,
},
}
func TestFile_Name(t *testing.T) {

View File

@@ -521,6 +521,8 @@ func (f *STFS) OpenFile(name string, flag int, perm os.FileMode) (afero.File, er
return nil, err
}
} else {
linkname := hdr.Name
hdr, err = inventory.Stat(
f.metadata,
@@ -550,6 +552,8 @@ func (f *STFS) OpenFile(name string, flag int, perm os.FileMode) (afero.File, er
return nil, err
}
}
hdr.Linkname = linkname
}
} else {
return nil, err