mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-07-01 18:25:47 +02:00
51 lines
1.3 KiB
Go
51 lines
1.3 KiB
Go
package hitl
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
appconfig "cyberstrike-ai/internal/config"
|
|
"cyberstrike-ai/internal/database"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func TestServicePurgeExpired_respectsZeroRetention(t *testing.T) {
|
|
dbPath := filepath.Join(t.TempDir(), "hitl.db")
|
|
db, err := database.NewDB(dbPath, zap.NewNop())
|
|
if err != nil {
|
|
t.Fatalf("NewDB: %v", err)
|
|
}
|
|
defer db.Close()
|
|
if _, err := db.Exec(`CREATE TABLE IF NOT EXISTS hitl_interrupts (
|
|
id TEXT PRIMARY KEY,
|
|
conversation_id TEXT NOT NULL,
|
|
mode TEXT NOT NULL,
|
|
tool_name TEXT NOT NULL,
|
|
status TEXT NOT NULL,
|
|
decision TEXT,
|
|
created_at DATETIME NOT NULL,
|
|
decided_at DATETIME
|
|
)`); err != nil {
|
|
t.Fatalf("create table: %v", err)
|
|
}
|
|
|
|
old := time.Now().AddDate(0, 0, -100).UTC().Format(time.RFC3339)
|
|
if _, err := db.Exec(`INSERT INTO hitl_interrupts
|
|
(id, conversation_id, mode, tool_name, status, decision, created_at, decided_at)
|
|
VALUES ('old-1', 'c1', 'approval', 'exec', 'decided', 'approve', ?, ?)`, old, old); err != nil {
|
|
t.Fatalf("insert: %v", err)
|
|
}
|
|
|
|
zero := 0
|
|
svc := NewService(db, &appconfig.Config{
|
|
Hitl: appconfig.HitlConfig{RetentionDays: &zero},
|
|
}, zap.NewNop())
|
|
svc.PurgeExpired()
|
|
|
|
if err := db.QueryRow(`SELECT id FROM hitl_interrupts WHERE id = 'old-1'`).Scan(new(string)); err != nil {
|
|
t.Fatalf("record should remain when retention_days=0: %v", err)
|
|
}
|
|
}
|