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) }