mirror of
https://github.com/restic/restic.git
synced 2024-08-30 16:17:23 +02:00
The ioutil functions are deprecated since Go 1.17 and only wrap another library function. Thus directly call the underlying function. This commit only mechanically replaces the function calls.
97 lines
2.2 KiB
Go
97 lines
2.2 KiB
Go
package sftp_test
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/restic/restic/internal/backend/sftp"
|
|
"github.com/restic/restic/internal/backend/test"
|
|
"github.com/restic/restic/internal/errors"
|
|
"github.com/restic/restic/internal/restic"
|
|
rtest "github.com/restic/restic/internal/test"
|
|
)
|
|
|
|
func findSFTPServerBinary() string {
|
|
for _, dir := range strings.Split(rtest.TestSFTPPath, ":") {
|
|
testpath := filepath.Join(dir, "sftp-server")
|
|
_, err := os.Stat(testpath)
|
|
if !errors.Is(err, os.ErrNotExist) {
|
|
return testpath
|
|
}
|
|
}
|
|
|
|
return ""
|
|
}
|
|
|
|
var sftpServer = findSFTPServerBinary()
|
|
|
|
func newTestSuite(t testing.TB) *test.Suite {
|
|
return &test.Suite{
|
|
// NewConfig returns a config for a new temporary backend that will be used in tests.
|
|
NewConfig: func() (interface{}, error) {
|
|
dir, err := os.MkdirTemp(rtest.TestTempDir, "restic-test-sftp-")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
t.Logf("create new backend at %v", dir)
|
|
|
|
cfg := sftp.Config{
|
|
Path: dir,
|
|
Command: fmt.Sprintf("%q -e", sftpServer),
|
|
Connections: 5,
|
|
}
|
|
return cfg, nil
|
|
},
|
|
|
|
// CreateFn is a function that creates a temporary repository for the tests.
|
|
Create: func(config interface{}) (restic.Backend, error) {
|
|
cfg := config.(sftp.Config)
|
|
return sftp.Create(context.TODO(), cfg)
|
|
},
|
|
|
|
// OpenFn is a function that opens a previously created temporary repository.
|
|
Open: func(config interface{}) (restic.Backend, error) {
|
|
cfg := config.(sftp.Config)
|
|
return sftp.Open(context.TODO(), cfg)
|
|
},
|
|
|
|
// CleanupFn removes data created during the tests.
|
|
Cleanup: func(config interface{}) error {
|
|
cfg := config.(sftp.Config)
|
|
if !rtest.TestCleanupTempDirs {
|
|
t.Logf("leaving test backend dir at %v", cfg.Path)
|
|
}
|
|
|
|
rtest.RemoveAll(t, cfg.Path)
|
|
return nil
|
|
},
|
|
}
|
|
}
|
|
|
|
func TestBackendSFTP(t *testing.T) {
|
|
defer func() {
|
|
if t.Skipped() {
|
|
rtest.SkipDisallowed(t, "restic/backend/sftp.TestBackendSFTP")
|
|
}
|
|
}()
|
|
|
|
if sftpServer == "" {
|
|
t.Skip("sftp server binary not found")
|
|
}
|
|
|
|
newTestSuite(t).RunTests(t)
|
|
}
|
|
|
|
func BenchmarkBackendSFTP(t *testing.B) {
|
|
if sftpServer == "" {
|
|
t.Skip("sftp server binary not found")
|
|
}
|
|
|
|
newTestSuite(t).RunBenchmarks(t)
|
|
}
|