Migrate "runtime-metrics" test from groovy to java (#8928)
Co-authored-by: Jean Bisutti <jean.bisutti@gmail.com>
This commit is contained in:
parent
002588b10c
commit
23acd5b4fd
|
@ -1,37 +0,0 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification
|
||||
import spock.util.concurrent.PollingConditions
|
||||
|
||||
class JmxRuntimeMetricsTest extends AgentInstrumentationSpecification {
|
||||
|
||||
def "test runtime metrics is enabled"() {
|
||||
when:
|
||||
def conditions = new PollingConditions(timeout: 10, initialDelay: 1.5, factor: 1.25)
|
||||
// Force a gc to ensure gc metrics
|
||||
System.gc()
|
||||
|
||||
then:
|
||||
conditions.eventually {
|
||||
assert getMetrics().any { it.name == "process.runtime.jvm.classes.loaded" }
|
||||
assert getMetrics().any { it.name == "process.runtime.jvm.classes.unloaded" }
|
||||
assert getMetrics().any { it.name == "process.runtime.jvm.classes.current_loaded" }
|
||||
assert getMetrics().any { it.name == "process.runtime.jvm.system.cpu.load_1m" }
|
||||
assert getMetrics().any { it.name == "process.runtime.jvm.system.cpu.utilization" }
|
||||
assert getMetrics().any { it.name == "process.runtime.jvm.cpu.utilization" }
|
||||
assert getMetrics().any { it.name == "process.runtime.jvm.gc.duration" }
|
||||
assert getMetrics().any { it.name == "process.runtime.jvm.memory.init" }
|
||||
assert getMetrics().any { it.name == "process.runtime.jvm.memory.usage" }
|
||||
assert getMetrics().any { it.name == "process.runtime.jvm.memory.committed" }
|
||||
assert getMetrics().any { it.name == "process.runtime.jvm.memory.limit" }
|
||||
assert getMetrics().any { it.name == "process.runtime.jvm.memory.usage_after_last_gc" }
|
||||
assert getMetrics().any { it.name == "process.runtime.jvm.threads.count" }
|
||||
assert getMetrics().any { it.name == "process.runtime.jvm.buffer.limit" }
|
||||
assert getMetrics().any { it.name == "process.runtime.jvm.buffer.count" }
|
||||
assert getMetrics().any { it.name == "process.runtime.jvm.buffer.usage" }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -5,31 +5,17 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.javaagent.runtimemetrics.java17;
|
||||
|
||||
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
|
||||
import static org.awaitility.Awaitility.await;
|
||||
|
||||
import io.opentelemetry.instrumentation.testing.AgentTestRunner;
|
||||
import io.opentelemetry.sdk.metrics.data.MetricData;
|
||||
import io.opentelemetry.sdk.testing.assertj.MetricAssert;
|
||||
import java.util.Collection;
|
||||
import java.util.function.Consumer;
|
||||
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
|
||||
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
|
||||
import org.junit.jupiter.api.Assumptions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||
|
||||
class JfrRuntimeMetricsTest {
|
||||
@SafeVarargs
|
||||
private static void waitAndAssertMetrics(Consumer<MetricAssert>... assertions) {
|
||||
await()
|
||||
.untilAsserted(
|
||||
() -> {
|
||||
Collection<MetricData> metrics = AgentTestRunner.instance().getExportedMetrics();
|
||||
assertThat(metrics).isNotEmpty();
|
||||
for (Consumer<MetricAssert> assertion : assertions) {
|
||||
assertThat(metrics).anySatisfy(metric -> assertion.accept(assertThat(metric)));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@RegisterExtension
|
||||
static final InstrumentationExtension testing = AgentInstrumentationExtension.create();
|
||||
|
||||
@BeforeAll
|
||||
static void setUp() {
|
||||
|
@ -45,7 +31,8 @@ class JfrRuntimeMetricsTest {
|
|||
// This should generate some events
|
||||
System.gc();
|
||||
|
||||
waitAndAssertMetrics(
|
||||
testing.waitAndAssertMetrics(
|
||||
"io.opentelemetry.runtime-telemetry-java17",
|
||||
metric -> metric.hasName("process.runtime.jvm.cpu.longlock"),
|
||||
metric -> metric.hasName("process.runtime.jvm.cpu.limit"),
|
||||
metric -> metric.hasName("process.runtime.jvm.cpu.context_switch"));
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.instrumentation.javaagent.runtimemetrics.java17;
|
||||
|
||||
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
|
||||
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||
|
||||
class JmxRuntimeMetricsTest {
|
||||
|
||||
@RegisterExtension
|
||||
static final InstrumentationExtension testing = AgentInstrumentationExtension.create();
|
||||
|
||||
@Test
|
||||
void runtimeMetricsAreEnabled() {
|
||||
// Force a gc to "ensure" gc metrics
|
||||
System.gc();
|
||||
|
||||
testing.waitAndAssertMetrics(
|
||||
"io.opentelemetry.runtime-telemetry-java8",
|
||||
metric -> metric.hasName("process.runtime.jvm.classes.loaded"),
|
||||
metric -> metric.hasName("process.runtime.jvm.classes.unloaded"),
|
||||
metric -> metric.hasName("process.runtime.jvm.classes.current_loaded"),
|
||||
metric -> metric.hasName("process.runtime.jvm.system.cpu.load_1m"),
|
||||
metric -> metric.hasName("process.runtime.jvm.system.cpu.utilization"),
|
||||
metric -> metric.hasName("process.runtime.jvm.cpu.utilization"),
|
||||
metric -> metric.hasName("process.runtime.jvm.gc.duration"),
|
||||
metric -> metric.hasName("process.runtime.jvm.memory.init"),
|
||||
metric -> metric.hasName("process.runtime.jvm.memory.usage"),
|
||||
metric -> metric.hasName("process.runtime.jvm.memory.committed"),
|
||||
metric -> metric.hasName("process.runtime.jvm.memory.limit"),
|
||||
metric -> metric.hasName("process.runtime.jvm.memory.usage_after_last_gc"),
|
||||
metric -> metric.hasName("process.runtime.jvm.threads.count"),
|
||||
metric -> metric.hasName("process.runtime.jvm.buffer.limit"),
|
||||
metric -> metric.hasName("process.runtime.jvm.buffer.count"),
|
||||
metric -> metric.hasName("process.runtime.jvm.buffer.usage"));
|
||||
}
|
||||
}
|
|
@ -18,12 +18,16 @@ import io.opentelemetry.instrumentation.testing.util.ThrowingSupplier;
|
|||
import io.opentelemetry.sdk.OpenTelemetrySdk;
|
||||
import io.opentelemetry.sdk.logs.data.LogRecordData;
|
||||
import io.opentelemetry.sdk.metrics.data.MetricData;
|
||||
import io.opentelemetry.sdk.testing.assertj.MetricAssert;
|
||||
import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions;
|
||||
import io.opentelemetry.sdk.testing.assertj.TraceAssert;
|
||||
import io.opentelemetry.sdk.trace.data.SpanData;
|
||||
import java.time.Duration;
|
||||
import java.util.Collection;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
import org.assertj.core.api.ListAssert;
|
||||
import org.junit.jupiter.api.extension.AfterAllCallback;
|
||||
import org.junit.jupiter.api.extension.AfterEachCallback;
|
||||
|
@ -76,6 +80,12 @@ public abstract class InstrumentationExtension
|
|||
return testRunner.getExportedMetrics();
|
||||
}
|
||||
|
||||
private List<MetricData> instrumentationMetrics(String instrumentationName) {
|
||||
return metrics().stream()
|
||||
.filter(m -> m.getInstrumentationScopeInfo().getName().equals(instrumentationName))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/** Return a list of all captured logs. */
|
||||
public List<LogRecordData> logRecords() {
|
||||
return testRunner.getExportedLogRecords();
|
||||
|
@ -100,6 +110,22 @@ public abstract class InstrumentationExtension
|
|||
&& data.getName().equals(metricName))));
|
||||
}
|
||||
|
||||
@SafeVarargs
|
||||
public final void waitAndAssertMetrics(
|
||||
String instrumentationName, Consumer<MetricAssert>... assertions) {
|
||||
await()
|
||||
.untilAsserted(
|
||||
() -> {
|
||||
Collection<MetricData> metrics = instrumentationMetrics(instrumentationName);
|
||||
assertThat(metrics).isNotEmpty();
|
||||
for (Consumer<MetricAssert> assertion : assertions) {
|
||||
assertThat(metrics)
|
||||
.anySatisfy(
|
||||
metric -> assertion.accept(OpenTelemetryAssertions.assertThat(metric)));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all captured telemetry data. After calling this method {@link #spans()} and {@link
|
||||
* #metrics()} will return empty lists until more telemetry data is captured.
|
||||
|
|
Loading…
Reference in New Issue