2017-07-30 14:30:18 +02:00
|
|
|
package restserver
|
|
|
|
|
|
|
|
import (
|
|
|
|
"path/filepath"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestJoin(t *testing.T) {
|
|
|
|
var tests = []struct {
|
|
|
|
base, name string
|
|
|
|
result string
|
|
|
|
}{
|
|
|
|
{"/", "foo/bar", "/foo/bar"},
|
|
|
|
{"/srv/server", "foo/bar", "/srv/server/foo/bar"},
|
|
|
|
{"/srv/server", "/foo/bar", "/srv/server/foo/bar"},
|
|
|
|
{"/srv/server", "foo/../bar", "/srv/server/bar"},
|
|
|
|
{"/srv/server", "../bar", "/srv/server/bar"},
|
|
|
|
{"/srv/server", "..", "/srv/server"},
|
|
|
|
{"/srv/server", "../..", "/srv/server"},
|
|
|
|
{"/srv/server", "/repo/data/", "/srv/server/repo/data"},
|
|
|
|
{"/srv/server", "/repo/data/../..", "/srv/server"},
|
|
|
|
{"/srv/server", "/repo/data/../data/../../..", "/srv/server"},
|
|
|
|
{"/srv/server", "/repo/data/../data/../../..", "/srv/server"},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, test := range tests {
|
|
|
|
t.Run("", func(t *testing.T) {
|
|
|
|
got, err := join(filepath.FromSlash(test.base), test.name)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
want := filepath.FromSlash(test.result)
|
|
|
|
if got != want {
|
|
|
|
t.Fatalf("wrong result returned, want %v, got %v", want, got)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
2018-03-20 20:45:59 +01:00
|
|
|
|
|
|
|
func TestIsUserPath(t *testing.T) {
|
|
|
|
var tests = []struct {
|
|
|
|
username string
|
|
|
|
path string
|
|
|
|
result bool
|
|
|
|
}{
|
|
|
|
{"foo", "/", false},
|
|
|
|
{"foo", "/foo", true},
|
|
|
|
{"foo", "/foo/", true},
|
|
|
|
{"foo", "/foo/bar", true},
|
|
|
|
{"foo", "/foobar", false},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, test := range tests {
|
|
|
|
result := isUserPath(test.username, test.path)
|
|
|
|
if result != test.result {
|
|
|
|
t.Errorf("isUserPath(%q, %q) was incorrect, got: %v, want: %v.", test.username, test.path, result, test.result)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|