54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
package auth
|
|
|
|
import "testing"
|
|
|
|
func TestMatchPath(t *testing.T) {
|
|
cases := []struct {
|
|
pattern, path string
|
|
want bool
|
|
}{
|
|
{"test", "test", true},
|
|
{"test", "test/sub", true},
|
|
{"test", "testing", false},
|
|
{"test*", "test2", true},
|
|
{"test*", "test/sub", true},
|
|
{"te?t", "test", true},
|
|
{"te?t", "teat", true},
|
|
{"te?t", "te", false},
|
|
{"test/sub", "test/sub/file", true},
|
|
{"test/sub", "test/other/file", false},
|
|
}
|
|
for _, tc := range cases {
|
|
if got := MatchPath(tc.pattern, tc.path); got != tc.want {
|
|
t.Errorf("MatchPath(%q,%q)=%v want %v", tc.pattern, tc.path, got, tc.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestMaskForLongestRule(t *testing.T) {
|
|
a := &Account{Mask: Read, Rules: []PathRule{
|
|
{Dir: "team", Mask: Write},
|
|
{Dir: "team/private", Mask: None},
|
|
}}
|
|
if got := a.MaskFor("team/file"); got != Write {
|
|
t.Fatalf("team/file mask=%d", got)
|
|
}
|
|
if got := a.MaskFor("team/private/file"); got != None {
|
|
t.Fatalf("team/private/file mask=%d", got)
|
|
}
|
|
if got := a.MaskFor("other/file"); got != Read {
|
|
t.Fatalf("other/file mask=%d", got)
|
|
}
|
|
}
|
|
|
|
func TestParseRulesGuestDefaultAndOverride(t *testing.T) {
|
|
m, err := ParseRules(nil)
|
|
if err != nil || m.Guest.Mask != (Read|Write|Delete) {
|
|
t.Fatalf("unexpected guest default: %#v err=%v", m.Guest, err)
|
|
}
|
|
m, err = ParseRules([]string{"::r|demo:pw:rw"})
|
|
if err != nil || m.Guest.Mask != Read || m.Accounts["demo"].Mask != (Read|Write) {
|
|
t.Fatalf("unexpected parsed masks: %#v %#v err=%v", m.Guest, m.Accounts["demo"], err)
|
|
}
|
|
}
|