11package io .grpc .binder .internal ;
22
3+ import static com .google .common .base .Preconditions .checkState ;
34import static com .google .common .truth .Truth .assertThat ;
45import static org .mockito .ArgumentMatchers .any ;
5- import static org .mockito .Mockito .verify ;
66import static org .mockito .Mockito .verifyNoInteractions ;
77import static org .mockito .Mockito .when ;
88
99import io .grpc .Metadata ;
10+ import io .grpc .NoopServerCall ;
1011import io .grpc .ServerCall ;
1112import io .grpc .ServerCallHandler ;
1213import io .grpc .Status ;
14+ import javax .annotation .Nullable ;
1315import org .junit .Before ;
1416import org .junit .Rule ;
1517import org .junit .Test ;
1618import org .junit .runner .RunWith ;
1719import org .junit .runners .JUnit4 ;
18- import org .mockito .ArgumentCaptor ;
19- import org .mockito .Captor ;
2020import org .mockito .InOrder ;
2121import org .mockito .Mock ;
2222import org .mockito .Mockito ;
@@ -29,10 +29,9 @@ public final class PendingAuthListenerTest {
2929 @ Rule public final MockitoRule mocks = MockitoJUnit .rule ();
3030
3131 @ Mock ServerCallHandler <Object , Object > next ;
32- @ Mock ServerCall <Object , Object > call ;
3332 @ Mock ServerCall .Listener <Object > delegate ;
34- @ Captor ArgumentCaptor <Status > statusCaptor ;
3533
34+ private final ServerCall <Object , Object > call = new NoopServerCall <>();
3635 private final Metadata headers = new Metadata ();
3736 private final PendingAuthListener <Object , Object > listener = new PendingAuthListener <>();
3837
@@ -93,13 +92,24 @@ public void onCallbacks_withCancellation_runsPendingCallbacksAfterStartCall() {
9392 public void whenStartCallFails_closesTheCallWithInternalStatus () {
9493 IllegalStateException exception = new IllegalStateException ("oops" );
9594 when (next .startCall (any (), any ())).thenThrow (exception );
95+ FakeServerCall fakeCall = new FakeServerCall ();
9696
9797 listener .onReady ();
98- listener .startCall (call , headers , next );
98+ listener .startCall (fakeCall , headers , next );
9999
100- verify ( call ). close ( statusCaptor . capture (), any ()) ;
101- Status status = statusCaptor . getValue ();
100+ Status status = fakeCall . closeStatus ;
101+ assertThat ( status ). isNotNull ();
102102 assertThat (status .getCode ()).isEqualTo (Status .Code .INTERNAL );
103103 assertThat (status .getCause ()).isSameInstanceAs (exception );
104104 }
105+
106+ private static final class FakeServerCall extends NoopServerCall <Object , Object > {
107+ @ Nullable Status closeStatus ;
108+
109+ @ Override
110+ public void close (Status status , Metadata trailers ) {
111+ checkState (closeStatus == null , "call already closed" );
112+ closeStatus = status ;
113+ }
114+ }
105115}
0 commit comments