Files
neural-hunt/internal/server/profile_cleanup_test.go
T
2026-08-10 16:20:59 +02:00

56 lines
1.5 KiB
Go

package server
import (
"context"
"testing"
"time"
"neuralhunt/internal/auth"
"neuralhunt/internal/data"
rtx "neuralhunt/internal/runtime"
)
func TestProfileCleanupPreviewProtectsConnectedClient(t *testing.T) {
ctx := context.Background()
db, err := data.OpenSQLite(ctx, t.TempDir()+"/cleanup.db")
if err != nil {
t.Fatal(err)
}
defer db.Close()
store := data.New(db)
jwk := auth.PublicJWK{Kty: "EC", Crv: "P-256", X: "AQ", Y: "Ag"}
for _, id := range []string{"offline_old", "online_old"} {
if err := store.UpsertClient(ctx, id, jwk); err != nil {
t.Fatal(err)
}
}
old := time.Now().UTC().Add(-10 * 24 * time.Hour).UnixMilli()
if _, err := db.ExecContext(ctx, `UPDATE clients SET last_seen=?`, old); err != nil {
t.Fatal(err)
}
runtimeState := rtx.New()
if _, err := runtimeState.AcquirePresence("online_old", "session"); err != nil {
t.Fatal(err)
}
s := &Server{store: store, runtime: runtimeState}
preview, ids, err := s.profileCleanupPreview(ctx, 7*24*60*60)
if err != nil {
t.Fatal(err)
}
if preview.Eligible != 1 || preview.ProtectedConnected != 1 {
t.Fatalf("unexpected preview: %+v", preview)
}
if len(ids) != 1 || ids[0] != "offline_old" {
t.Fatalf("unexpected ids: %#v", ids)
}
}
func TestProfileCleanupDurationGuard(t *testing.T) {
if _, err := profileCleanupDurationSeconds("3599"); err == nil {
t.Fatal("sub-hour cleanup window should be rejected")
}
if got, err := profileCleanupDurationSeconds("86400"); err != nil || got != 86400 {
t.Fatalf("got=%d err=%v", got, err)
}
}