move stat to base connection and differentiate between Stat and Lstat

we will use Lstat once it will be exposed in pkg/sftp
This commit is contained in:
Nicola Murino
2020-08-25 18:23:00 +02:00
parent 701a6115f8
commit 2746c0b0f1
9 changed files with 66 additions and 14 deletions

View File

@@ -11,6 +11,7 @@ import (
"github.com/pkg/sftp"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/drakkan/sftpgo/dataprovider"
"github.com/drakkan/sftpgo/vfs"
@@ -434,6 +435,37 @@ func TestCreateSymlink(t *testing.T) {
assert.NoError(t, err)
}
func TestDoStat(t *testing.T) {
testFile := filepath.Join(os.TempDir(), "afile.txt")
fs := vfs.NewOsFs("123", os.TempDir(), nil)
u := dataprovider.User{
Username: "user",
HomeDir: os.TempDir(),
}
u.Permissions = make(map[string][]string)
u.Permissions["/"] = []string{dataprovider.PermAny}
err := ioutil.WriteFile(testFile, []byte("data"), os.ModePerm)
require.NoError(t, err)
err = os.Symlink(testFile, testFile+".sym")
require.NoError(t, err)
conn := NewBaseConnection(fs.ConnectionID(), ProtocolSFTP, u, fs)
infoStat, err := conn.DoStat(testFile+".sym", 0)
if assert.NoError(t, err) {
assert.Equal(t, int64(4), infoStat.Size())
}
infoLstat, err := conn.DoStat(testFile+".sym", 1)
if assert.NoError(t, err) {
assert.NotEqual(t, int64(4), infoLstat.Size())
}
assert.False(t, os.SameFile(infoStat, infoLstat))
err = os.Remove(testFile)
assert.NoError(t, err)
err = os.Remove(testFile + ".sym")
assert.NoError(t, err)
assert.Len(t, conn.GetTransfers(), 0)
}
func TestSetStat(t *testing.T) {
oldSetStatMode := Config.SetstatMode
Config.SetstatMode = 1