// Create the backend specified by URI. func create(s string) (restic.Backend, error) { debug.Log("parsing location %v", s) loc, err := location.Parse(s) if err != nil { return nil, err } switch loc.Scheme { case "local": debug.Log("create local repository at %#v", loc.Config) return local.Create(loc.Config.(string)) case "sftp": debug.Log("create sftp repository at %#v", loc.Config) return sftp.CreateWithConfig(loc.Config.(sftp.Config)) case "s3": cfg := loc.Config.(s3.Config) if cfg.KeyID == "" { cfg.KeyID = os.Getenv("AWS_ACCESS_KEY_ID") } if cfg.Secret == "" { cfg.Secret = os.Getenv("AWS_SECRET_ACCESS_KEY") } debug.Log("create s3 repository at %#v", loc.Config) return s3.Open(cfg) case "rest": return rest.Open(loc.Config.(rest.Config)) } debug.Log("invalid repository scheme: %v", s) return nil, errors.Fatalf("invalid scheme %q", loc.Scheme) }
func init() { test.CreateFn = func() (restic.Backend, error) { err := createTempdir() if err != nil { return nil, err } return local.Create(tempBackendDir) } test.OpenFn = func() (restic.Backend, error) { err := createTempdir() if err != nil { return nil, err } return local.Open(tempBackendDir) } test.CleanupFn = func() error { if tempBackendDir == "" { return nil } fmt.Printf("removing test backend at %v\n", tempBackendDir) err := os.RemoveAll(tempBackendDir) tempBackendDir = "" return err } }
// TestRepository returns a repository initialized with a test password on an // in-memory backend. When the environment variable RESTIC_TEST_REPO is set to // a non-existing directory, a local backend is created there and this is used // instead. The directory is not removed, but left there for inspection. func TestRepository(t testing.TB) (r restic.Repository, cleanup func()) { dir := os.Getenv("RESTIC_TEST_REPO") if dir != "" { _, err := os.Stat(dir) if err != nil { be, err := local.Create(dir) if err != nil { t.Fatalf("error creating local backend at %v: %v", dir, err) } return TestRepositoryWithBackend(t, be) } if err == nil { t.Logf("directory at %v already exists, using mem backend", dir) } } return TestRepositoryWithBackend(t, nil) }
func SetupRepo() *repository.Repository { tempdir, err := ioutil.TempDir(TestTempDir, "restic-test-") if err != nil { panic(err) } // create repository below temp dir b, err := local.Create(filepath.Join(tempdir, "repo")) if err != nil { panic(err) } repo := repository.New(b) err = repo.Init(TestPassword) if err != nil { panic(err) } return repo }