diff --git a/src/restic/backend/sftp/layout_test.go b/src/restic/backend/sftp/layout_test.go new file mode 100644 index 000000000..4bf0d41ba --- /dev/null +++ b/src/restic/backend/sftp/layout_test.go @@ -0,0 +1,46 @@ +package sftp_test + +import ( + "fmt" + "path/filepath" + "restic/backend/sftp" + . "restic/test" + "testing" +) + +func TestLayout(t *testing.T) { + path, cleanup := TempDir(t) + defer cleanup() + + var tests = []struct { + filename string + layout string + failureExpected bool + }{ + {"repo-layout-local.tar.gz", "", false}, + {"repo-layout-cloud.tar.gz", "", false}, + {"repo-layout-s3-old.tar.gz", "", false}, + } + + for _, test := range tests { + t.Run(test.filename, func(t *testing.T) { + SetupTarTestFixture(t, path, filepath.Join("..", "testdata", test.filename)) + + repo := filepath.Join(path, "repo") + be, err := sftp.Open(sftp.Config{ + Command: fmt.Sprintf("%q -e", sftpserver), + Path: repo, + Layout: test.layout, + }) + if err != nil { + t.Fatal(err) + } + + if be == nil { + t.Fatalf("Open() returned nil but no error") + } + + RemoveAll(t, filepath.Join(path, "repo")) + }) + } +} diff --git a/src/restic/backend/sftp/sftp_backend_test.go b/src/restic/backend/sftp/sftp_backend_test.go index 289c62206..1834beee8 100644 --- a/src/restic/backend/sftp/sftp_backend_test.go +++ b/src/restic/backend/sftp/sftp_backend_test.go @@ -34,18 +34,21 @@ func createTempdir() error { return nil } -func init() { - sftpserver := "" - +func findSFTPServerBinary() string { for _, dir := range strings.Split(TestSFTPPath, ":") { testpath := filepath.Join(dir, "sftp-server") _, err := os.Stat(testpath) if !os.IsNotExist(errors.Cause(err)) { - sftpserver = testpath - break + return testpath } } + return "" +} + +var sftpserver = findSFTPServerBinary() + +func init() { if sftpserver == "" { SkipMessage = "sftp server binary not found, skipping tests" return