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

Доработка теста-примера

parent 9c2a11da
No related branches found
No related tags found
No related merge requests found
package metrics
import (
"context"
"fmt"
"io"
"net"
"net/http"
"testing"
......@@ -15,36 +16,33 @@ import (
"github.com/stretchr/testify/require"
)
func serveMetrics(t *testing.T) *http.Server {
func serveMetricsHTTP(t *testing.T) net.Listener {
mux := http.NewServeMux()
mux.Handle("/metrics", promhttp.Handler())
srv := &http.Server{Addr: "localhost:30301", Handler: mux}
go func() { _ = srv.ListenAndServe() }()
return srv
srv := &http.Server{Addr: "localhost:30341", Handler: mux}
listener, err := net.Listen("tcp", "localhost:0")
require.NoError(t, err)
go func() { _ = srv.Serve(listener) }()
return listener
}
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()
})
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 func() {
_ = srv.Shutdown(ctx)
}()
l := serveMetricsHTTP(t)
defer func() { _ = l.Close() }()
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")
resp, err := http.Get(fmt.Sprintf("http://%s/metrics", l.Addr().String()))
require.NoError(t, err)
defer resp.Body.Close()
b, err := io.ReadAll(resp.Body)
......@@ -54,10 +52,8 @@ func TestMetrics_Example(t *testing.T) {
})
t.Run("Metrics with constant label values", func(t *testing.T) {
srv := serveMetrics(t)
defer func() {
_ = srv.Shutdown(ctx)
}()
l := serveMetricsHTTP(t)
defer func() { _ = l.Close() }()
name := "test_counter_" + id.GenerateNewID()
m := prometheus.NewCounterVec(prometheus.CounterOpts{
......@@ -70,7 +66,7 @@ func TestMetrics_Example(t *testing.T) {
prometheus.MustRegister(m)
m.With(prometheus.Labels{"a": "v_a1", "b": "v_b1"}).Inc()
resp, err := http.Get("http://localhost:30301/metrics")
resp, err := http.Get(fmt.Sprintf("http://%s/metrics", l.Addr().String()))
require.NoError(t, err)
defer resp.Body.Close()
b, err := io.ReadAll(resp.Body)
......@@ -79,17 +75,23 @@ func TestMetrics_Example(t *testing.T) {
assert.Contains(t, string(b), name+"{a=\"v_a1\",b=\"v_b1\",const_1=\"val_1\"} 1")
})
t.Run("Register multiple metrics with the same name and labels combine into metric family", func(t *testing.T) {
t.Run("Multiple metrics registered with the same name and labels combine into metric family", func(t *testing.T) {
registry := prometheus.NewRegistry()
name := "test_counter_" + id.GenerateNewID()
m1 := prometheus.NewCounterVec(prometheus.CounterOpts{Name: name, ConstLabels: prometheus.Labels{"const_1": "val_1"}}, []string{"a1", "b1"})
m2 := prometheus.NewCounterVec(prometheus.CounterOpts{Name: name, ConstLabels: prometheus.Labels{"const_1": "val_2"}}, []string{"a1", "b1"})
registry := prometheus.NewRegistry()
registry.MustRegister(m1)
registry.MustRegister(m2)
m1.With(prometheus.Labels{"a1": "v_a1", "b1": "v_b1"}).Inc()
m2 := prometheus.NewCounterVec(prometheus.CounterOpts{Name: name, ConstLabels: prometheus.Labels{"const_1": "val_2"}}, []string{"a1", "b1"})
registry.MustRegister(m2)
m2.With(prometheus.Labels{"a1": "v_a2", "b1": "v_b2"}).Inc()
assert.Panics(t, func() { m2.With(prometheus.Labels{"c": "v3"}).Inc() }, "Невозможно добавить метку, которая не была зарегистрирована при создании метрики")
assert.Panics(t, func() {
m3 := prometheus.NewCounterVec(prometheus.CounterOpts{Name: name, ConstLabels: prometheus.Labels{"const_2": "val_2"}}, []string{"a3", "b3"})
registry.MustRegister(m3)
}, "Невозможно зарегистрировать метрики с одним названием, но разными метками")
metricsFamily, err := registry.Gather()
require.NoError(t, err)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment