proxy-pool/internal/platform/metrics/extraction_test.go
2026-08-02 14:08:45 +08:00

59 lines
2.5 KiB
Go

package metrics
import (
"testing"
"github.com/prometheus/client_golang/prometheus"
controllerExtraction "proxy-pool/internal/controller/extraction"
)
func TestExtractionCollectorRecordsOnlyFixedResults(t *testing.T) {
registry := prometheus.NewRegistry()
collector, err := NewExtractionCollector(registry)
if err != nil {
t.Fatalf("NewExtractionCollector() error = %v", err)
}
collector.ObserveExtraction(controllerExtraction.MetricsEvent{
Result: controllerExtraction.MetricComplete, Requested: 2, Returned: 2,
})
collector.ObserveExtraction(controllerExtraction.MetricsEvent{
Result: controllerExtraction.MetricPartial, Requested: 3, Returned: 1,
})
collector.ObserveExtraction(controllerExtraction.MetricsEvent{
Result: controllerExtraction.MetricUnavailable, Requested: 1,
})
collector.ObserveExtraction(controllerExtraction.MetricsEvent{
Result: "client-a", Requested: 10, Returned: 10,
})
assertMetricValue(t, registry, "proxy_pool_controller_extraction_requests_total", map[string]string{"result": "complete"}, 1)
assertMetricValue(t, registry, "proxy_pool_controller_extraction_requests_total", map[string]string{"result": "partial"}, 1)
assertMetricValue(t, registry, "proxy_pool_controller_extraction_requests_total", map[string]string{"result": "unavailable"}, 1)
assertMetricValue(t, registry, "proxy_pool_controller_extraction_requested_proxies_total", nil, 6)
assertMetricValue(t, registry, "proxy_pool_controller_extraction_returned_proxies_total", nil, 3)
}
func TestNewExtractionCollectorReusesRegisteredCollectors(t *testing.T) {
registry := prometheus.NewRegistry()
first, err := NewExtractionCollector(registry)
if err != nil {
t.Fatalf("first NewExtractionCollector() error = %v", err)
}
second, err := NewExtractionCollector(registry)
if err != nil {
t.Fatalf("second NewExtractionCollector() error = %v", err)
}
first.ObserveExtraction(controllerExtraction.MetricsEvent{
Result: controllerExtraction.MetricEmpty, Requested: 1,
})
second.ObserveExtraction(controllerExtraction.MetricsEvent{
Result: controllerExtraction.MetricComplete, Requested: 1, Returned: 1,
})
assertMetricValue(t, registry, "proxy_pool_controller_extraction_requests_total", map[string]string{"result": "empty"}, 1)
assertMetricValue(t, registry, "proxy_pool_controller_extraction_requests_total", map[string]string{"result": "complete"}, 1)
assertMetricValue(t, registry, "proxy_pool_controller_extraction_requested_proxies_total", nil, 2)
assertMetricValue(t, registry, "proxy_pool_controller_extraction_returned_proxies_total", nil, 1)
}