Harden lease lifecycle durability
This commit is contained in:
@@ -29,6 +29,49 @@ func TestCursorIsMonotonicAndAuthenticationIsRequired(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestSupportedProjectsPersistAndGateAvailability(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), "state.json")
|
||||
r := &Registry{StatePath: path}
|
||||
if err := r.Register(Worker{ID: "w", Token: "t", SupportedProjects: []string{"test-e2e"}}, ""); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !r.Supports("w", "test-e2e") || r.Supports("w", "correx") {
|
||||
t.Fatalf("unexpected project support")
|
||||
}
|
||||
restarted := &Registry{StatePath: path}
|
||||
if err := restarted.Load(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := restarted.Register(Worker{ID: "w", Token: "t", SupportedProjects: []string{"test-e2e"}}, ""); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !restarted.Supports("w", "test-e2e") || restarted.Supports("w", "correx") {
|
||||
t.Fatalf("project support did not survive restart")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAvailableRequiresFreshReachableLocalHerdrHealth(t *testing.T) {
|
||||
r := &Registry{}
|
||||
if err := r.Register(Worker{ID: "w", Token: "t"}, ""); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if r.Available("w") {
|
||||
t.Fatal("registration without local herdr probe admitted a worker")
|
||||
}
|
||||
if err := r.Heartbeat("w", WorkerHealth{HerdrStatus: "reachable", CheckedAt: time.Now().UTC()}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !r.Available("w") {
|
||||
t.Fatal("fresh reachable local herdr was not admitted")
|
||||
}
|
||||
if err := r.Heartbeat("w", WorkerHealth{HerdrStatus: "unreachable", CheckedAt: time.Now().UTC()}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if r.Available("w") {
|
||||
t.Fatal("unreachable local herdr was admitted")
|
||||
}
|
||||
}
|
||||
|
||||
func TestPendingApprovalSurvivesRegistryRestart(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), "federation-state.json")
|
||||
r := &Registry{StatePath: path}
|
||||
|
||||
Reference in New Issue
Block a user