55 */
66package org .hyperledger .fabric .traces .impl ;
77
8- import com .google .common .io .Closer ;
98import io .grpc .ManagedChannelBuilder ;
109import io .grpc .Server ;
1110import io .grpc .ServerCall ;
1514import io .grpc .Status ;
1615import io .grpc .inprocess .InProcessChannelBuilder ;
1716import io .grpc .inprocess .InProcessServerBuilder ;
18- import io .grpc .netty .shaded .io .grpc .netty .NettyServerBuilder ;
1917import io .grpc .stub .StreamObserver ;
2018import io .opentelemetry .api .trace .Span ;
21- import io .opentelemetry .proto .collector .trace .v1 .ExportTraceServiceResponse ;
22- import io .opentelemetry .proto .collector .trace .v1 .TraceServiceGrpc ;
23- import io .opentelemetry .proto .collector .trace .v1 .ExportTraceServiceRequest ;
24- import io .opentelemetry .proto .trace .v1 .ResourceSpans ;
19+ import io .opentelemetry .sdk .trace .data .SpanData ;
2520import org .hyperledger .fabric .contract .ChaincodeStubNaiveImpl ;
2621import org .hyperledger .fabric .metrics .Metrics ;
2722import org .hyperledger .fabric .protos .peer .Chaincode ;
3429import org .hyperledger .fabric .shim .impl .ChaincodeSupportClient ;
3530import org .hyperledger .fabric .shim .impl .InvocationTaskManager ;
3631import org .hyperledger .fabric .traces .Traces ;
37- import org .junit .jupiter .api .AfterEach ;
38- import org .junit .jupiter .api .BeforeEach ;
3932import org .junit .jupiter .api .Test ;
4033
41- import java .util .ArrayList ;
4234import java .util .List ;
4335import java .util .Properties ;
4436import java .util .concurrent .CompletableFuture ;
4840
4941public final class OpenTelemetryTracesProviderTest {
5042
51- private static final class FakeCollector extends TraceServiceGrpc .TraceServiceImplBase {
52- private final List <ResourceSpans > receivedSpans = new ArrayList <ResourceSpans >();
53- private Status returnedStatus = Status .OK ;
54-
55- @ Override
56- public void export (
57- final ExportTraceServiceRequest request ,
58- final StreamObserver <ExportTraceServiceResponse > responseObserver ) {
59- receivedSpans .addAll (request .getResourceSpansList ());
60- responseObserver .onNext (ExportTraceServiceResponse .newBuilder ().build ());
61- if (!returnedStatus .isOk ()) {
62- if (returnedStatus .getCode () == Status .Code .DEADLINE_EXCEEDED ) {
63- // Do not call onCompleted to simulate a deadline exceeded.
64- return ;
65- }
66- responseObserver .onError (returnedStatus .asRuntimeException ());
67- return ;
68- }
69- responseObserver .onCompleted ();
70- }
71-
72- List <io .opentelemetry .proto .trace .v1 .ResourceSpans > getReceivedSpans () {
73- return receivedSpans ;
74- }
75-
76- void setReturnedStatus (final Status returnedStatus ) {
77- this .returnedStatus = returnedStatus ;
78- }
79- }
80-
8143 private class ContextGetterChaincode extends ChaincodeBase {
8244
8345 @ Override
@@ -96,23 +58,6 @@ public Properties getChaincodeConfig() {
9658 }
9759 }
9860
99- private final FakeCollector fakeTracesCollector = new FakeCollector ();
100- private final Closer closer = Closer .create ();
101-
102- @ BeforeEach
103- public void setUp () throws Exception {
104- Server server =
105- NettyServerBuilder .forPort (4317 )
106- .addService (fakeTracesCollector )
107- .build ()
108- .start ();
109- closer .register (server ::shutdownNow );
110- }
111-
112- @ AfterEach
113- public void tearDown () throws Exception {
114- closer .close ();
115- }
11661
11762 @ Test
11863 public void testProvider () {
@@ -126,13 +71,13 @@ public void testProvider() {
12671
12772 @ Test
12873 public void testTracing () throws Exception {
74+
12975 Properties props = new Properties ();
13076 props .put ("CHAINCODE_TRACES_ENABLED" , "true" );
13177 props .put ("CHAINCODE_TRACES_PROVIDER" , OpenTelemetryTracesProvider .class .getName ());
13278 props .put ("OTEL_TRACES_SAMPLER" , "always_on" );
13379 props .put ("OTEL_BSP_SCHEDULE_DELAY" , "100" );
134- props .put ("OTEL_EXPORTER_OTLP_ENDPOINT" , "http://localhost:4317" );
135- props .put ("OTEL_EXPORTER_OTLP_INSECURE" , "true" );
80+ props .put ("otel.traces.exporter" , "TestSpanExporterProvider" );
13681 Traces .initialize (props );
13782 Metrics .initialize (props );
13883
@@ -189,8 +134,7 @@ public void onCompleted() {
189134
190135 chaincodeSupportClient .start (itm , requestObserver );
191136 wait .get (5 , TimeUnit .SECONDS );
192- Thread .sleep (5000 ); // wait for async send of the trace
193- List <io .opentelemetry .proto .trace .v1 .ResourceSpans > spans = fakeTracesCollector .getReceivedSpans ();
137+ List <SpanData > spans = TestSpanExporterProvider .SPANS ;
194138 assertThat (spans .isEmpty ()).isFalse ();
195139
196140 chaincodeSupportClient .shutdown (itm );
0 commit comments