55import io .micrometer .core .instrument .MeterRegistry ;
66import io .micrometer .registry .otlp .OtlpConfig ;
77import io .micrometer .registry .otlp .OtlpMeterRegistry ;
8+ import io .opentelemetry .api .common .AttributeKey ;
9+ import io .opentelemetry .api .common .Attributes ;
10+ import io .opentelemetry .api .trace .Span ;
11+ import io .opentelemetry .api .trace .Tracer ;
12+ import io .opentelemetry .exporter .otlp .trace .OtlpGrpcSpanExporter ;
13+ import io .opentelemetry .sdk .OpenTelemetrySdk ;
14+ import io .opentelemetry .sdk .resources .Resource ;
15+ import io .opentelemetry .sdk .trace .SdkTracerProvider ;
16+ import io .opentelemetry .sdk .trace .export .BatchSpanProcessor ;
817import io .restassured .RestAssured ;
918import io .restassured .response .Response ;
1019import org .awaitility .Awaitility ;
1120import org .junit .Test ;
1221import uk .org .webcompere .systemstubs .SystemStubs ;
1322
1423import java .time .Duration ;
24+ import java .util .concurrent .TimeUnit ;
1525
1626import static org .assertj .core .api .Assertions .assertThat ;
1727
1828public class LgtmStackContainerTest {
1929
2030 @ Test
21- public void shouldPublishMetric () throws Exception {
31+ public void shouldPublishMetricAndTrace () throws Exception {
2232 try ( // container {
23- LgtmStackContainer lgtm = new LgtmStackContainer ("grafana/otel-lgtm:0.6 .0" )
33+ LgtmStackContainer lgtm = new LgtmStackContainer ("grafana/otel-lgtm:0.11 .0" )
2434 // }
2535 ) {
2636 lgtm .start ();
@@ -29,7 +39,9 @@ public void shouldPublishMetric() throws Exception {
2939 .get (String .format ("http://%s:%s/api/health" , lgtm .getHost (), lgtm .getMappedPort (3000 )))
3040 .jsonPath ()
3141 .get ("version" );
32- assertThat (version ).isEqualTo ("11.0.0" );
42+ assertThat (version ).isEqualTo ("11.6.0" );
43+
44+ generateTrace (lgtm );
3345
3446 OtlpConfig otlpConfig = createOtlpConfig (lgtm );
3547 MeterRegistry meterRegistry = SystemStubs
@@ -52,9 +64,52 @@ public void shouldPublishMetric() throws Exception {
5264 assertThat (response .getStatusCode ()).isEqualTo (200 );
5365 assertThat (response .body ().jsonPath ().getList ("data.result[0].value" )).contains ("2" );
5466 });
67+
68+ Awaitility
69+ .given ()
70+ .pollInterval (Duration .ofSeconds (2 ))
71+ .atMost (Duration .ofSeconds (5 ))
72+ .ignoreExceptions ()
73+ .untilAsserted (() -> {
74+ Response response = RestAssured
75+ .given ()
76+ .get (String .format ("%s/api/search" , lgtm .getTempoUrl ()))
77+ .prettyPeek ()
78+ .thenReturn ();
79+ assertThat (response .getStatusCode ()).isEqualTo (200 );
80+ assertThat (response .body ().jsonPath ().getString ("traces[0].rootServiceName" ))
81+ .isEqualTo ("test-service" );
82+ });
5583 }
5684 }
5785
86+ private void generateTrace (LgtmStackContainer lgtm ) {
87+ OtlpGrpcSpanExporter exporter = OtlpGrpcSpanExporter
88+ .builder ()
89+ .setTimeout (Duration .ofSeconds (1 ))
90+ .setEndpoint (lgtm .getOtlpGrpcUrl ())
91+ .build ();
92+
93+ BatchSpanProcessor spanProcessor = BatchSpanProcessor
94+ .builder (exporter )
95+ .setScheduleDelay (500 , TimeUnit .MILLISECONDS )
96+ .build ();
97+
98+ SdkTracerProvider tracerProvider = SdkTracerProvider
99+ .builder ()
100+ .addSpanProcessor (spanProcessor )
101+ .setResource (Resource .create (Attributes .of (AttributeKey .stringKey ("service.name" ), "test-service" )))
102+ .build ();
103+
104+ OpenTelemetrySdk openTelemetry = OpenTelemetrySdk .builder ().setTracerProvider (tracerProvider ).build ();
105+
106+ Tracer tracer = openTelemetry .getTracer ("test" );
107+ Span span = tracer .spanBuilder ("test" ).startSpan ();
108+ span .end ();
109+
110+ openTelemetry .shutdown ();
111+ }
112+
58113 private static OtlpConfig createOtlpConfig (LgtmStackContainer lgtm ) {
59114 return new OtlpConfig () {
60115 @ Override
0 commit comments