66 lines
1.9 KiB
Go
66 lines
1.9 KiB
Go
package retention
|
|
|
|
import (
|
|
"testing"
|
|
|
|
core "git.yuntuo.hk/k2safe/orbit/model"
|
|
)
|
|
|
|
func TestDefaultsAndValidation(t *testing.T) {
|
|
ns, err := core.NewID()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
p := Defaults(ns)
|
|
if p.Enabled || p.Source != "default" || p.IdempotencyDays != 90 || p.TaskHistoryDays != 365 || p.AuditLogDays != 2555 {
|
|
t.Fatalf("unexpected defaults: %+v", p)
|
|
}
|
|
if err := p.Validate(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
p.IdempotencyDays = 89
|
|
if err := p.Validate(); err == nil {
|
|
t.Fatal("accepted an idempotency window shorter than the safety minimum")
|
|
}
|
|
}
|
|
|
|
func TestUpdateInputRequiresReasonAndKeepsSafetyMinimum(t *testing.T) {
|
|
ns, _ := core.NewID()
|
|
in := UpdateInput{
|
|
IdempotencyDays: 90, TaskHistoryDays: 30, WorkflowHistoryDays: 30,
|
|
EventLogDays: 30, DeliveryHistoryDays: 30, InboxHistoryDays: 30,
|
|
AuditLogDays: 365, Reason: "quarterly retention review",
|
|
}
|
|
if _, err := in.ToPolicy(ns); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
in.Reason = ""
|
|
if _, err := in.ToPolicy(ns); err == nil {
|
|
t.Fatal("accepted an empty audit reason")
|
|
}
|
|
in.Reason = "shorten"
|
|
in.IdempotencyDays = 89
|
|
if _, err := in.ToPolicy(ns); err == nil {
|
|
t.Fatal("accepted an unsafe idempotency window")
|
|
}
|
|
}
|
|
|
|
func TestFromEnvOverridesOnlyDeploymentDefaults(t *testing.T) {
|
|
values := map[string]string{
|
|
"ORBIT_RETENTION_IDEMPOTENCY_DAYS": "120",
|
|
"ORBIT_RETENTION_TASK_DAYS": "180",
|
|
"ORBIT_RETENTION_AUDIT_DAYS": "730",
|
|
}
|
|
p, err := FromEnv(func(k string) string { return values[k] })
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if p.IdempotencyDays != 120 || p.TaskHistoryDays != 180 || p.AuditLogDays != 730 || p.EventLogDays != DefaultEventLogDays {
|
|
t.Fatalf("environment defaults not applied: %+v", p)
|
|
}
|
|
values["ORBIT_RETENTION_IDEMPOTENCY_DAYS"] = "89"
|
|
if _, err := FromEnv(func(k string) string { return values[k] }); err == nil {
|
|
t.Fatal("accepted unsafe environment idempotency window")
|
|
}
|
|
}
|