mirror of
https://github.com/restic/restic.git
synced 2024-08-23 04:40:46 +02:00
Our ParseConfig implementations always expect a specific scheme, thus no other scheme would work.
77 lines
1.7 KiB
Go
77 lines
1.7 KiB
Go
package location_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/restic/restic/internal/backend/location"
|
|
"github.com/restic/restic/internal/restic"
|
|
"github.com/restic/restic/internal/test"
|
|
)
|
|
|
|
type testConfig struct {
|
|
loc string
|
|
}
|
|
|
|
func testFactory() location.Factory {
|
|
return location.NewHTTPBackendFactory[testConfig, restic.Backend](
|
|
"local",
|
|
func(s string) (*testConfig, error) {
|
|
return &testConfig{loc: s}, nil
|
|
}, nil, nil, nil,
|
|
)
|
|
}
|
|
|
|
func TestParse(t *testing.T) {
|
|
registry := location.NewRegistry()
|
|
registry.Register(testFactory())
|
|
|
|
path := "local:example"
|
|
u, err := location.Parse(registry, path)
|
|
test.OK(t, err)
|
|
test.Equals(t, "local", u.Scheme)
|
|
test.Equals(t, &testConfig{loc: path}, u.Config)
|
|
}
|
|
|
|
func TestParseFallback(t *testing.T) {
|
|
fallbackTests := []string{
|
|
"dir1/dir2",
|
|
"/dir1/dir2",
|
|
"/dir1:foobar/dir2",
|
|
`\dir1\foobar\dir2`,
|
|
`c:\dir1\foobar\dir2`,
|
|
`C:\Users\appveyor\AppData\Local\Temp\1\restic-test-879453535\repo`,
|
|
`c:/dir1/foobar/dir2`,
|
|
}
|
|
|
|
registry := location.NewRegistry()
|
|
registry.Register(testFactory())
|
|
|
|
for _, path := range fallbackTests {
|
|
t.Run(path, func(t *testing.T) {
|
|
u, err := location.Parse(registry, path)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
test.Equals(t, "local", u.Scheme)
|
|
test.Equals(t, "local:"+path, u.Config.(*testConfig).loc)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestInvalidScheme(t *testing.T) {
|
|
registry := location.NewRegistry()
|
|
var invalidSchemes = []string{
|
|
"foobar:xxx",
|
|
"foobar:/dir/dir2",
|
|
}
|
|
|
|
for _, s := range invalidSchemes {
|
|
t.Run(s, func(t *testing.T) {
|
|
_, err := location.Parse(registry, s)
|
|
if err == nil {
|
|
t.Fatalf("error for invalid location %q not found", s)
|
|
}
|
|
})
|
|
}
|
|
}
|