proxy-pool/internal/platform/metrics/checker_test.go
youfak b35092ccdd
Some checks are pending
ci / proto (push) Waiting to run
ci / test (ubuntu-latest) (push) Waiting to run
ci / test (windows-latest) (push) Waiting to run
ci / race (push) Waiting to run
ci / integration (push) Waiting to run
feat: expose checker task metrics
2026-08-02 09:24:46 +08:00

80 lines
2.7 KiB
Go

package metrics
import (
"testing"
"github.com/prometheus/client_golang/prometheus"
dto "github.com/prometheus/client_model/go"
healthDomain "proxy-pool/internal/domain/health"
)
func TestCheckerCollectorRecordsOnlyFixedDimensions(t *testing.T) {
registry := prometheus.NewRegistry()
collector, err := NewCheckerCollector(registry)
if err != nil {
t.Fatalf("NewCheckerCollector() = %v", err)
}
collector.ObserveTaskDispatch(healthDomain.LevelBasic, 2)
collector.ObserveTaskDispatch(healthDomain.LevelTarget, 1)
collector.ObserveTaskDispatch("invalid", 99)
collector.ObserveObservation(healthDomain.LevelBasic, healthDomain.ObservationMetricAccepted)
collector.ObserveObservation(healthDomain.LevelTarget, healthDomain.ObservationMetricRejected)
collector.ObserveObservation("invalid", healthDomain.ObservationMetricAccepted)
assertMetricValue(t, registry, "proxy_pool_checker_tasks_dispatched_total", map[string]string{"level": "BASIC"}, 2)
assertMetricValue(t, registry, "proxy_pool_checker_tasks_dispatched_total", map[string]string{"level": "TARGET"}, 1)
assertMetricValue(t, registry, "proxy_pool_checker_observations_total", map[string]string{
"level": "BASIC", "result": "accepted",
}, 1)
assertMetricValue(t, registry, "proxy_pool_checker_observations_total", map[string]string{
"level": "TARGET", "result": "rejected",
}, 1)
}
func TestNewCheckerCollectorReusesRegisteredCollectors(t *testing.T) {
registry := prometheus.NewRegistry()
first, err := NewCheckerCollector(registry)
if err != nil {
t.Fatalf("first NewCheckerCollector() = %v", err)
}
second, err := NewCheckerCollector(registry)
if err != nil {
t.Fatalf("second NewCheckerCollector() = %v", err)
}
first.ObserveTaskDispatch(healthDomain.LevelEgress, 1)
second.ObserveTaskDispatch(healthDomain.LevelEgress, 1)
assertMetricValue(t, registry, "proxy_pool_checker_tasks_dispatched_total", map[string]string{"level": "EGRESS"}, 2)
}
func assertMetricValue(t *testing.T, registry *prometheus.Registry, name string, labels map[string]string, want float64) {
t.Helper()
metrics, err := registry.Gather()
if err != nil {
t.Fatalf("Gather() = %v", err)
}
for _, family := range metrics {
if family.GetName() != name {
continue
}
for _, metric := range family.GetMetric() {
if metricLabelsMatch(metric.GetLabel(), labels) && metric.GetCounter().GetValue() == want {
return
}
}
}
t.Fatalf("metric %s labels=%v value=%v was not found", name, labels, want)
}
func metricLabelsMatch(labels []*dto.LabelPair, want map[string]string) bool {
if len(labels) != len(want) {
return false
}
for _, label := range labels {
if want[label.GetName()] != label.GetValue() {
return false
}
}
return true
}