5
5
import io .micrometer .core .instrument .MeterRegistry ;
6
6
import io .micrometer .registry .otlp .OtlpConfig ;
7
7
import 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 ;
8
17
import io .restassured .RestAssured ;
9
18
import io .restassured .response .Response ;
10
19
import org .awaitility .Awaitility ;
11
20
import org .junit .Test ;
12
21
import uk .org .webcompere .systemstubs .SystemStubs ;
13
22
14
23
import java .time .Duration ;
24
+ import java .util .concurrent .TimeUnit ;
15
25
16
26
import static org .assertj .core .api .Assertions .assertThat ;
17
27
18
28
public class LgtmStackContainerTest {
19
29
20
30
@ Test
21
- public void shouldPublishMetric () throws Exception {
31
+ public void shouldPublishMetricAndTrace () throws Exception {
22
32
try ( // container {
23
- LgtmStackContainer lgtm = new LgtmStackContainer ("grafana/otel-lgtm:0.6 .0" )
33
+ LgtmStackContainer lgtm = new LgtmStackContainer ("grafana/otel-lgtm:0.11 .0" )
24
34
// }
25
35
) {
26
36
lgtm .start ();
@@ -29,7 +39,9 @@ public void shouldPublishMetric() throws Exception {
29
39
.get (String .format ("http://%s:%s/api/health" , lgtm .getHost (), lgtm .getMappedPort (3000 )))
30
40
.jsonPath ()
31
41
.get ("version" );
32
- assertThat (version ).isEqualTo ("11.0.0" );
42
+ assertThat (version ).isEqualTo ("11.6.0" );
43
+
44
+ generateTrace (lgtm );
33
45
34
46
OtlpConfig otlpConfig = createOtlpConfig (lgtm );
35
47
MeterRegistry meterRegistry = SystemStubs
@@ -52,9 +64,52 @@ public void shouldPublishMetric() throws Exception {
52
64
assertThat (response .getStatusCode ()).isEqualTo (200 );
53
65
assertThat (response .body ().jsonPath ().getList ("data.result[0].value" )).contains ("2" );
54
66
});
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
+ });
55
83
}
56
84
}
57
85
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
+
58
113
private static OtlpConfig createOtlpConfig (LgtmStackContainer lgtm ) {
59
114
return new OtlpConfig () {
60
115
@ Override
0 commit comments