|
33 | 33 | import io.grpc.ServerServiceDefinition; |
34 | 34 | import io.grpc.ServiceDescriptor; |
35 | 35 | import io.grpc.Status; |
| 36 | +import io.grpc.Status.Code; |
36 | 37 | import io.grpc.StatusRuntimeException; |
37 | 38 | import io.grpc.inprocess.InProcessChannelBuilder; |
38 | 39 | import io.grpc.inprocess.InProcessServerBuilder; |
@@ -620,6 +621,59 @@ public void onClose(Status status, Metadata trailers) { |
620 | 621 | assertArrayEquals(new int[]{0, 1, 1, 2, 2, 2}, receivedMessages); |
621 | 622 | } |
622 | 623 |
|
| 624 | + @Test |
| 625 | + public void serverUnaryResponseMsgWithOkStatus() { |
| 626 | + ServerCallHandler<Integer, Integer> serverCallHandler = |
| 627 | + ServerCalls.asyncUnaryCall( |
| 628 | + new ServerCalls.UnaryMethod<Integer, Integer>() { |
| 629 | + @Override |
| 630 | + public void invoke(Integer request, StreamObserver<Integer> responseObserver) { |
| 631 | + responseObserver.onNext(request); |
| 632 | + responseObserver.onCompleted(); |
| 633 | + } |
| 634 | + }); |
| 635 | + ServerCall.Listener<Integer> callListener = |
| 636 | + serverCallHandler.startCall(serverCall, new Metadata()); |
| 637 | + serverCall.isReady = true; |
| 638 | + serverCall.isCancelled = false; |
| 639 | + callListener.onReady(); |
| 640 | + callListener.onMessage(1); |
| 641 | + callListener.onHalfClose(); |
| 642 | + |
| 643 | + assertThat(serverCall.status.getCode()).isEqualTo(Code.OK); |
| 644 | + assertThat(serverCall.responses).containsExactly(1); |
| 645 | + } |
| 646 | + |
| 647 | + @Test |
| 648 | + public void serverUnaryResponseMsgWithNotOkStatus() { |
| 649 | + ServerCallHandler<Integer, Integer> serverCallHandler = |
| 650 | + ServerCalls.asyncUnaryCall( |
| 651 | + new ServerCalls.UnaryMethod<Integer, Integer>() { |
| 652 | + @Override |
| 653 | + public void invoke(Integer request, StreamObserver<Integer> responseObserver) { |
| 654 | + responseObserver.onNext(request); |
| 655 | + responseObserver.onError( |
| 656 | + Status.INTERNAL |
| 657 | + .withDescription("Response message is null for unary call") |
| 658 | + .asRuntimeException()); |
| 659 | + } |
| 660 | + }); |
| 661 | + |
| 662 | + ServerCall.Listener<Integer> callListener = |
| 663 | + serverCallHandler.startCall(serverCall, new Metadata()); |
| 664 | + |
| 665 | + serverCall.isReady = true; |
| 666 | + serverCall.isCancelled = false; |
| 667 | + callListener.onReady(); |
| 668 | + callListener.onMessage(1); |
| 669 | + callListener.onHalfClose(); |
| 670 | + |
| 671 | + assertThat(serverCall.status.getCode()).isEqualTo(Code.INTERNAL); |
| 672 | + assertThat(serverCall.status.getDescription()) |
| 673 | + .isEqualTo("Response message is null for unary call"); |
| 674 | + assertThat(serverCall.responses).isEmpty(); |
| 675 | + } |
| 676 | + |
623 | 677 | public static class IntegerMarshaller implements MethodDescriptor.Marshaller<Integer> { |
624 | 678 | @Override |
625 | 679 | public InputStream stream(Integer value) { |
|
0 commit comments