Implement cancel_after_* integration tests

-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=82734780
This commit is contained in:
ejona 2014-12-23 11:30:37 -08:00 committed by Eric Anderson
parent 42fcc501b9
commit 1c20eb6cef
2 changed files with 45 additions and 0 deletions

View File

@ -72,6 +72,7 @@ import org.junit.Assert;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import java.util.ArrayList;
import java.util.Arrays;
@ -305,6 +306,46 @@ public abstract class AbstractTransportTest {
verifyNoMoreInteractions(responseObserver);
}
@Test
public void cancelAfterBegin() throws Exception {
StreamRecorder<StreamingInputCallResponse> responseObserver = StreamRecorder.create();
StreamObserver<StreamingInputCallRequest> requestObserver =
asyncStub.streamingInputCall(responseObserver);
requestObserver.onError(new RuntimeException());
responseObserver.awaitCompletion();
assertEquals(Arrays.<StreamingInputCallResponse>asList(), responseObserver.getValues());
assertEquals(Status.CANCELLED, Status.fromThrowable(responseObserver.getError()));
}
@Test
public void cancelAfterFirstResponse() throws Exception {
final StreamingOutputCallRequest request = StreamingOutputCallRequest.newBuilder()
.addResponseParameters(ResponseParameters.newBuilder()
.setSize(31415))
.setPayload(Payload.newBuilder()
.setBody(ByteString.copyFrom(new byte[27182])))
.build();
final StreamingOutputCallResponse goldenResponse = StreamingOutputCallResponse.newBuilder()
.setPayload(Payload.newBuilder()
.setType(PayloadType.COMPRESSABLE)
.setBody(ByteString.copyFrom(new byte[31415])))
.build();
@SuppressWarnings("unchecked")
StreamObserver<StreamingOutputCallResponse> responseObserver = mock(StreamObserver.class);
StreamObserver<StreamingOutputCallRequest> requestObserver
= asyncStub.fullDuplexCall(responseObserver);
requestObserver.onValue(request);
verify(responseObserver, timeout(1000)).onValue(goldenResponse);
verifyNoMoreInteractions(responseObserver);
requestObserver.onError(new RuntimeException());
ArgumentCaptor<Throwable> captor = ArgumentCaptor.forClass(Throwable.class);
verify(responseObserver, timeout(1000)).onError(captor.capture());
assertEquals(Status.CANCELLED, Status.fromThrowable(captor.getValue()));
verifyNoMoreInteractions(responseObserver);
}
@Test
public void fullDuplexCallShouldSucceed() throws Exception {
// Build the request.

View File

@ -223,6 +223,10 @@ public class TestServiceClient {
tester.pingPong();
} else if ("empty_stream".equals(testCase)) {
tester.emptyStream();
} else if ("cancel_after_begin".equals(testCase)) {
tester.cancelAfterBegin();
} else if ("cancel_after_first_response".equals(testCase)) {
tester.cancelAfterFirstResponse();
} else {
throw new IllegalArgumentException("Unknown test case: " + testCase);
}