3434import static org .mockito .Mockito .verify ;
3535import static org .mockito .internal .verification .VerificationModeFactory .times ;
3636
37+ import io .opentelemetry .api .trace .Span .Kind ;
3738import io .opentelemetry .api .trace .StatusCode ;
3839import io .opentelemetry .sdk .testing .junit4 .OpenTelemetryRule ;
3940import io .opentelemetry .sdk .trace .data .SpanData ;
@@ -455,14 +456,22 @@ private SpanData waitSpan(String name) {
455456 return traceRule .getSpans ().stream ().filter (s -> s .getName ().equals (name )).findFirst ().get ();
456457 }
457458
458- private void assertRpcAttribute (SpanData data , String methodName , InetSocketAddress addr ) {
459+ private void assertRpcAttribute (SpanData data , String methodName , InetSocketAddress addr ,
460+ Kind kind ) {
459461 assertEquals (SERVICE .getDescriptorForType ().getName (),
460462 data .getAttributes ().get (TraceUtil .RPC_SERVICE_KEY ));
461463 assertEquals (methodName , data .getAttributes ().get (TraceUtil .RPC_METHOD_KEY ));
462464 if (addr != null ) {
463465 assertEquals (addr .getHostName (), data .getAttributes ().get (TraceUtil .REMOTE_HOST_KEY ));
464466 assertEquals (addr .getPort (), data .getAttributes ().get (TraceUtil .REMOTE_PORT_KEY ).intValue ());
465467 }
468+ assertEquals (kind , data .getKind ());
469+ }
470+
471+ private void assertRemoteSpan () {
472+ SpanData data = waitSpan ("RpcServer.process" );
473+ assertTrue (data .getParentSpanContext ().isRemote ());
474+ assertEquals (Kind .SERVER , data .getKind ());
466475 }
467476
468477 @ Test
@@ -474,8 +483,10 @@ public void testTracing() throws IOException, ServiceException {
474483 rpcServer .start ();
475484 BlockingInterface stub = newBlockingStub (client , rpcServer .getListenerAddress ());
476485 stub .pause (null , PauseRequestProto .newBuilder ().setMs (100 ).build ());
477- assertRpcAttribute (waitSpan ("RpcClient.callMethod" ), "pause" , rpcServer .getListenerAddress ());
478- assertRpcAttribute (waitSpan ("RpcServer.callMethod" ), "pause" , null );
486+ assertRpcAttribute (waitSpan ("RpcClient.callMethod" ), "pause" , rpcServer .getListenerAddress (),
487+ Kind .CLIENT );
488+ assertRpcAttribute (waitSpan ("RpcServer.callMethod" ), "pause" , null , Kind .INTERNAL );
489+ assertRemoteSpan ();
479490 assertSameTraceId ();
480491 for (SpanData data : traceRule .getSpans ()) {
481492 assertThat (
@@ -487,8 +498,10 @@ public void testTracing() throws IOException, ServiceException {
487498 traceRule .clearSpans ();
488499 assertThrows (ServiceException .class ,
489500 () -> stub .error (null , EmptyRequestProto .getDefaultInstance ()));
490- assertRpcAttribute (waitSpan ("RpcClient.callMethod" ), "error" , rpcServer .getListenerAddress ());
491- assertRpcAttribute (waitSpan ("RpcServer.callMethod" ), "error" , null );
501+ assertRpcAttribute (waitSpan ("RpcClient.callMethod" ), "error" , rpcServer .getListenerAddress (),
502+ Kind .CLIENT );
503+ assertRpcAttribute (waitSpan ("RpcServer.callMethod" ), "error" , null , Kind .INTERNAL );
504+ assertRemoteSpan ();
492505 assertSameTraceId ();
493506 for (SpanData data : traceRule .getSpans ()) {
494507 assertEquals (StatusCode .ERROR , data .getStatus ().getStatusCode ());
0 commit comments