Files
lingniu-vehicle-ingest/go/vehicle-gateway/internal/capacity/check_test.go

86 lines
3.4 KiB
Go

package capacity
import (
"strings"
"testing"
)
func TestEvaluateReportsOKWhenCriticalBacklogsAreZero(t *testing.T) {
report := Evaluate(map[string]string{
"gateway": `vehicle_gateway_active_connections{protocol="JT808"} 50000
vehicle_gateway_connection_rejections_total{protocol="JT808",reason="max_connections"} 0
vehicle_async_sink_queue_depth{sink="nats"} 0`,
"fast-writer": `vehicle_fast_writer_nats_consumer_ack_pending{consumer="vehicle-fast-writer",stream="VEHICLE_INGEST"} 0
vehicle_fast_writer_nats_consumer_pending{consumer="vehicle-fast-writer",stream="VEHICLE_INGEST"} 0
vehicle_fast_writer_batch_pending_messages 0`,
"history": `vehicle_history_batch_pending_messages 0
vehicle_history_batch_pending_rows 0
vehicle_history_kafka_lag{topic="vehicle.raw.go.jt808.v1",partition="0"} 0`,
})
if report.Status != StatusOK {
t.Fatalf("status = %s, want ok: %#v", report.Status, report)
}
if report.Totals.ActiveConnections != 50000 {
t.Fatalf("active connections = %d, want 50000", report.Totals.ActiveConnections)
}
if len(report.Findings) != 0 {
t.Fatalf("findings = %#v, want none", report.Findings)
}
}
func TestEvaluateReportsDegradedForPendingAndRejects(t *testing.T) {
report := Evaluate(map[string]string{
"gateway": `vehicle_gateway_active_connections{protocol="JT808"} 120000
vehicle_gateway_connection_rejections_total{protocol="JT808",reason="max_connections"} 3
vehicle_async_sink_queue_depth{sink="nats"} 25000`,
"bridge": `vehicle_bridge_nats_consumer_ack_pending{consumer="vehicle-kafka-bridge",stream="VEHICLE_INGEST"} 101
vehicle_bridge_nats_consumer_pending{consumer="vehicle-kafka-bridge",stream="VEHICLE_INGEST"} 12001
vehicle_bridge_batch_pending_messages 1001`,
"fast-writer": `vehicle_fast_writer_nats_consumer_ack_pending{consumer="vehicle-fast-writer",stream="VEHICLE_INGEST"} 11
vehicle_fast_writer_nats_consumer_pending{consumer="vehicle-fast-writer",stream="VEHICLE_INGEST"} 12001
vehicle_fast_writer_batch_pending_messages 9`,
"history": `vehicle_history_batch_pending_messages 6
vehicle_history_batch_pending_rows 7
vehicle_history_kafka_lag{topic="vehicle.raw.go.jt808.v1",partition="0"} 42`,
})
if report.Status != StatusDegraded {
t.Fatalf("status = %s, want degraded: %#v", report.Status, report)
}
joined := strings.Join(report.Findings, "\n")
for _, want := range []string{
"gateway connection rejections",
"async sink queue depth",
"bridge ack pending",
"bridge consumer pending",
"bridge batch pending",
"fast writer ack pending",
"fast writer consumer pending",
"history batch pending",
"kafka lag",
} {
if !strings.Contains(joined, want) {
t.Fatalf("finding missing %q in:\n%s", want, joined)
}
}
if report.Totals.BridgeAckPending != 101 {
t.Fatalf("bridge ack pending = %v, want 101", report.Totals.BridgeAckPending)
}
if report.Totals.BridgeConsumerPending != 12001 {
t.Fatalf("bridge consumer pending = %v, want 12001", report.Totals.BridgeConsumerPending)
}
if report.Totals.FastWriterAckPending != 11 {
t.Fatalf("fast writer ack pending = %v, want 11", report.Totals.FastWriterAckPending)
}
if report.Totals.FastWriterBatchPending != 9 {
t.Fatalf("fast writer batch pending = %v, want 9", report.Totals.FastWriterBatchPending)
}
if report.Totals.HistoryBatchPending != 6 {
t.Fatalf("history batch pending = %v, want 6", report.Totals.HistoryBatchPending)
}
if report.Totals.HistoryRowsPending != 7 {
t.Fatalf("history rows pending = %v, want 7", report.Totals.HistoryRowsPending)
}
}