fix: harden operations and configuration recovery
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user