|
- package pipeline
-
- import (
- "strings"
- "testing"
- "time"
- )
-
- func TestBudgetPreferenceAffectsEffectiveBudgets(t *testing.T) {
- archivePolicy := Policy{
- Profile: "archive",
- Intent: "archive-and-triage",
- MaxRecordingStreams: 10,
- MaxDecodeJobs: 10,
- MaxRefinementJobs: 6,
- }
- archiveBudget := BudgetModelFromPolicy(archivePolicy)
- if archiveBudget.Record.EffectiveMax <= archiveBudget.Decode.EffectiveMax {
- t.Fatalf("expected archive preference to favor record, got record=%.2f decode=%.2f", archiveBudget.Record.EffectiveMax, archiveBudget.Decode.EffectiveMax)
- }
- if len(archiveBudget.Preference.Reasons) == 0 {
- t.Fatalf("expected archive preference reasons to be populated")
- }
-
- digitalPolicy := Policy{
- Profile: "digital-hunting",
- Intent: "decode-digital",
- MaxRecordingStreams: 10,
- MaxDecodeJobs: 10,
- MaxRefinementJobs: 6,
- }
- digitalBudget := BudgetModelFromPolicy(digitalPolicy)
- if digitalBudget.Decode.EffectiveMax <= digitalBudget.Record.EffectiveMax {
- t.Fatalf("expected digital preference to favor decode, got record=%.2f decode=%.2f", digitalBudget.Record.EffectiveMax, digitalBudget.Decode.EffectiveMax)
- }
- }
-
- func TestPressureSummaryReflectsPreference(t *testing.T) {
- policy := Policy{
- Profile: "digital-hunting",
- Intent: "decode-digital",
- MaxRecordingStreams: 4,
- MaxDecodeJobs: 4,
- MaxRefinementJobs: 2,
- }
- budget := BudgetModelFromPolicy(policy)
- queue := DecisionQueueStats{
- RecordQueued: 4,
- DecodeQueued: 4,
- RecordSelected: 2,
- DecodeSelected: 2,
- RecordActive: 1,
- DecodeActive: 1,
- }
- pressure := BuildBudgetPressureSummary(budget, RefinementAdmission{}, queue)
- if pressure.Record.Pressure <= 0 || pressure.Decode.Pressure <= 0 {
- t.Fatalf("expected non-zero pressure ratios, got record=%.2f decode=%.2f", pressure.Record.Pressure, pressure.Decode.Pressure)
- }
- if pressure.Record.Pressure <= pressure.Decode.Pressure {
- t.Fatalf("expected record pressure to be higher than decode under digital preference, got record=%.2f decode=%.2f", pressure.Record.Pressure, pressure.Decode.Pressure)
- }
- }
-
- func TestRefinementPressureTagsAdmission(t *testing.T) {
- policy := Policy{Profile: "archive", MaxRefinementJobs: 1, MinCandidateSNRDb: 0}
- cands := []Candidate{
- {ID: 1, CenterHz: 100, SNRDb: 10},
- {ID: 2, CenterHz: 200, SNRDb: 9},
- }
- plan := BuildRefinementPlan(cands, policy)
- res := AdmitRefinementPlan(plan, policy, time.Now(), &RefinementHold{Active: map[int64]time.Time{}})
- if res.Admission.Pressure.Level == "" || res.Admission.Pressure.Level == "idle" {
- t.Fatalf("expected pressure level to be set, got %+v", res.Admission.Pressure)
- }
- if res.Admission.Reason == "" || !strings.Contains(res.Admission.Reason, "pressure:") {
- t.Fatalf("expected admission reason to include pressure tag, got %s", res.Admission.Reason)
- }
- }
|