From c01c1edb55d735ee1fc01030f444184d6012b734 Mon Sep 17 00:00:00 2001 From: "a.petraki" <a.petraki@perx.ru> Date: Wed, 20 Dec 2023 14:01:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BC=D0=B5=D1=82=D1=80=D0=B8=D0=BA,=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BA=D0=B0=D0=B7=D1=8B=D0=B2=D0=B0=D1=8E=D1=89=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=83=20=D1=81=20=D0=BB=D0=B5?= =?UTF-8?q?=D0=B9=D0=B1=D0=BB=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/metrics/metrics_test.go | 75 +++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 pkg/metrics/metrics_test.go diff --git a/pkg/metrics/metrics_test.go b/pkg/metrics/metrics_test.go new file mode 100644 index 00000000..0e171735 --- /dev/null +++ b/pkg/metrics/metrics_test.go @@ -0,0 +1,75 @@ +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") + }) +} -- GitLab