Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[chore][jmxreceiver] Update flaky JMX receiver integration test #22751

Merged
merged 9 commits into from
Jun 5, 2023
14 changes: 12 additions & 2 deletions receiver/jmxreceiver/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,16 @@ go 1.19

require (
github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.78.0
github.com/shirou/gopsutil/v3 v3.23.5
github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.78.0
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.78.0
github.com/shirou/gopsutil/v3 v3.23.4
github.com/stretchr/testify v1.8.4
github.com/testcontainers/testcontainers-go v0.20.1
go.opentelemetry.io/collector v0.78.3-0.20230601234953-deffd4892002
go.opentelemetry.io/collector/component v0.78.3-0.20230601234953-deffd4892002
go.opentelemetry.io/collector/confmap v0.78.3-0.20230601234953-deffd4892002
go.opentelemetry.io/collector/consumer v0.78.3-0.20230601234953-deffd4892002
go.opentelemetry.io/collector/exporter v0.78.3-0.20230601234953-deffd4892002
go.opentelemetry.io/collector/pdata v1.0.0-rcv0012.0.20230601234953-deffd4892002
go.opentelemetry.io/collector/receiver v0.78.3-0.20230601234953-deffd4892002
go.opentelemetry.io/collector/receiver/otlpreceiver v0.78.3-0.20230601234953-deffd4892002
go.uber.org/zap v1.24.0
Expand All @@ -22,6 +23,7 @@ require (
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
github.com/Microsoft/go-winio v0.5.2 // indirect
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/containerd/containerd v1.6.19 // indirect
github.com/cpuguy83/dockercfg v0.3.1 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
Expand Down Expand Up @@ -54,6 +56,7 @@ require (
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/morikuni/aec v1.0.0 // indirect
github.com/mostynb/go-grpc-compression v1.1.18 // indirect
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.78.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.0-rc2 // indirect
github.com/opencontainers/runc v1.1.5 // indirect
Expand All @@ -68,6 +71,7 @@ require (
github.com/yusufpapurcu/wmi v1.2.3 // indirect
go.opencensus.io v0.24.0 // indirect
go.opentelemetry.io/collector/featuregate v1.0.0-rcv0012.0.20230601234953-deffd4892002 // indirect
go.opentelemetry.io/collector/pdata v1.0.0-rcv0012.0.20230601234953-deffd4892002 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.42.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0 // indirect
go.opentelemetry.io/otel v1.16.0 // indirect
Expand All @@ -92,3 +96,9 @@ retract (
v0.76.1
v0.65.0
)

replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil => ../../pkg/pdatautil

replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest => ../../pkg/pdatatest

replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal => ../../internal/coreinternal
14 changes: 9 additions & 5 deletions receiver/jmxreceiver/go.sum

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

83 changes: 25 additions & 58 deletions receiver/jmxreceiver/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,32 +12,38 @@ import (
"io"
"net/http"
"os"
"path/filepath"
"testing"
"time"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
"github.com/testcontainers/testcontainers-go"
"github.com/testcontainers/testcontainers-go/wait"
"go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/consumer/consumertest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/pdata/pmetric"
"go.opentelemetry.io/collector/receiver/receivertest"
"go.uber.org/zap"
"go.uber.org/zap/zaptest/observer"

"github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal/golden"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest/pmetrictest"
)

var jmxJarReleases = map[string]string{
"1.0.0-alpha": "https://repo1.maven.org/maven2/io/opentelemetry/contrib/opentelemetry-java-contrib-jmx-metrics/1.0.0-alpha/opentelemetry-java-contrib-jmx-metrics-1.0.0-alpha.jar",
"1.4.0-alpha": "https://repo1.maven.org/maven2/io/opentelemetry/contrib/opentelemetry-jmx-metrics/1.4.0-alpha/opentelemetry-jmx-metrics-1.4.0-alpha.jar",
"1.26.0-alpha": "https://repo1.maven.org/maven2/io/opentelemetry/contrib/opentelemetry-jmx-metrics/1.26.0-alpha/opentelemetry-jmx-metrics-1.26.0-alpha.jar",
"1.10.0-alpha": "https://repo1.maven.org/maven2/io/opentelemetry/contrib/opentelemetry-jmx-metrics/1.10.0-alpha/opentelemetry-jmx-metrics-1.10.0-alpha.jar",
}

type JMXIntegrationSuite struct {
suite.Suite
VersionToJar map[string]string
}

// It is recommended that this test be run locally with a longer timeout than the default 30s
// go test -timeout 60s -run ^TestJMXIntegration$ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jmxreceiver
func TestJMXIntegration(t *testing.T) {
suite.Run(t, new(JMXIntegrationSuite))
}
Expand Down Expand Up @@ -121,19 +127,12 @@ func getLogsOnFailure(t *testing.T, logObserver *observer.ObservedLogs) {
}
}

// Workaround to avoid unused errors
var skip = func(t *testing.T, why string) {
t.Skip(why)
}

func (suite *JMXIntegrationSuite) TestJMXReceiverHappyPath() {

for version, jar := range suite.VersionToJar {
t := suite.T()
// Run one test per JMX receiver version we're integrating with.
t.Run(version, func(t *testing.T) {
skip(t, "https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/5874")

cassandra := cassandraContainer(t)
defer func() {
require.NoError(t, cassandra.Terminate(context.Background()))
Expand All @@ -149,7 +148,7 @@ func (suite *JMXIntegrationSuite) TestJMXReceiverHappyPath() {
params.Logger = logger

cfg := &Config{
CollectionInterval: 100 * time.Millisecond,
CollectionInterval: 3 * time.Second,
Endpoint: fmt.Sprintf("%v:7199", hostname),
JARPath: jar,
TargetSystem: "cassandra",
Expand Down Expand Up @@ -180,55 +179,23 @@ func (suite *JMXIntegrationSuite) TestJMXReceiverHappyPath() {

require.NoError(t, receiver.Start(context.Background(), componenttest.NewNopHost()))

// Wait for multiple collections, in case the first represents partially started system
require.Eventually(t, func() bool {
found := consumer.DataPointCount() > 0
if !found {
return false
}

metric := consumer.AllMetrics()[0]
require.Equal(t, 1, metric.DataPointCount())

rm := metric.ResourceMetrics().At(0)
resource := rm.Resource()
attributes := resource.Attributes()
lang, ok := attributes.Get("telemetry.sdk.language")
require.True(t, ok)
require.Equal(t, "java", lang.Str())

sdkName, ok := attributes.Get("telemetry.sdk.name")
require.True(t, ok)
require.Equal(t, "opentelemetry", sdkName.Str())

version, ok := attributes.Get("telemetry.sdk.version")
require.True(t, ok)
require.NotEmpty(t, version.Str())

customAttr, ok := attributes.Get("myattr")
require.True(t, ok)
require.Equal(t, "myvalue", customAttr.Str())

anotherCustomAttr, ok := attributes.Get("myotherattr")
require.True(t, ok)
require.Equal(t, "myothervalue", anotherCustomAttr.Str())

ilm := rm.ScopeMetrics().At(0)
require.Equal(t, "io.opentelemetry.contrib.jmxmetrics", ilm.Scope().Name())
require.Equal(t, "1.0.0-alpha", ilm.Scope().Version())

met := ilm.Metrics().At(0)

require.Equal(t, "cassandra.storage.load", met.Name())
require.Equal(t, "Size, in bytes, of the on disk data size this node manages", met.Description())
require.Equal(t, "By", met.Unit())

// otel-java only uses int sum w/ non-monotonic for up down counters instead of gauge
require.Equal(t, pmetric.MetricTypeSum, met.Type())
sum := met.Sum()
require.False(t, sum.IsMonotonic())

return true
return len(consumer.AllMetrics()) > 1
}, 30*time.Second, 100*time.Millisecond, getJavaStdout(receiver))

metric := consumer.AllMetrics()[1]

// golden.WriteMetrics(t, filepath.Join("testdata", "integration", fmt.Sprintf("expected.%s.yaml", version)), metric)
expected, err := golden.ReadMetrics(filepath.Join("testdata", "integration", fmt.Sprintf("expected.%s.yaml", version)))
assert.NoError(t, err)
assert.NoError(t, pmetrictest.CompareMetrics(expected, metric,
pmetrictest.IgnoreStartTimestamp(),
pmetrictest.IgnoreTimestamp(),
pmetrictest.IgnoreResourceMetricsOrder(),
pmetrictest.IgnoreMetricValues(),
pmetrictest.IgnoreMetricsOrder(),
pmetrictest.IgnoreMetricDataPointsOrder()))
})
}
}
Expand Down
12 changes: 6 additions & 6 deletions receiver/jmxreceiver/supported_jars.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,30 +68,30 @@ var jmxMetricsGathererVersions = map[string]supportedJar{
jar: "JMX metrics gatherer",
},
"3c46cff8521cdb0d36bb2891b15cbc1bb2fcbca7c5344253403ab30fe9f693a6": {
version: "1.15.0",
version: "1.15.0-alpha",
jar: "JMX metrics gatherer",
},
"0646639df98404bd9b1263b46e2fd4612bc378f9951a561f0a0be9725718db36": {
version: "1.14.0",
version: "1.14.0-alpha",
jar: "JMX metrics gatherer",
},
"623572be30e3c546d60b0ac890935790bc3cb8d0b4ff5150a58b43a99f68ed05": {
version: "1.13.0",
version: "1.13.0-alpha",
jar: "JMX metrics gatherer",
addedValidation: oldFormatProperties,
},
"c0b1a19c4965c7961abaaccfbb4d358e5f3b0b5b105578a4782702f126bfa8b7": {
version: "1.12.0",
version: "1.12.0-alpha",
jar: "JMX metrics gatherer",
addedValidation: oldFormatProperties,
},
"ca689ca2da8a412c7f4ea0e816f47e8639b4270a48fb877c9a910b44757bc0a4": {
version: "1.11.0",
version: "1.11.0-alpha",
jar: "JMX metrics gatherer",
addedValidation: oldFormatProperties,
},
"4b14d26fb383ed925fe1faf1b7fe2103559ed98ce6cf761ac9afc0158d2a218c": {
version: "1.10.0",
version: "1.10.0-alpha",
jar: "JMX metrics gatherer",
addedValidation: oldFormatProperties,
},
Expand Down
Loading