diff --git a/stub/src/main/java/io/grpc/stub/ClientCalls.java b/stub/src/main/java/io/grpc/stub/ClientCalls.java index 6986a285ae..74c3150586 100644 --- a/stub/src/main/java/io/grpc/stub/ClientCalls.java +++ b/stub/src/main/java/io/grpc/stub/ClientCalls.java @@ -73,6 +73,7 @@ public final class ClientCalls { */ public static void asyncUnaryCall( ClientCall call, ReqT req, StreamObserver responseObserver) { + checkNotNull(responseObserver, "responseObserver"); asyncUnaryRequestCall(call, req, responseObserver, false); } @@ -86,6 +87,7 @@ public final class ClientCalls { */ public static void asyncServerStreamingCall( ClientCall call, ReqT req, StreamObserver responseObserver) { + checkNotNull(responseObserver, "responseObserver"); asyncUnaryRequestCall(call, req, responseObserver, true); } @@ -102,6 +104,7 @@ public final class ClientCalls { public static StreamObserver asyncClientStreamingCall( ClientCall call, StreamObserver responseObserver) { + checkNotNull(responseObserver, "responseObserver"); return asyncStreamingRequestCall(call, responseObserver, false); } @@ -116,6 +119,7 @@ public final class ClientCalls { */ public static StreamObserver asyncBidiStreamingCall( ClientCall call, StreamObserver responseObserver) { + checkNotNull(responseObserver, "responseObserver"); return asyncStreamingRequestCall(call, responseObserver, true); } diff --git a/stub/src/test/java/io/grpc/stub/ClientCallsTest.java b/stub/src/test/java/io/grpc/stub/ClientCallsTest.java index d5cf572a8b..a7c9b7c64d 100644 --- a/stub/src/test/java/io/grpc/stub/ClientCallsTest.java +++ b/stub/src/test/java/io/grpc/stub/ClientCallsTest.java @@ -503,6 +503,50 @@ public class ClientCallsTest { assertThat(requests).isEmpty(); } + @Test + public void checkForNullInAsyncUnaryCall() { + NoopClientCall call = new NoopClientCall<>(); + try { + ClientCalls.asyncUnaryCall(call, Integer.valueOf(1), null); + fail("Should have gotten an exception for the null responseObserver"); + } catch (NullPointerException e) { + assertEquals("responseObserver", e.getMessage()); + } + } + + @Test + public void checkForNullInBidiCall() { + NoopClientCall call = new NoopClientCall<>(); + try { + ClientCalls.asyncBidiStreamingCall(call, null); + fail("Should have gotten an exception for the null responseObserver"); + } catch (NullPointerException e) { + assertEquals("responseObserver", e.getMessage()); + } + } + + @Test + public void checkForNullInClientStreamCall() { + NoopClientCall call = new NoopClientCall<>(); + try { + ClientCalls.asyncClientStreamingCall(call, null); + fail("Should have gotten an exception for the null responseObserver"); + } catch (NullPointerException e) { + assertEquals("responseObserver", e.getMessage()); + } + } + + @Test + public void checkForNullInServerStreamCall() { + NoopClientCall call = new NoopClientCall<>(); + try { + ClientCalls.asyncServerStreamingCall(call, Integer.valueOf(1), null); + fail("Should have gotten an exception for the null responseObserver"); + } catch (NullPointerException e) { + assertEquals("responseObserver", e.getMessage()); + } + } + @Test public void callStreamObserverPropagatesFlowControlRequestsToCall() throws Exception {