forked from TrueCloudLab/frostfs-node
65 lines
1.8 KiB
Go
65 lines
1.8 KiB
Go
package metrics
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestDescribeAll(t *testing.T) {
|
|
const (
|
|
namespace = "my_ns"
|
|
subsystem = "mysub"
|
|
)
|
|
mustRegister(newCounter(prometheus.CounterOpts{
|
|
Namespace: namespace,
|
|
Subsystem: subsystem,
|
|
Name: "my_counter",
|
|
}))
|
|
|
|
labels := []string{"label1", "label2"}
|
|
mustRegister(newGaugeVec(prometheus.GaugeOpts{
|
|
Namespace: namespace,
|
|
Subsystem: subsystem,
|
|
Name: "my_gauge",
|
|
}, labels))
|
|
|
|
constLabels := prometheus.Labels{
|
|
"const1": "abc",
|
|
"const2": "xyz",
|
|
}
|
|
mustRegister(newCounter(prometheus.CounterOpts{
|
|
Namespace: namespace,
|
|
Subsystem: subsystem,
|
|
Name: "with_const_labels",
|
|
ConstLabels: constLabels,
|
|
}))
|
|
|
|
descriptions, err := DescribeAll()
|
|
require.NoError(t, err)
|
|
|
|
seen := make(map[string]bool)
|
|
for i := range descriptions {
|
|
if !strings.HasPrefix(descriptions[i].Name, namespace) {
|
|
continue
|
|
}
|
|
|
|
require.False(t, seen[descriptions[i].Name], "metric %s was seen twice", descriptions[i].Name)
|
|
seen[descriptions[i].Name] = true
|
|
|
|
switch descriptions[i].Name {
|
|
case prometheus.BuildFQName(namespace, subsystem, "my_counter"):
|
|
require.True(t, len(descriptions[i].VariableLabels) == 0)
|
|
case prometheus.BuildFQName(namespace, subsystem, "my_gauge"):
|
|
require.Equal(t, labels, descriptions[i].VariableLabels)
|
|
case prometheus.BuildFQName(namespace, subsystem, "with_const_labels"):
|
|
require.Equal(t, len(constLabels), len(descriptions[i].ConstantLabels))
|
|
require.Equal(t, constLabels, descriptions[i].ConstantLabels)
|
|
default:
|
|
require.FailNow(t, "unexpected metric name: %s", descriptions[i].Name)
|
|
}
|
|
}
|
|
require.Equal(t, 3, len(seen), "not all registered metrics were iterated over")
|
|
}
|