@@ -552,28 +552,45 @@ def test_abort(self):
552
552
# our detailed failure message
553
553
failure_message = "This is a test failure"
554
554
555
- # aborting RPC handler
556
- def handler (request , context ):
555
+ # aborting RPC handlers
556
+ def error_status_handler (request , context ):
557
+ context .abort (grpc .StatusCode .INTERNAL , failure_message )
558
+
559
+ def unset_status_handler (request , context ):
557
560
context .abort (grpc .StatusCode .FAILED_PRECONDITION , failure_message )
558
561
559
- with self .server (
560
- max_workers = 1 ,
561
- interceptors = [interceptor ],
562
- ) as (server , channel ):
563
- server .add_generic_rpc_handlers ((UnaryUnaryRpcHandler (handler ),))
564
- rpc_call = "TestServicer/handler"
562
+ rpc_call_error = "TestServicer/error_status_handler"
563
+ rpc_call_unset = "TestServicer/unset_status_handler"
564
+
565
+ rpc_calls = {
566
+ rpc_call_error : error_status_handler ,
567
+ rpc_call_unset : unset_status_handler ,
568
+ }
569
+
570
+ for rpc_call , handler in rpc_calls .items ():
571
+ with self .server (
572
+ max_workers = 1 ,
573
+ interceptors = [interceptor ],
574
+ ) as (server , channel ):
575
+ server .add_generic_rpc_handlers (
576
+ (UnaryUnaryRpcHandler (handler ),)
577
+ )
565
578
566
- server .start ()
567
- # unfortunately, these are just bare exceptions in grpc...
568
- with self .assertRaises (Exception ):
569
- channel .unary_unary (rpc_call )(b"" )
570
- server .stop (None )
579
+ server .start ()
580
+
581
+ with self .assertRaises (Exception ):
582
+ channel .unary_unary (rpc_call )(b"" )
583
+
584
+ # unfortunately, these are just bare exceptions in grpc...
585
+ server .stop (None )
571
586
572
587
spans_list = self .memory_exporter .get_finished_spans ()
573
- self .assertEqual (len (spans_list ), 1 )
588
+ self .assertEqual (len (spans_list ), 2 )
589
+
590
+ # check error span
574
591
span = spans_list [0 ]
575
592
576
- self .assertEqual (span .name , rpc_call )
593
+ self .assertEqual (span .name , rpc_call_error )
577
594
self .assertIs (span .kind , trace .SpanKind .SERVER )
578
595
579
596
# Check version and name in span's instrumentation info
@@ -585,15 +602,43 @@ def handler(request, context):
585
602
self .assertEqual (span .status .status_code , StatusCode .ERROR )
586
603
self .assertEqual (
587
604
span .status .description ,
588
- f"{ grpc .StatusCode .FAILED_PRECONDITION } :{ failure_message } " ,
605
+ f"{ grpc .StatusCode .INTERNAL } :{ failure_message } " ,
606
+ )
607
+
608
+ # Check attributes
609
+ self .assertSpanHasAttributes (
610
+ span ,
611
+ {
612
+ ** self .net_peer_span_attributes ,
613
+ SpanAttributes .RPC_METHOD : "error_status_handler" ,
614
+ SpanAttributes .RPC_SERVICE : "TestServicer" ,
615
+ SpanAttributes .RPC_SYSTEM : "grpc" ,
616
+ SpanAttributes .RPC_GRPC_STATUS_CODE : grpc .StatusCode .INTERNAL .value [
617
+ 0
618
+ ],
619
+ },
589
620
)
590
621
622
+ # check unset status span
623
+ span = spans_list [1 ]
624
+
625
+ self .assertEqual (span .name , rpc_call_unset )
626
+ self .assertIs (span .kind , trace .SpanKind .SERVER )
627
+
628
+ # Check version and name in span's instrumentation info
629
+ self .assertEqualSpanInstrumentationInfo (
630
+ span , opentelemetry .instrumentation .grpc
631
+ )
632
+
633
+ self .assertEqual (span .status .description , None )
634
+ self .assertEqual (span .status .status_code , StatusCode .UNSET )
635
+
591
636
# Check attributes
592
637
self .assertSpanHasAttributes (
593
638
span ,
594
639
{
595
640
** self .net_peer_span_attributes ,
596
- SpanAttributes .RPC_METHOD : "handler " ,
641
+ SpanAttributes .RPC_METHOD : "unset_status_handler " ,
597
642
SpanAttributes .RPC_SERVICE : "TestServicer" ,
598
643
SpanAttributes .RPC_SYSTEM : "grpc" ,
599
644
SpanAttributes .RPC_GRPC_STATUS_CODE : grpc .StatusCode .FAILED_PRECONDITION .value [
0 commit comments