package app import ( "testing" "github.com/jan/fm-rds-tx/internal/output" ) func TestRuntimeIndicator(t *testing.T) { cases := []struct { name string queueHealth output.QueueHealth lateBuffers uint64 want RuntimeIndicator }{ { name: "normal", queueHealth: output.QueueHealthNormal, lateBuffers: 0, want: RuntimeIndicatorNormal, }, { name: "degradedLateBuffers", queueHealth: output.QueueHealthNormal, lateBuffers: 1, want: RuntimeIndicatorDegraded, }, { name: "degradedQueueLow", queueHealth: output.QueueHealthLow, lateBuffers: 0, want: RuntimeIndicatorDegraded, }, { name: "queueCritical", queueHealth: output.QueueHealthCritical, lateBuffers: 0, want: RuntimeIndicatorQueueCritical, }, { name: "criticalLateBuffers", queueHealth: output.QueueHealthCritical, lateBuffers: 3, want: RuntimeIndicatorQueueCritical, }, } for _, tc := range cases { tc := tc t.Run(tc.name, func(t *testing.T) { if got := runtimeIndicator(tc.queueHealth, tc.lateBuffers); got != tc.want { t.Fatalf("runtime indicator mismatch: queue=%s late=%d want=%s got=%s", tc.queueHealth, tc.lateBuffers, tc.want, got) } }) } } func TestRuntimeAlert(t *testing.T) { cases := []struct { name string queueHealth output.QueueHealth lateBuffers uint64 want string }{ { name: "normal", queueHealth: output.QueueHealthNormal, lateBuffers: 0, want: "", }, { name: "lateBuffers", queueHealth: output.QueueHealthNormal, lateBuffers: 1, want: "late buffers", }, { name: "queueLow", queueHealth: output.QueueHealthLow, lateBuffers: 0, want: "queue health low", }, { name: "queueCritical", queueHealth: output.QueueHealthCritical, lateBuffers: 0, want: "queue health critical", }, { name: "criticalLateBuffers", queueHealth: output.QueueHealthCritical, lateBuffers: 5, want: "queue health critical", }, } for _, tc := range cases { tc := tc t.Run(tc.name, func(t *testing.T) { if got := runtimeAlert(tc.queueHealth, tc.lateBuffers); got != tc.want { t.Fatalf("runtime alert mismatch: queue=%s late=%d want=%q got=%q", tc.queueHealth, tc.lateBuffers, tc.want, got) } }) } }