use of org.chromium.net.impl.UrlResponseInfoImpl in project grpc-java by grpc.
the class CronetClientStreamTest method streamFailedAfterResponseHeaderReceived.
@Test
public void streamFailedAfterResponseHeaderReceived() {
ArgumentCaptor<BidirectionalStream.Callback> callbackCaptor = ArgumentCaptor.forClass(BidirectionalStream.Callback.class);
verify(factory).newBidirectionalStreamBuilder(isA(String.class), callbackCaptor.capture(), isA(Executor.class));
BidirectionalStream.Callback callback = callbackCaptor.getValue();
// Receive response header
UrlResponseInfo info = new UrlResponseInfoImpl(new ArrayList<>(), 200, "", responseHeader("200"), false, "", "", 0);
callback.onResponseHeadersReceived(cronetStream, info);
CronetException exception = mock(CronetException.class);
callback.onFailed(cronetStream, info, exception);
verify(transport).finishStream(eq(clientStream), isA(Status.class));
// finishStream calls transportReportStatus.
clientStream.transportState().transportReportStatus(Status.UNAVAILABLE, false, new Metadata());
ArgumentCaptor<Status> statusCaptor = ArgumentCaptor.forClass(Status.class);
verify(clientListener).closed(statusCaptor.capture(), isA(RpcProgress.class), isA(Metadata.class));
Status status = statusCaptor.getValue();
assertEquals(Status.UNAVAILABLE.getCode(), status.getCode());
}
use of org.chromium.net.impl.UrlResponseInfoImpl in project grpc-java by grpc.
the class CronetClientStreamTest method reportTrailersWhenTrailersReceivedAfterReadClosed.
@Test
public void reportTrailersWhenTrailersReceivedAfterReadClosed() {
ArgumentCaptor<BidirectionalStream.Callback> callbackCaptor = ArgumentCaptor.forClass(BidirectionalStream.Callback.class);
verify(factory).newBidirectionalStreamBuilder(isA(String.class), callbackCaptor.capture(), isA(Executor.class));
BidirectionalStream.Callback callback = callbackCaptor.getValue();
callback.onStreamReady(cronetStream);
UrlResponseInfo info = new UrlResponseInfoImpl(new ArrayList<>(), 200, "", responseHeader("200"), false, "", "", 0);
callback.onResponseHeadersReceived(cronetStream, info);
// Receive cronet's endOfStream
callback.onReadCompleted(cronetStream, null, ByteBuffer.allocate(0), true);
verify(clientListener, times(0)).closed(isA(Status.class), isA(RpcProgress.class), isA(Metadata.class));
// Receive trailer
((CronetClientStream.BidirectionalStreamCallback) callback).processTrailers(trailers(Status.UNAUTHENTICATED.getCode().value()));
ArgumentCaptor<Status> statusCaptor = ArgumentCaptor.forClass(Status.class);
verify(clientListener, times(1)).closed(statusCaptor.capture(), isA(RpcProgress.class), isA(Metadata.class));
Status status = statusCaptor.getValue();
assertEquals(Status.UNAUTHENTICATED.getCode(), status.getCode());
}
use of org.chromium.net.impl.UrlResponseInfoImpl in project grpc-java by grpc.
the class CronetClientStreamTest method streamFailedAfterTrailerAndEndOfStreamReceived.
@Test
public void streamFailedAfterTrailerAndEndOfStreamReceived() {
ArgumentCaptor<BidirectionalStream.Callback> callbackCaptor = ArgumentCaptor.forClass(BidirectionalStream.Callback.class);
verify(factory).newBidirectionalStreamBuilder(isA(String.class), callbackCaptor.capture(), isA(Executor.class));
BidirectionalStream.Callback callback = callbackCaptor.getValue();
// Receive response header
UrlResponseInfo info = new UrlResponseInfoImpl(new ArrayList<>(), 200, "", responseHeader("200"), false, "", "", 0);
callback.onResponseHeadersReceived(cronetStream, info);
// Report trailer and endOfStream
callback.onReadCompleted(cronetStream, null, ByteBuffer.allocate(0), true);
((CronetClientStream.BidirectionalStreamCallback) callback).processTrailers(trailers(0));
CronetException exception = mock(CronetException.class);
callback.onFailed(cronetStream, info, exception);
verify(transport).finishStream(eq(clientStream), isA(Status.class));
// finishStream calls transportReportStatus.
clientStream.transportState().transportReportStatus(Status.UNAVAILABLE, false, new Metadata());
ArgumentCaptor<Status> statusCaptor = ArgumentCaptor.forClass(Status.class);
verify(clientListener).closed(statusCaptor.capture(), isA(RpcProgress.class), isA(Metadata.class));
Status status = statusCaptor.getValue();
// Stream has already finished so OK status should be reported.
assertEquals(Status.OK.getCode(), status.getCode());
}
use of org.chromium.net.impl.UrlResponseInfoImpl in project grpc-java by grpc.
the class CronetClientStreamTest method streamFailedAfterTrailerReceived.
@Test
public void streamFailedAfterTrailerReceived() {
ArgumentCaptor<BidirectionalStream.Callback> callbackCaptor = ArgumentCaptor.forClass(BidirectionalStream.Callback.class);
verify(factory).newBidirectionalStreamBuilder(isA(String.class), callbackCaptor.capture(), isA(Executor.class));
BidirectionalStream.Callback callback = callbackCaptor.getValue();
// Receive response header
UrlResponseInfo info = new UrlResponseInfoImpl(new ArrayList<>(), 200, "", responseHeader("200"), false, "", "", 0);
callback.onResponseHeadersReceived(cronetStream, info);
// Report trailer but not endOfStream.
((CronetClientStream.BidirectionalStreamCallback) callback).processTrailers(trailers(0));
CronetException exception = mock(CronetException.class);
callback.onFailed(cronetStream, info, exception);
verify(transport).finishStream(eq(clientStream), isA(Status.class));
// finishStream calls transportReportStatus.
clientStream.transportState().transportReportStatus(Status.UNAVAILABLE, false, new Metadata());
ArgumentCaptor<Status> statusCaptor = ArgumentCaptor.forClass(Status.class);
verify(clientListener).closed(statusCaptor.capture(), isA(RpcProgress.class), isA(Metadata.class));
Status status = statusCaptor.getValue();
// Stream has already finished so OK status should be reported.
assertEquals(Status.UNAVAILABLE.getCode(), status.getCode());
}
use of org.chromium.net.impl.UrlResponseInfoImpl in project grpc-java by grpc.
the class CronetClientStreamTest method read.
@Test
public void read() {
ArgumentCaptor<BidirectionalStream.Callback> callbackCaptor = ArgumentCaptor.forClass(BidirectionalStream.Callback.class);
verify(factory).newBidirectionalStreamBuilder(isA(String.class), callbackCaptor.capture(), isA(Executor.class));
BidirectionalStream.Callback callback = callbackCaptor.getValue();
// Read is not called until we receive the response header.
verify(cronetStream, times(0)).read(isA(ByteBuffer.class));
UrlResponseInfo info = new UrlResponseInfoImpl(new ArrayList<>(), 200, "", responseHeader("200"), false, "", "", 0);
callback.onResponseHeadersReceived(cronetStream, info);
verify(cronetStream, times(1)).read(isA(ByteBuffer.class));
ArgumentCaptor<Metadata> metadataCaptor = ArgumentCaptor.forClass(Metadata.class);
verify(clientListener).headersRead(metadataCaptor.capture());
// Verify recevied headers.
Metadata metadata = metadataCaptor.getValue();
assertEquals("application/grpc", metadata.get(Metadata.Key.of("content-type", Metadata.ASCII_STRING_MARSHALLER)));
assertEquals("test-value", metadata.get(Metadata.Key.of("test-key", Metadata.ASCII_STRING_MARSHALLER)));
callback.onReadCompleted(cronetStream, info, createMessageFrame(new String("response1").getBytes(Charset.forName("UTF-8"))), false);
// Haven't request any message, so no callback is called here.
verify(clientListener, times(0)).messagesAvailable(isA(MessageProducer.class));
verify(cronetStream, times(1)).read(isA(ByteBuffer.class));
// Request one message
clientStream.request(1);
verify(clientListener, times(1)).messagesAvailable(isA(MessageProducer.class));
verify(cronetStream, times(2)).read(isA(ByteBuffer.class));
// BidirectionalStream.read will not be called again after receiving endOfStream(empty buffer).
clientStream.request(1);
callback.onReadCompleted(cronetStream, info, ByteBuffer.allocate(0), true);
verify(clientListener, times(1)).messagesAvailable(isA(MessageProducer.class));
verify(cronetStream, times(2)).read(isA(ByteBuffer.class));
}
Aggregations