@@ -555,6 +555,35 @@ public void invoke(Integer req, StreamObserver<Integer> responseObserver) {
555
555
listener .onHalfClose ();
556
556
}
557
557
558
+ @ Test
559
+ public void clientSendsOne_serverOnErrorWithTrailers_serverStreaming () {
560
+ Metadata trailers = new Metadata ();
561
+ Metadata .Key <String > key = Metadata .Key .of ("trailers-test-key1" ,
562
+ Metadata .ASCII_STRING_MARSHALLER );
563
+ trailers .put (key , "trailers-test-value1" );
564
+
565
+ ServerCallRecorder serverCall = new ServerCallRecorder (SERVER_STREAMING_METHOD );
566
+ ServerCallHandler <Integer , Integer > callHandler = ServerCalls .asyncServerStreamingCall (
567
+ new ServerCalls .ServerStreamingMethod <Integer , Integer >() {
568
+ @ Override
569
+ public void invoke (Integer req , StreamObserver <Integer > responseObserver ) {
570
+ responseObserver .onError (
571
+ Status .fromCode (Status .Code .INTERNAL )
572
+ .asRuntimeException (trailers )
573
+ );
574
+ }
575
+ });
576
+ ServerCall .Listener <Integer > listener = callHandler .startCall (serverCall , new Metadata ());
577
+ serverCall .isReady = true ;
578
+ serverCall .isCancelled = false ;
579
+ listener .onReady ();
580
+ listener .onMessage (1 );
581
+ listener .onHalfClose ();
582
+ // verify trailers key is set
583
+ assertTrue (serverCall .trailers .containsKey (key ));
584
+ assertTrue (serverCall .status .equals (Status .INTERNAL ));
585
+ }
586
+
558
587
@ Test
559
588
public void inprocessTransportManualFlow () throws Exception {
560
589
final Semaphore semaphore = new Semaphore (1 );
@@ -652,6 +681,7 @@ private static class ServerCallRecorder extends ServerCall<Integer, Integer> {
652
681
private boolean isCancelled ;
653
682
private boolean isReady ;
654
683
private int onReadyThreshold ;
684
+ private Metadata trailers ;
655
685
656
686
public ServerCallRecorder (MethodDescriptor <Integer , Integer > methodDescriptor ) {
657
687
this .methodDescriptor = methodDescriptor ;
@@ -674,6 +704,7 @@ public void sendMessage(Integer message) {
674
704
@ Override
675
705
public void close (Status status , Metadata trailers ) {
676
706
this .status = status ;
707
+ this .trailers = trailers ;
677
708
}
678
709
679
710
@ Override
0 commit comments