fix: harden operations and configuration recovery

This commit is contained in:
proxyctl coordinator
2026-08-30 11:13:45 +08:00
parent e34bf7d989
commit 8928986830
27 changed files with 542 additions and 125 deletions
+36
View File
@@ -10,6 +10,42 @@ import (
"proxyctl/internal/operationlock"
)
type recordingLocker struct {
name string
events *[]string
err error
}
func (l recordingLocker) Lock(context.Context) (func(), error) {
*l.events = append(*l.events, "lock "+l.name)
if l.err != nil {
return nil, l.err
}
return func() { *l.events = append(*l.events, "unlock "+l.name) }, nil
}
func TestGroupAcquiresInOrderAndReleasesInReverse(t *testing.T) {
var events []string
group := operationlock.NewGroup(
recordingLocker{name: "system", events: &events},
recordingLocker{name: "user", events: &events},
)
unlock, err := group.Lock(context.Background())
if err != nil {
t.Fatal(err)
}
unlock()
want := []string{"lock system", "lock user", "unlock user", "unlock system"}
if len(events) != len(want) {
t.Fatalf("events = %v, want %v", events, want)
}
for i := range want {
if events[i] != want[i] {
t.Fatalf("events = %v, want %v", events, want)
}
}
}
func TestLockRejectsSymlinkedStateAncestor(t *testing.T) {
root := t.TempDir()
victim := filepath.Join(root, "victim")