修复 Native 观测性兼容并补齐分层验证流程

This commit is contained in:
2026-09-25 18:30:45 +00:00
parent 9cf2d235df
commit 4c7be4cd0d
11 changed files with 315 additions and 26 deletions
@@ -1,15 +1,51 @@
package top.ddupan.iam.login;
import io.micrometer.core.instrument.MeterRegistry;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.micrometer.metrics.test.autoconfigure.AutoConfigureMetrics;
import org.springframework.boot.micrometer.tracing.test.autoconfigure.AutoConfigureTracing;
import org.springframework.boot.opentelemetry.autoconfigure.logging.otlp.OtlpLoggingConnectionDetails;
import org.springframework.boot.opentelemetry.autoconfigure.logging.otlp.Transport;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
import org.testcontainers.grafana.LgtmStackContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import org.testcontainers.utility.DockerImageName;
import static org.assertj.core.api.Assertions.assertThat;
@Import(TestcontainersConfiguration.class)
@SpringBootTest
@AutoConfigureMetrics
@AutoConfigureTracing
@Testcontainers
class IamLoginApplicationTests {
// Field-based service connections are recreated by the test context in AOT mode.
@Container
@ServiceConnection
static final LgtmStackContainer grafanaLgtm = new LgtmStackContainer(
DockerImageName.parse(TestcontainersConfiguration.LGTM_IMAGE));
@Autowired
OtlpLoggingConnectionDetails loggingConnectionDetails;
@Autowired
@Qualifier("prometheusMeterRegistry")
MeterRegistry prometheus;
@Test
void contextLoads() {
void processCpuTimeCanBeRead() {
assertThat(prometheus.get("process.cpu.time").functionCounter().count()).isFinite().isNotNegative();
}
@Test
void loggingConnectionUsesRunningContainer() {
assertThat(grafanaLgtm.isRunning()).isTrue();
assertThat(loggingConnectionDetails.getUrl(Transport.HTTP))
.isEqualTo(grafanaLgtm.getOtlpHttpUrl() + "/v1/logs");
}
}
@@ -9,10 +9,12 @@ import org.testcontainers.utility.DockerImageName;
@TestConfiguration(proxyBeanMethods = false)
class TestcontainersConfiguration {
static final String LGTM_IMAGE = "grafana/otel-lgtm@sha256:b966ea107831d526d9eb8fe4d2d86c9e5731392fad9dce8296bcf2072031f07c";
@Bean
@ServiceConnection
LgtmStackContainer grafanaLgtmContainer() {
return new LgtmStackContainer(DockerImageName.parse("grafana/otel-lgtm:latest"));
return new LgtmStackContainer(DockerImageName.parse(LGTM_IMAGE));
}
}