Cross-module callers get an opaque ref plus rotating lease tokens so stale writers fail closed, and file I/O is refused inside a unit of work. Co-authored-by: Cursor <cursoragent@cursor.com>
18 lines
472 B
Go
18 lines
472 B
Go
package workspace
|
|
|
|
import "testing"
|
|
|
|
func TestLeaseTableRejectsStaleTokenAfterReissue(t *testing.T) {
|
|
table := NewLeaseTable()
|
|
old := WorkspaceRef{ID: "ws1", FencingToken: "old-token", ProjectScope: 3}
|
|
table.Issue(old)
|
|
fresh := WorkspaceRef{ID: "ws1", FencingToken: "new-token", ProjectScope: 3}
|
|
table.Issue(fresh)
|
|
if err := table.Assert(old); err != ErrStaleFencing {
|
|
t.Fatalf("stale: %v", err)
|
|
}
|
|
if err := table.Assert(fresh); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|