mirror of
https://github.com/pomerium/pomerium.git
synced 2025-04-30 19:06:33 +02:00
137 lines
3.2 KiB
Go
137 lines
3.2 KiB
Go
package prometheus_test
|
|
|
|
import (
|
|
"embed"
|
|
"path"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
"github.com/google/go-cmp/cmp/cmpopts"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"go.opentelemetry.io/otel/attribute"
|
|
"go.opentelemetry.io/otel/sdk/metric/metricdata"
|
|
|
|
"github.com/pomerium/pomerium/internal/telemetry/prometheus"
|
|
)
|
|
|
|
//go:embed testdata
|
|
var testdata embed.FS
|
|
|
|
func TestConvert(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
start, err := time.Parse(time.RFC3339, "2024-05-29T00:00:01Z")
|
|
require.NoError(t, err)
|
|
end, err := time.Parse(time.RFC3339, "2021-05-29T01:00:00Z")
|
|
require.NoError(t, err)
|
|
|
|
cases := []struct {
|
|
name string
|
|
want []metricdata.Metrics
|
|
}{
|
|
{
|
|
"histogram",
|
|
[]metricdata.Metrics{
|
|
{
|
|
Name: "envoy_cluster_upstream_rq_time",
|
|
Data: metricdata.Histogram[float64]{
|
|
Temporality: metricdata.CumulativeTemporality,
|
|
DataPoints: []metricdata.HistogramDataPoint[float64]{
|
|
{
|
|
Attributes: attribute.NewSet(
|
|
attribute.String("pomerium_route_id", "metrics-00083"),
|
|
),
|
|
StartTime: start,
|
|
Time: end,
|
|
Count: 2,
|
|
Sum: 4.1,
|
|
Bounds: []float64{0.5, 1, 5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000, 30000, 60000, 300000, 600000, 1800000, 3600000},
|
|
BucketCounts: []uint64{0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"counter",
|
|
[]metricdata.Metrics{
|
|
{
|
|
Name: "envoy_cluster_upstream_cx_total",
|
|
Data: metricdata.Sum[float64]{
|
|
IsMonotonic: true,
|
|
Temporality: metricdata.CumulativeTemporality,
|
|
DataPoints: []metricdata.DataPoint[float64]{
|
|
{
|
|
Attributes: attribute.NewSet(
|
|
attribute.String("pomerium_route_id", "route-1"),
|
|
),
|
|
Value: 2,
|
|
StartTime: start,
|
|
Time: end,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Name: "envoy_cluster_upstream_cx_total",
|
|
Data: metricdata.Sum[float64]{
|
|
IsMonotonic: true,
|
|
Temporality: metricdata.CumulativeTemporality,
|
|
DataPoints: []metricdata.DataPoint[float64]{
|
|
{
|
|
Attributes: attribute.NewSet(
|
|
attribute.String("pomerium_route_id", "route-2"),
|
|
),
|
|
Value: 3,
|
|
StartTime: start,
|
|
Time: end,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
fd, err := testdata.Open(path.Join("testdata", tc.name+".txt"))
|
|
require.NoError(t, err)
|
|
defer fd.Close()
|
|
|
|
got, err := prometheus.ToOTLP(fd,
|
|
func(name string) (string, bool) {
|
|
return name, true
|
|
}, func(label string) (string, bool) {
|
|
if label == "envoy_cluster_name" {
|
|
return "pomerium_route_id", true
|
|
}
|
|
return "", false
|
|
}, start, end)
|
|
require.NoError(t, err)
|
|
assert.Empty(t, cmp.Diff(tc.want, got, cmpopts.IgnoreUnexported(
|
|
attribute.Set{},
|
|
metricdata.Extrema[float64]{},
|
|
),
|
|
cmp.Comparer(compareAttributeSets),
|
|
))
|
|
})
|
|
}
|
|
}
|
|
|
|
func compareAttributeSets(x, y attribute.Set) bool {
|
|
if x.Len() != y.Len() {
|
|
return false
|
|
}
|
|
for _, kv := range x.ToSlice() {
|
|
if v, found := y.Value(kv.Key); !found || v != kv.Value {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|