package freshness import ( "github.com/itworx/pulse/internal/datasource" "testing" "time" ) func TestRequiredStaleSourceIsUnknownWithAge(t *testing.T) { now := time.Date(2026, 8, 1, 12, 0, 0, 0, time.UTC) result, err := Evaluate(Input{SourceID: "prom", Required: true, Now: now, Health: datasource.SourceHealth{State: datasource.HealthHealthy, ObservedAt: now.Add(-2 * time.Minute), ReceivedAt: now, Policy: datasource.FreshnessPolicy{MaxAge: time.Minute}}}) if err != nil { t.Fatal(err) } if result.State != datasource.HealthUnknown || result.Age == nil || *result.Age != 2*time.Minute { t.Fatalf("unexpected stale result: %+v", result) } } func TestRecoveryEventOnlyFollowsUnknown(t *testing.T) { now := time.Now().UTC() health := datasource.SourceHealth{State: datasource.HealthHealthy, ObservedAt: now, ReceivedAt: now, Policy: datasource.FreshnessPolicy{MaxAge: time.Minute}} result, err := Evaluate(Input{SourceID: "prom", Previous: datasource.HealthUnknown, Health: health, Now: now}) if err != nil || !result.Recovery || result.Event != "DATASOURCE_RECOVERED" { t.Fatalf("unexpected recovery: %+v %v", result, err) } result, err = Evaluate(Input{SourceID: "prom", Previous: datasource.HealthHealthy, Health: health, Now: now}) if err != nil || result.Recovery { t.Fatal("false recovery event") } } func TestMissingTelemetryNeverBecomesHealthy(t *testing.T) { now := time.Now().UTC() result, err := Evaluate(Input{SourceID: "prom", Required: true, Previous: datasource.HealthUnknown, Now: now, Health: datasource.SourceHealth{State: datasource.HealthUnknown, ReceivedAt: now, Policy: datasource.FreshnessPolicy{MaxAge: time.Minute}}}) if err != nil { t.Fatal(err) } if result.State == datasource.HealthHealthy { t.Fatal("missing telemetry became healthy") } }