feat: Add rest of tests for symlink behaviour of File.Name
This commit is contained in:
@@ -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 ""
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user