Files
DoGaMa-serv/internal/audit/service_test.go
T

56 lines
1.7 KiB
Go

package audit_test
import (
"context"
"path/filepath"
"testing"
"time"
"git.zaynet.fr/DoGaMa/DoGaMa-serv/internal/audit"
"git.zaynet.fr/DoGaMa/DoGaMa-serv/internal/persistence/sqlite"
)
func TestRecordFiltersSummaryAndRetention(t *testing.T) {
ctx := context.Background()
db, err := sqlite.Open(ctx, filepath.Join(t.TempDir(), "dogama.db"))
if err != nil {
t.Fatal(err)
}
defer db.Close()
service := audit.New(db)
old := time.Now().UTC().AddDate(0, 0, -40)
if err := service.Record(ctx, audit.Event{OccurredAt: old, ActorLabel: "admin", Action: "instance.update", Outcome: "allowed", Summary: map[string]string{"target_name": "Palworld", "secret": "must-not-persist"}}); err != nil {
t.Fatal(err)
}
events, err := service.List(ctx, audit.Filter{Action: "instance.update"})
if err != nil || len(events) != 1 {
t.Fatalf("events=%#v err=%v", events, err)
}
if events[0].Summary["target_name"] != "Palworld" || events[0].Summary["secret"] != "" {
t.Fatalf("summary was not allow-listed: %#v", events[0].Summary)
}
if err := service.SetPolicy(ctx, audit.Policy{RetentionDays: 30, MaximumCount: 100}); err != nil {
t.Fatal(err)
}
deleted, err := service.RunRetention(ctx)
if err != nil || deleted != 1 {
t.Fatalf("deleted=%d err=%v", deleted, err)
}
}
func TestPolicyAndPurgeBounds(t *testing.T) {
ctx := context.Background()
db, err := sqlite.Open(ctx, filepath.Join(t.TempDir(), "dogama.db"))
if err != nil {
t.Fatal(err)
}
defer db.Close()
service := audit.New(db)
if err := service.SetPolicy(ctx, audit.Policy{RetentionDays: -1}); err == nil {
t.Fatal("negative retention accepted")
}
if _, err := service.Purge(ctx, time.Now().Add(time.Hour)); err == nil {
t.Fatal("future purge accepted")
}
}