+autoremoval of stale discovery records
This commit is contained in:
105
api/pkg/discovery/registry_stale_test.go
Normal file
105
api/pkg/discovery/registry_stale_test.go
Normal file
@@ -0,0 +1,105 @@
|
||||
package discovery
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestRegistryDeleteStale_RemovesOnlyExpiredEntries(t *testing.T) {
|
||||
now := time.Date(2026, 2, 27, 12, 0, 0, 0, time.UTC)
|
||||
registry := NewRegistry()
|
||||
|
||||
stale := RegistryEntry{
|
||||
ID: "stale-gateway",
|
||||
InstanceID: "stale-instance",
|
||||
Service: "CARD",
|
||||
Rail: RailCardPayout,
|
||||
Operations: []string{OperationSend},
|
||||
Version: "3.0.0",
|
||||
Status: "ok",
|
||||
Health: HealthParams{TimeoutSec: 30},
|
||||
LastHeartbeat: now.Add(-31 * time.Second),
|
||||
}
|
||||
fresh := RegistryEntry{
|
||||
ID: "fresh-gateway",
|
||||
InstanceID: "fresh-instance",
|
||||
Service: "CARD",
|
||||
Rail: RailCardPayout,
|
||||
Operations: []string{OperationSend},
|
||||
Version: "3.0.0",
|
||||
Status: "ok",
|
||||
Health: HealthParams{TimeoutSec: 30},
|
||||
LastHeartbeat: now.Add(-5 * time.Second),
|
||||
}
|
||||
unhealthyButRecent := RegistryEntry{
|
||||
ID: "degraded-gateway",
|
||||
InstanceID: "degraded-instance",
|
||||
Service: "CARD",
|
||||
Rail: RailCardPayout,
|
||||
Operations: []string{OperationSend},
|
||||
Version: "3.0.0",
|
||||
Status: "degraded",
|
||||
Health: HealthParams{TimeoutSec: 30},
|
||||
LastHeartbeat: now.Add(-5 * time.Second),
|
||||
}
|
||||
|
||||
registry.UpsertEntry(stale, now)
|
||||
registry.UpsertEntry(fresh, now)
|
||||
registry.UpsertEntry(unhealthyButRecent, now)
|
||||
|
||||
removed := registry.DeleteStale(now)
|
||||
if len(removed) != 1 {
|
||||
t.Fatalf("unexpected removed count: got=%d want=1", len(removed))
|
||||
}
|
||||
|
||||
wantKey := registryEntryKey(normalizeEntry(stale))
|
||||
if removed[0] != wantKey {
|
||||
t.Fatalf("unexpected removed key: got=%q want=%q", removed[0], wantKey)
|
||||
}
|
||||
|
||||
all := registry.List(now, false)
|
||||
if len(all) != 2 {
|
||||
t.Fatalf("unexpected remaining entries count: got=%d want=2", len(all))
|
||||
}
|
||||
}
|
||||
|
||||
func TestRegistryDeleteStale_UsesPerEntryTimeout(t *testing.T) {
|
||||
now := time.Date(2026, 2, 27, 12, 0, 0, 0, time.UTC)
|
||||
registry := NewRegistry()
|
||||
|
||||
shortTimeout := RegistryEntry{
|
||||
ID: "short-timeout",
|
||||
InstanceID: "short-timeout",
|
||||
Service: "CARD",
|
||||
Rail: RailCardPayout,
|
||||
Operations: []string{OperationSend},
|
||||
Version: "3.0.0",
|
||||
Status: "ok",
|
||||
Health: HealthParams{TimeoutSec: 5},
|
||||
LastHeartbeat: now.Add(-21 * time.Second),
|
||||
}
|
||||
longTimeout := RegistryEntry{
|
||||
ID: "long-timeout",
|
||||
InstanceID: "long-timeout",
|
||||
Service: "CARD",
|
||||
Rail: RailCardPayout,
|
||||
Operations: []string{OperationSend},
|
||||
Version: "3.0.0",
|
||||
Status: "ok",
|
||||
Health: HealthParams{TimeoutSec: 60},
|
||||
LastHeartbeat: now.Add(-6 * time.Second),
|
||||
}
|
||||
|
||||
registry.UpsertEntry(shortTimeout, now)
|
||||
registry.UpsertEntry(longTimeout, now)
|
||||
|
||||
removed := registry.DeleteStale(now)
|
||||
if len(removed) != 1 {
|
||||
t.Fatalf("unexpected removed count: got=%d want=1", len(removed))
|
||||
}
|
||||
|
||||
wantKey := registryEntryKey(normalizeEntry(shortTimeout))
|
||||
if removed[0] != wantKey {
|
||||
t.Fatalf("unexpected removed key: got=%q want=%q", removed[0], wantKey)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user