public void cancelAfterFirstResponse() throws Exception { final StreamingOutputCallRequest request = new StreamingOutputCallRequest(); request.responseParameters = new Messages.ResponseParameters[1]; request.responseParameters[0] = new ResponseParameters(); request.responseParameters[0].size = 31415; request.payload = new Payload(); request.payload.body = new byte[27182]; final StreamingOutputCallResponse goldenResponse = new StreamingOutputCallResponse(); goldenResponse.payload = new Payload(); goldenResponse.payload.type = Messages.COMPRESSABLE; goldenResponse.payload.body = new byte[31415]; ResponseObserver responseObserver = new ResponseObserver(); StreamObserver<StreamingOutputCallRequest> requestObserver = asyncStub.fullDuplexCall(responseObserver); requestObserver.onNext(request); Object response = responseObserver.responses.poll(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); if (!(response instanceof Messages.StreamingOutputCallResponse)) { fail("Unexpected: " + response); } assertMessageEquals(goldenResponse, (Messages.StreamingOutputCallResponse) response); requestObserver.onError(new RuntimeException()); response = responseObserver.responses.poll(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); if (!(response instanceof Throwable)) { fail("Unexpected: " + response); } assertCodeEquals(io.grpc.Status.CANCELLED, io.grpc.Status.fromThrowable((Throwable) response)); }
public void cancelAfterBegin() throws Exception { StreamRecorder<StreamingInputCallResponse> responseObserver = StreamRecorder.create(); StreamObserver<StreamingInputCallRequest> requestObserver = asyncStub.streamingInputCall(responseObserver); requestObserver.onError(new RuntimeException()); assertTrue(responseObserver.awaitCompletion(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)); assertEquals(Arrays.<StreamingInputCallResponse>asList(), responseObserver.getValues()); assertCodeEquals( io.grpc.Status.CANCELLED, io.grpc.Status.fromThrowable(responseObserver.getError())); }
private static <ReqT, RespT, OutputT> OutputT getBlockingResult( AbstractRetryingRpcListener<ReqT, RespT, OutputT> listener) { try { listener.start(); return listener.getCompletionFuture().get(); } catch (InterruptedException e) { listener.cancel(); throw Status.CANCELLED.withCause(e).asRuntimeException(); } catch (ExecutionException e) { listener.cancel(); throw Status.fromThrowable(e).asRuntimeException(); } }
/** Start a fullDuplexCall which the server will not respond, and verify the deadline expires. */ public void timeoutOnSleepingServer() throws Exception { TestServiceGrpc.TestService stub = TestServiceGrpc.newStub(channel).withDeadlineAfter(1, TimeUnit.MILLISECONDS); StreamRecorder<StreamingOutputCallResponse> recorder = StreamRecorder.create(); StreamObserver<StreamingOutputCallRequest> requestObserver = stub.fullDuplexCall(recorder); try { StreamingOutputCallRequest request = new StreamingOutputCallRequest(); request.payload = new Messages.Payload(); request.payload.body = new byte[27182]; requestObserver.onNext(request); } catch (IllegalStateException expected) { // This can happen if the stream has already been terminated due to deadline exceeded. } assertTrue(recorder.awaitCompletion(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)); assertCodeEquals( io.grpc.Status.DEADLINE_EXCEEDED, io.grpc.Status.fromThrowable(recorder.getError())); }
public void deadlineExceededServerStreaming() throws Exception { // warm up the channel and JVM blockingStub.emptyCall(new EmptyProtos.Empty()); ResponseParameters responseParameters = new ResponseParameters(); responseParameters.size = 1; responseParameters.intervalUs = 10000; StreamingOutputCallRequest request = new StreamingOutputCallRequest(); request.responseType = Messages.COMPRESSABLE; request.responseParameters = new ResponseParameters[4]; request.responseParameters[0] = responseParameters; request.responseParameters[1] = responseParameters; request.responseParameters[2] = responseParameters; request.responseParameters[3] = responseParameters; StreamRecorder<StreamingOutputCallResponse> recorder = StreamRecorder.create(); TestServiceGrpc.newStub(channel) .withDeadlineAfter(30, TimeUnit.MILLISECONDS) .streamingOutputCall(request, recorder); assertTrue(recorder.awaitCompletion(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)); assertCodeEquals( io.grpc.Status.DEADLINE_EXCEEDED, io.grpc.Status.fromThrowable(recorder.getError())); }
@Override protected final void deframeFailed(Throwable cause) { log.log(Level.WARNING, "Exception processing message", cause); abortStream(Status.fromThrowable(cause), true); }