Skip to content

Commit e044aa1

Browse files
committed
Add JMX and JFR test coverage to unified runtime-telemetry javaagent module
1 parent bfde945 commit e044aa1

3 files changed

Lines changed: 103 additions & 0 deletions

File tree

instrumentation/runtime-telemetry/javaagent/build.gradle.kts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,22 @@ dependencies {
1515
tasks {
1616
test {
1717
jvmArgs("-Dotel.instrumentation.runtime-telemetry.experimental.package-emitter.enabled=true")
18+
filter {
19+
excludeTestsMatching("*.JfrRuntimeMetricsTest")
20+
isFailOnNoMatchingTests = false
21+
}
22+
}
23+
24+
val testJfr by registering(Test::class) {
25+
testClassesDirs = sourceSets.test.get().output.classesDirs
26+
classpath = sourceSets.test.get().runtimeClasspath
27+
jvmArgs("-Dotel.instrumentation.runtime-telemetry.emit-experimental-jfr-metrics=true")
28+
filter {
29+
includeTestsMatching("*.JfrRuntimeMetricsTest")
30+
}
31+
}
32+
33+
check {
34+
dependsOn(testJfr)
1835
}
1936
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.runtimetelemetry;
7+
8+
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
9+
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
10+
import org.junit.jupiter.api.Assumptions;
11+
import org.junit.jupiter.api.BeforeAll;
12+
import org.junit.jupiter.api.Test;
13+
import org.junit.jupiter.api.extension.RegisterExtension;
14+
15+
class JfrRuntimeMetricsTest {
16+
17+
@RegisterExtension
18+
static final InstrumentationExtension testing = AgentInstrumentationExtension.create();
19+
20+
@BeforeAll
21+
static void setUp() {
22+
// Use reflection to avoid a compile-time dependency on jdk.jfr (Java 11+), since this test
23+
// module targets the agent's minimum supported Java version.
24+
Class<?> flightRecorderClass;
25+
try {
26+
flightRecorderClass = Class.forName("jdk.jfr.FlightRecorder");
27+
} catch (ClassNotFoundException e) {
28+
Assumptions.abort("JFR not present");
29+
return;
30+
}
31+
boolean available;
32+
try {
33+
available = (boolean) flightRecorderClass.getMethod("isAvailable").invoke(null);
34+
} catch (ReflectiveOperationException e) {
35+
throw new IllegalStateException(e);
36+
}
37+
Assumptions.assumeTrue(available, "JFR not available");
38+
}
39+
40+
@Test
41+
void shouldHaveJfrMetrics() {
42+
// This should generate some events
43+
System.gc();
44+
45+
testing.waitAndAssertMetrics(
46+
"io.opentelemetry.runtime-telemetry", metric -> metric.hasName("jvm.cpu.context_switch"));
47+
}
48+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.runtimetelemetry;
7+
8+
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
9+
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
10+
import org.junit.jupiter.api.Test;
11+
import org.junit.jupiter.api.extension.RegisterExtension;
12+
13+
class JmxRuntimeMetricsTest {
14+
15+
@RegisterExtension
16+
static final InstrumentationExtension testing = AgentInstrumentationExtension.create();
17+
18+
@Test
19+
void runtimeMetricsAreEnabled() {
20+
// Force a gc to "ensure" gc metrics
21+
System.gc();
22+
23+
testing.waitAndAssertMetrics(
24+
"io.opentelemetry.runtime-telemetry-java8",
25+
metric -> metric.hasName("jvm.class.loaded"),
26+
metric -> metric.hasName("jvm.class.unloaded"),
27+
metric -> metric.hasName("jvm.class.count"),
28+
metric -> metric.hasName("jvm.cpu.time"),
29+
metric -> metric.hasName("jvm.cpu.count"),
30+
metric -> metric.hasName("jvm.cpu.recent_utilization"),
31+
metric -> metric.hasName("jvm.gc.duration"),
32+
metric -> metric.hasName("jvm.memory.used"),
33+
metric -> metric.hasName("jvm.memory.committed"),
34+
metric -> metric.hasName("jvm.memory.limit"),
35+
metric -> metric.hasName("jvm.memory.used_after_last_gc"),
36+
metric -> metric.hasName("jvm.thread.count"));
37+
}
38+
}

0 commit comments

Comments
 (0)