// Create the backend specified by URI. func create(u string) (backend.Backend, error) { // check if the url is a directory that exists fi, err := os.Stat(u) if err == nil && fi.IsDir() { return local.Create(u) } url, err := url.Parse(u) if err != nil { return nil, err } if url.Scheme == "" { return local.Create(url.Path) } if len(url.Path) < 1 { return nil, fmt.Errorf("unable to parse url %v", url) } if url.Scheme == "s3" { return s3.Open(url.Host, url.Path[1:]) } args := []string{url.Host} if url.User != nil && url.User.Username() != "" { args = append(args, "-l") args = append(args, url.User.Username()) } args = append(args, "-s") args = append(args, "sftp") return sftp.Create(url.Path[1:], "ssh", args...) }
func setupSFTPBackend(t *testing.T) *sftp.SFTP { sftpserver := "" for _, dir := range strings.Split(TestSFTPPath, ":") { testpath := filepath.Join(dir, "sftp-server") fd, err := os.Open(testpath) fd.Close() if !os.IsNotExist(err) { sftpserver = testpath break } } if sftpserver == "" { return nil } tempdir, err := ioutil.TempDir("", "restic-test-") OK(t, err) b, err := sftp.Create(tempdir, sftpserver) OK(t, err) t.Logf("created sftp backend locally at %s", tempdir) return b }
func init() { sftpserver := "" for _, dir := range strings.Split(TestSFTPPath, ":") { testpath := filepath.Join(dir, "sftp-server") _, err := os.Stat(testpath) if !os.IsNotExist(err) { sftpserver = testpath break } } if sftpserver == "" { SkipMessage = "sftp server binary not found, skipping tests" return } test.CreateFn = func() (backend.Backend, error) { err := createTempdir() if err != nil { return nil, err } return sftp.Create(tempBackendDir, sftpserver) } test.OpenFn = func() (backend.Backend, error) { err := createTempdir() if err != nil { return nil, err } return sftp.Open(tempBackendDir, sftpserver) } test.CleanupFn = func() error { if tempBackendDir == "" { return nil } fmt.Printf("removing test backend at %v\n", tempBackendDir) err := os.RemoveAll(tempBackendDir) tempBackendDir = "" return err } }
// Create the backend specified by URI. func create(u string) (backend.Backend, error) { url, err := url.Parse(u) if err != nil { return nil, err } if url.Scheme == "" { return local.Create(url.Path) } else if url.Scheme == "s3" { return s3.Open(url.Host, url.Path[1:]) } args := []string{url.Host} if url.User != nil && url.User.Username() != "" { args = append(args, "-l") args = append(args, url.User.Username()) } args = append(args, "-s") args = append(args, "sftp") return sftp.Create(url.Path[1:], "ssh", args...) }