in internal/beater/monitoringtest/opentelemetry.go [60:127]
func assertOtelMetrics(
t *testing.T,
reader sdkmetric.Reader,
expectedMetrics map[string]any,
fullMatch, skipValAssert bool,
) {
t.Helper()
var rm metricdata.ResourceMetrics
assert.NoError(t, reader.Collect(context.Background(), &rm))
assert.NotEqual(t, 0, len(rm.ScopeMetrics))
var foundMetrics []string
for _, sm := range rm.ScopeMetrics {
for _, m := range sm.Metrics {
switch d := m.Data.(type) {
case metricdata.Gauge[int64]:
assert.Equal(t, 1, len(d.DataPoints))
foundMetrics = append(foundMetrics, m.Name)
if skipValAssert {
continue
}
if v, ok := expectedMetrics[m.Name]; ok {
assert.EqualValues(t, v, d.DataPoints[0].Value, m.Name)
} else if fullMatch {
assert.Fail(t, "unexpected metric", m.Name)
}
case metricdata.Sum[int64]:
assert.Equal(t, 1, len(d.DataPoints))
foundMetrics = append(foundMetrics, m.Name)
if skipValAssert {
continue
}
if v, ok := expectedMetrics[m.Name]; ok {
assert.EqualValues(t, v, d.DataPoints[0].Value, m.Name)
} else if fullMatch {
assert.Fail(t, "unexpected metric", m.Name)
}
case metricdata.Histogram[int64]:
assert.Equal(t, 1, len(d.DataPoints))
foundMetrics = append(foundMetrics, m.Name)
if skipValAssert {
continue
}
if v, ok := expectedMetrics[m.Name]; ok {
assert.EqualValues(t, v, d.DataPoints[0].Count, m.Name)
} else if fullMatch {
assert.Fail(t, "unexpected metric", m.Name)
}
}
}
}
var expectedMetricsKeys []string
for k := range expectedMetrics {
expectedMetricsKeys = append(expectedMetricsKeys, k)
}
if fullMatch {
assert.ElementsMatch(t, expectedMetricsKeys, foundMetrics)
} else {
assert.Subset(t, foundMetrics, expectedMetricsKeys)
}
}