Skip to content

Commit

Permalink
try to match against metric received by the sink (#5850)
Browse files Browse the repository at this point in the history
* try to match against metric received by the sink

* flexible match on postgres test as well

* retry only new batches

* fix and remove errors.Join
  • Loading branch information
atoulme authored Jan 31, 2025
1 parent 736a293 commit 5268846
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 59 deletions.
62 changes: 34 additions & 28 deletions tests/receivers/envoy/bundled_k8s_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,39 +124,45 @@ func TestEnvoyK8sObserver(t *testing.T) {
expected, err := golden.ReadMetrics(filepath.Join("testdata", "expected_k8s.yaml"))
require.NoError(t, err)

i := 0
index := 0
require.EventuallyWithT(t, func(tt *assert.CollectT) {
if len(sink.AllMetrics()) == 0 {
assert.Fail(tt, "No metrics collected")
return
}

i++
err := pmetrictest.CompareMetrics(expected, sink.AllMetrics()[len(sink.AllMetrics())-1],
pmetrictest.IgnoreResourceAttributeValue("service.instance.id"),
pmetrictest.IgnoreResourceAttributeValue("net.host.port"),
pmetrictest.IgnoreResourceAttributeValue("net.host.name"),
pmetrictest.IgnoreResourceAttributeValue("server.address"),
pmetrictest.IgnoreResourceAttributeValue("container.name"),
pmetrictest.IgnoreResourceAttributeValue("server.port"),
pmetrictest.IgnoreResourceAttributeValue("service.name"),
pmetrictest.IgnoreResourceAttributeValue("service_instance_id"),
pmetrictest.IgnoreResourceAttributeValue("service_version"),
pmetrictest.IgnoreResourceAttributeValue("discovery.endpoint.id"),
pmetrictest.IgnoreMetricAttributeValue("service_version"),
pmetrictest.IgnoreMetricAttributeValue("service_instance_id"),
pmetrictest.IgnoreResourceAttributeValue("server.address"),
pmetrictest.IgnoreResourceAttributeValue("k8s.pod.name"),
pmetrictest.IgnoreResourceAttributeValue("k8s.pod.uid"),
pmetrictest.IgnoreTimestamp(),
pmetrictest.IgnoreStartTimestamp(),
pmetrictest.IgnoreMetricDataPointsOrder(),
pmetrictest.IgnoreScopeMetricsOrder(),
pmetrictest.IgnoreScopeVersion(),
pmetrictest.IgnoreResourceMetricsOrder(),
pmetrictest.IgnoreMetricsOrder(),
pmetrictest.IgnoreMetricValues(),
)
var err error
newIndex := len(sink.AllMetrics())
for i := index; i < newIndex; i++ {
err = pmetrictest.CompareMetrics(expected, sink.AllMetrics()[i],
pmetrictest.IgnoreResourceAttributeValue("service.instance.id"),
pmetrictest.IgnoreResourceAttributeValue("net.host.port"),
pmetrictest.IgnoreResourceAttributeValue("net.host.name"),
pmetrictest.IgnoreResourceAttributeValue("server.address"),
pmetrictest.IgnoreResourceAttributeValue("container.name"),
pmetrictest.IgnoreResourceAttributeValue("server.port"),
pmetrictest.IgnoreResourceAttributeValue("service.name"),
pmetrictest.IgnoreResourceAttributeValue("service_instance_id"),
pmetrictest.IgnoreResourceAttributeValue("service_version"),
pmetrictest.IgnoreResourceAttributeValue("discovery.endpoint.id"),
pmetrictest.IgnoreMetricAttributeValue("service_version"),
pmetrictest.IgnoreMetricAttributeValue("service_instance_id"),
pmetrictest.IgnoreResourceAttributeValue("server.address"),
pmetrictest.IgnoreResourceAttributeValue("k8s.pod.name"),
pmetrictest.IgnoreResourceAttributeValue("k8s.pod.uid"),
pmetrictest.IgnoreTimestamp(),
pmetrictest.IgnoreStartTimestamp(),
pmetrictest.IgnoreMetricDataPointsOrder(),
pmetrictest.IgnoreScopeMetricsOrder(),
pmetrictest.IgnoreScopeVersion(),
pmetrictest.IgnoreResourceMetricsOrder(),
pmetrictest.IgnoreMetricsOrder(),
pmetrictest.IgnoreMetricValues(),
)
if err == nil {
return
}
}
index = newIndex
assert.NoError(tt, err)
}, 120*time.Second, 1*time.Second)
}
58 changes: 29 additions & 29 deletions tests/receivers/smartagent/postgresql/postgresql_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import (
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest/pmetrictest"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/pdata/pmetric"

"github.com/signalfx/splunk-otel-collector/tests/testutils"
)
Expand Down Expand Up @@ -55,43 +54,44 @@ func TestPostgresReceiverProvidesAllMetrics(t *testing.T) {

expected, err := golden.ReadMetrics(filepath.Join("testdata", "expected", "all.yaml"))
require.NoError(t, err)
lastIndex := 0
assert.EventuallyWithT(t, func(tt *assert.CollectT) {
if len(tc.OTLPReceiverSink.AllMetrics()) == 0 {
assert.Fail(tt, "No metrics collected")
return
}
var selected *pmetric.Metrics
for i := len(tc.OTLPReceiverSink.AllMetrics()) - 1; i >= 0; i-- {
var err error
newIndex := len(tc.OTLPReceiverSink.AllMetrics()) - 1
for i := newIndex; i >= lastIndex; i-- {
m := tc.OTLPReceiverSink.AllMetrics()[i]
if m.MetricCount() == expected.MetricCount() {
selected = &m
break
err = pmetrictest.CompareMetrics(expected, m,
pmetrictest.IgnoreResourceAttributeValue("service.instance.id"),
pmetrictest.IgnoreResourceAttributeValue("net.host.port"),
pmetrictest.IgnoreResourceAttributeValue("server.port"),
pmetrictest.IgnoreResourceAttributeValue("service.name"),
pmetrictest.IgnoreResourceAttributeValue("service_instance_id"),
pmetrictest.IgnoreResourceAttributeValue("service_version"),
pmetrictest.IgnoreMetricAttributeValue("service_version"),
pmetrictest.IgnoreMetricAttributeValue("service_instance_id"),
pmetrictest.IgnoreMetricAttributeValue("queryid"),
pmetrictest.IgnoreMetricAttributeValue("table"),
pmetrictest.IgnoreSubsequentDataPoints(),
pmetrictest.IgnoreTimestamp(),
pmetrictest.IgnoreStartTimestamp(),
pmetrictest.IgnoreMetricDataPointsOrder(),
pmetrictest.IgnoreScopeMetricsOrder(),
pmetrictest.IgnoreMetricsOrder(),
pmetrictest.IgnoreScopeVersion(),
pmetrictest.IgnoreResourceMetricsOrder(),
pmetrictest.IgnoreMetricValues(),
)
if err == nil {
return
}
}
}

require.NotNil(tt, selected)

err := pmetrictest.CompareMetrics(expected, *selected,
pmetrictest.IgnoreResourceAttributeValue("service.instance.id"),
pmetrictest.IgnoreResourceAttributeValue("net.host.port"),
pmetrictest.IgnoreResourceAttributeValue("server.port"),
pmetrictest.IgnoreResourceAttributeValue("service.name"),
pmetrictest.IgnoreResourceAttributeValue("service_instance_id"),
pmetrictest.IgnoreResourceAttributeValue("service_version"),
pmetrictest.IgnoreMetricAttributeValue("service_version"),
pmetrictest.IgnoreMetricAttributeValue("service_instance_id"),
pmetrictest.IgnoreMetricAttributeValue("queryid"),
pmetrictest.IgnoreMetricAttributeValue("table"),
pmetrictest.IgnoreSubsequentDataPoints(),
pmetrictest.IgnoreTimestamp(),
pmetrictest.IgnoreStartTimestamp(),
pmetrictest.IgnoreMetricDataPointsOrder(),
pmetrictest.IgnoreScopeMetricsOrder(),
pmetrictest.IgnoreMetricsOrder(),
pmetrictest.IgnoreScopeVersion(),
pmetrictest.IgnoreResourceMetricsOrder(),
pmetrictest.IgnoreMetricValues(),
)
lastIndex = newIndex
assert.NoError(tt, err)
}, 30*time.Second, 1*time.Second)
}
14 changes: 12 additions & 2 deletions tests/testutils/golden.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,13 +123,23 @@ func RunMetricsCollectionTest(t *testing.T, configFile string, expectedFilePath
expected, err := golden.ReadMetrics(filepath.Join("testdata", expectedFilePath))
require.NoError(t, err)

index := 0
assert.EventuallyWithT(t, func(tt *assert.CollectT) {
if len(sink.AllMetrics()) == 0 {
assert.Fail(tt, "No metrics collected")
return
}
err := pmetrictest.CompareMetrics(expected, sink.AllMetrics()[len(sink.AllMetrics())-1],
opts.compareMetricsOptions...)
var err error
newIndex := len(sink.AllMetrics())
for i := index; i < newIndex; i++ {
m := sink.AllMetrics()[i]
err = pmetrictest.CompareMetrics(expected, m,
opts.compareMetricsOptions...)
if err == nil {
return
}
}
index = newIndex
assert.NoError(tt, err)
}, 30*time.Second, 1*time.Second)
}

0 comments on commit 5268846

Please sign in to comment.