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;
|
package io.opentelemetry.instrumentation.javaagent.runtimemetrics.java17;
|
||||||
|
|
||||||
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
|
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
|
||||||
import static org.awaitility.Awaitility.await;
|
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
|
||||||
|
|
||||||
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 org.junit.jupiter.api.Assumptions;
|
import org.junit.jupiter.api.Assumptions;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||||
|
|
||||||
class JfrRuntimeMetricsTest {
|
class JfrRuntimeMetricsTest {
|
||||||
@SafeVarargs
|
|
||||||
private static void waitAndAssertMetrics(Consumer<MetricAssert>... assertions) {
|
@RegisterExtension
|
||||||
await()
|
static final InstrumentationExtension testing = AgentInstrumentationExtension.create();
|
||||||
.untilAsserted(
|
|
||||||
() -> {
|
|
||||||
Collection<MetricData> metrics = AgentTestRunner.instance().getExportedMetrics();
|
|
||||||
assertThat(metrics).isNotEmpty();
|
|
||||||
for (Consumer<MetricAssert> assertion : assertions) {
|
|
||||||
assertThat(metrics).anySatisfy(metric -> assertion.accept(assertThat(metric)));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@BeforeAll
|
@BeforeAll
|
||||||
static void setUp() {
|
static void setUp() {
|
||||||
|
@ -45,7 +31,8 @@ class JfrRuntimeMetricsTest {
|
||||||
// This should generate some events
|
// This should generate some events
|
||||||
System.gc();
|
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.longlock"),
|
||||||
metric -> metric.hasName("process.runtime.jvm.cpu.limit"),
|
metric -> metric.hasName("process.runtime.jvm.cpu.limit"),
|
||||||
metric -> metric.hasName("process.runtime.jvm.cpu.context_switch"));
|
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.OpenTelemetrySdk;
|
||||||
import io.opentelemetry.sdk.logs.data.LogRecordData;
|
import io.opentelemetry.sdk.logs.data.LogRecordData;
|
||||||
import io.opentelemetry.sdk.metrics.data.MetricData;
|
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.testing.assertj.TraceAssert;
|
||||||
import io.opentelemetry.sdk.trace.data.SpanData;
|
import io.opentelemetry.sdk.trace.data.SpanData;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import org.assertj.core.api.ListAssert;
|
import org.assertj.core.api.ListAssert;
|
||||||
import org.junit.jupiter.api.extension.AfterAllCallback;
|
import org.junit.jupiter.api.extension.AfterAllCallback;
|
||||||
import org.junit.jupiter.api.extension.AfterEachCallback;
|
import org.junit.jupiter.api.extension.AfterEachCallback;
|
||||||
|
@ -76,6 +80,12 @@ public abstract class InstrumentationExtension
|
||||||
return testRunner.getExportedMetrics();
|
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. */
|
/** Return a list of all captured logs. */
|
||||||
public List<LogRecordData> logRecords() {
|
public List<LogRecordData> logRecords() {
|
||||||
return testRunner.getExportedLogRecords();
|
return testRunner.getExportedLogRecords();
|
||||||
|
@ -100,6 +110,22 @@ public abstract class InstrumentationExtension
|
||||||
&& data.getName().equals(metricName))));
|
&& 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
|
* Removes all captured telemetry data. After calling this method {@link #spans()} and {@link
|
||||||
* #metrics()} will return empty lists until more telemetry data is captured.
|
* #metrics()} will return empty lists until more telemetry data is captured.
|
||||||
|
|
Loading…
Reference in New Issue