Skip to content
Snippets Groups Projects
Commit c01c1edb authored by Alena Petraki's avatar Alena Petraki :nail_care_tone1:
Browse files

Добавлены тесты для метрик, показывающие работу с лейблами

parent f86a1520
No related branches found
No related tags found
No related merge requests found
package metrics
import (
"context"
"io"
"net/http"
"testing"
"git.perx.ru/perxis/perxis-go/pkg/id"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func serveMetrics(t *testing.T) *http.Server {
mux := http.NewServeMux()
mux.Handle("/metrics", promhttp.Handler())
srv := &http.Server{Addr: "localhost:30301", Handler: mux}
go func() { srv.ListenAndServe() }()
return srv
}
func TestMetrics_Example(t *testing.T) {
ctx := context.Background()
t.Run("Metrics do not allow dynamically assigned labels", func(t *testing.T) {
m := prometheus.NewCounterVec(prometheus.CounterOpts{Name: "test_counter_" + id.GenerateNewID()}, nil)
prometheus.MustRegister(m)
assert.Panics(t, func() {
m.With(prometheus.Labels{"a": "v_a1", "b": "v_b1"}).Inc()
})
})
t.Run("Metrics allow dynamically assigned label values", func(t *testing.T) {
srv := serveMetrics(t)
defer srv.Shutdown(ctx)
name := "test_counter_" + id.GenerateNewID()
m := prometheus.NewCounterVec(prometheus.CounterOpts{Name: name}, []string{"a", "b"})
prometheus.MustRegister(m)
m.With(prometheus.Labels{"a": "v_a1", "b": "v_b1"}).Inc()
resp, err := http.Get("http://localhost:30301/metrics")
require.NoError(t, err)
defer resp.Body.Close()
b, err := io.ReadAll(resp.Body)
require.NoError(t, err)
// fmt.Println(string(b))
assert.Contains(t, string(b), name+"{a=\"v_a1\",b=\"v_b1\"} 1")
})
t.Run("Metrics with constant label values", func(t *testing.T) {
srv := serveMetrics(t)
defer srv.Shutdown(ctx)
name := "test_counter_" + id.GenerateNewID()
m := prometheus.NewCounterVec(prometheus.CounterOpts{
Namespace: "test_namespace",
Subsystem: "test_subsystem",
Name: name,
Help: "Test Help",
ConstLabels: prometheus.Labels{"const_1": "val_1"},
}, []string{"a", "b"})
prometheus.MustRegister(m)
m.With(prometheus.Labels{"a": "v_a1", "b": "v_b1"}).Inc()
resp, err := http.Get("http://localhost:30301/metrics")
require.NoError(t, err)
defer resp.Body.Close()
b, err := io.ReadAll(resp.Body)
require.NoError(t, err)
// fmt.Println(string(b))
assert.Contains(t, string(b), name+"{a=\"v_a1\",b=\"v_b1\",const_1=\"val_1\"} 1")
})
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment