test: lock down section permission semantics

This commit is contained in:
OpenClaw Agent
2026-09-21 22:52:36 +08:00
parent c462a34d64
commit c39ae023fe
2 changed files with 98 additions and 0 deletions
+52
View File
@@ -51,3 +51,55 @@ func TestParseRulesGuestDefaultAndOverride(t *testing.T) {
t.Fatalf("unexpected parsed masks: %#v %#v err=%v", m.Guest, m.Accounts["demo"], err)
}
}
func TestSectionRuleSemantics(t *testing.T) {
a := &Account{Mask: Delete, Rules: []PathRule{
{Dir: "private", Mask: None, Deny: true},
{Dir: "readonly", Mask: ParseMask("r"), ChildrenOnly: true},
{Dir: "writable", Mask: ParseMask("w"), ChildrenOnly: true},
{Dir: "full", Mask: ParseMask("d"), ChildrenOnly: true},
}}
if got := a.MaskFor("private"); got != None {
t.Fatalf("private=%v", got)
}
if got := a.MaskFor("private/file"); got != None {
t.Fatalf("private/file=%v", got)
}
if got := a.MaskForEntry("readonly"); got != Delete {
t.Fatalf("readonly entry=%v", got)
}
if got := a.MaskFor("readonly/file"); got != Read {
t.Fatalf("readonly/file=%v", got)
}
if got := a.MaskForEntry("writable"); got != Delete {
t.Fatalf("writable entry=%v", got)
}
if got := a.MaskFor("writable/file"); got != ParseMask("w") {
t.Fatalf("writable/file=%v", got)
}
if got := a.MaskForEntry("full"); got != Delete {
t.Fatalf("full entry=%v", got)
}
if got := a.MaskFor("full/file"); got != (Read | Write | Delete) {
t.Fatalf("full/file=%v", got)
}
if got := a.MaskForEntry("readonly"); got != Delete {
t.Fatalf("readonly entry mask=%v", got)
}
if got := a.MaskForEntry("private"); got != None {
t.Fatalf("private entry mask=%v", got)
}
}
func TestWildcardSectionRules(t *testing.T) {
a := &Account{Mask: Read, Rules: []PathRule{{Dir: "project-*", Mask: Write, ChildrenOnly: true}}}
if got := a.MaskFor("project-one/file"); got != Write {
t.Fatalf("project-one/file=%v", got)
}
if got := a.MaskFor("project-two/file"); got != Write {
t.Fatalf("project-two/file=%v", got)
}
if got := a.MaskFor("project/file"); got != Read {
t.Fatalf("project/file=%v", got)
}
}