56 lines
1.7 KiB
Go
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")
|
|
}
|
|
}
|