Skip to content

Commit ecbe959

Browse files
authored
binder: Don't mock ServerCall in test (#13112)
io.grpc.ServerCall is documented as DO NOT MOCK.
1 parent 247d324 commit ecbe959

1 file changed

Lines changed: 18 additions & 8 deletions

File tree

‎binder/src/test/java/io/grpc/binder/internal/PendingAuthListenerTest.java‎

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
package io.grpc.binder.internal;
22

3+
import static com.google.common.base.Preconditions.checkState;
34
import static com.google.common.truth.Truth.assertThat;
45
import static org.mockito.ArgumentMatchers.any;
5-
import static org.mockito.Mockito.verify;
66
import static org.mockito.Mockito.verifyNoInteractions;
77
import static org.mockito.Mockito.when;
88

99
import io.grpc.Metadata;
10+
import io.grpc.NoopServerCall;
1011
import io.grpc.ServerCall;
1112
import io.grpc.ServerCallHandler;
1213
import io.grpc.Status;
14+
import javax.annotation.Nullable;
1315
import org.junit.Before;
1416
import org.junit.Rule;
1517
import org.junit.Test;
1618
import org.junit.runner.RunWith;
1719
import org.junit.runners.JUnit4;
18-
import org.mockito.ArgumentCaptor;
19-
import org.mockito.Captor;
2020
import org.mockito.InOrder;
2121
import org.mockito.Mock;
2222
import 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

Comments
 (0)