The statvfs@openssh.com extension was advertised but returned an unsupported status, so clients couldn't query the amount of free and used space. Implement it using the VFS Statfs method, which reports the backend's usage where the backend supports About.
89 lines
2.1 KiB
Go
89 lines
2.1 KiB
Go
// Serve sftp tests set up a server and run the integration tests
|
|
// for the sftp remote against it.
|
|
//
|
|
// We skip tests on platforms with troublesome character mappings
|
|
|
|
//go:build !windows && !darwin && !plan9
|
|
|
|
package sftp
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/pkg/sftp"
|
|
_ "github.com/rclone/rclone/backend/local"
|
|
"github.com/rclone/rclone/cmd/serve/proxy"
|
|
"github.com/rclone/rclone/cmd/serve/servetest"
|
|
"github.com/rclone/rclone/fs"
|
|
"github.com/rclone/rclone/fs/config/configmap"
|
|
"github.com/rclone/rclone/fs/config/obscure"
|
|
"github.com/rclone/rclone/fs/rc"
|
|
"github.com/rclone/rclone/vfs/vfscommon"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
const (
|
|
testBindAddress = "localhost:0"
|
|
testUser = "testuser"
|
|
testPass = "testpass"
|
|
)
|
|
|
|
// check interfaces
|
|
var (
|
|
_ sftp.FileReader = vfsHandler{}
|
|
_ sftp.FileWriter = vfsHandler{}
|
|
_ sftp.FileCmder = vfsHandler{}
|
|
_ sftp.FileLister = vfsHandler{}
|
|
_ sftp.StatVFSFileCmder = vfsHandler{}
|
|
)
|
|
|
|
// TestSftp runs the sftp server then runs the unit tests for the
|
|
// sftp remote against it.
|
|
func TestSftp(t *testing.T) {
|
|
// Configure and start the server
|
|
start := func(f fs.Fs) (configmap.Simple, func()) {
|
|
opt := Opt
|
|
opt.ListenAddr = testBindAddress
|
|
opt.User = testUser
|
|
opt.Pass = testPass
|
|
|
|
w, err := newServer(context.Background(), f, &opt, &vfscommon.Opt, &proxy.Opt)
|
|
require.NoError(t, err)
|
|
go func() {
|
|
require.NoError(t, w.Serve())
|
|
}()
|
|
|
|
// Read the host and port we started on
|
|
addr := w.Addr().String()
|
|
colon := strings.LastIndex(addr, ":")
|
|
|
|
// Config for the backend we'll use to connect to the server
|
|
config := configmap.Simple{
|
|
"type": "sftp",
|
|
"user": testUser,
|
|
"pass": obscure.MustObscure(testPass),
|
|
"host": addr[:colon],
|
|
"port": addr[colon+1:],
|
|
}
|
|
|
|
// return a stop function
|
|
return config, func() {
|
|
assert.NoError(t, w.Shutdown())
|
|
}
|
|
}
|
|
|
|
servetest.Run(t, "sftp", start)
|
|
}
|
|
|
|
func TestRc(t *testing.T) {
|
|
servetest.TestRc(t, rc.Params{
|
|
"type": "sftp",
|
|
"user": "test",
|
|
"pass": obscure.MustObscure("test"),
|
|
"vfs_cache_mode": "off",
|
|
})
|
|
}
|