package backend_test

import (
	"io/ioutil"
	"os"
	"path/filepath"
	"strings"
	"testing"

	"github.com/restic/restic/backend/sftp"
	. "github.com/restic/restic/test"
)

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 teardownSFTPBackend(t *testing.T, b *sftp.SFTP) {
	if !TestCleanup {
		t.Logf("leaving backend at %s\n", b.Location())
		return
	}

	err := os.RemoveAll(b.Location())
	OK(t, err)
}

func TestSFTPBackend(t *testing.T) {
	if !RunIntegrationTest {
		t.Skip("integration tests disabled")
	}

	s := setupSFTPBackend(t)
	if s == nil {
		t.Skip("unable to find sftp-server binary")
		return
	}
	defer teardownSFTPBackend(t, s)

	testBackend(s, t)
}