mirror of https://github.com/grpc/grpc-java.git
Update test to demonstrate that pending streams will not be started if the transport is in goAway status.
This commit is contained in:
parent
d2929cd1a3
commit
b42122b035
|
|
@ -284,6 +284,8 @@ class OkHttpClientTransport implements ClientTransport {
|
|||
private boolean startPendingStreams() {
|
||||
boolean hasStreamStarted = false;
|
||||
synchronized (lock) {
|
||||
// No need to check goAway since the pendingStreams will be cleared when goAway
|
||||
// becomes true.
|
||||
while (!pendingStreams.isEmpty() && streams.size() < maxConcurrentStreams) {
|
||||
OkHttpClientStream stream = pendingStreams.poll();
|
||||
startStream(stream);
|
||||
|
|
|
|||
|
|
@ -660,19 +660,26 @@ public class OkHttpClientTransportTest {
|
|||
@Test
|
||||
public void pendingStreamFailedByGoAway() throws Exception {
|
||||
initTransport();
|
||||
setMaxConcurrentStreams(0);
|
||||
final MockStreamListener listener = new MockStreamListener();
|
||||
final CountDownLatch newStreamReturn = new CountDownLatch(1);
|
||||
// The stream should be pending.
|
||||
clientTransport.newStream(method, new Metadata.Headers(), listener);
|
||||
newStreamReturn.countDown();
|
||||
setMaxConcurrentStreams(1);
|
||||
final MockStreamListener listener1 = new MockStreamListener();
|
||||
final MockStreamListener listener2 = new MockStreamListener();
|
||||
clientTransport.newStream(method, new Metadata.Headers(), listener1);
|
||||
// The second stream should be pending.
|
||||
clientTransport.newStream(method, new Metadata.Headers(), listener2);
|
||||
|
||||
waitForStreamPending(1);
|
||||
assertEquals(1, activeStreamCount());
|
||||
|
||||
frameHandler().goAway(0, ErrorCode.CANCEL, null);
|
||||
// Receives GO_AWAY.
|
||||
frameHandler().goAway(99, ErrorCode.CANCEL, null);
|
||||
|
||||
listener.waitUntilStreamClosed();
|
||||
assertEquals(Status.CANCELLED.getCode(), listener.status.getCode());
|
||||
listener2.waitUntilStreamClosed();
|
||||
assertEquals(Status.CANCELLED.getCode(), listener2.status.getCode());
|
||||
assertEquals(0, clientTransport.getPendingStreamSize());
|
||||
|
||||
// active stream should not be affected.
|
||||
assertEquals(1, activeStreamCount());
|
||||
getStream(3).sendCancel(Status.CANCELLED);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -680,10 +687,8 @@ public class OkHttpClientTransportTest {
|
|||
initTransport();
|
||||
setMaxConcurrentStreams(0);
|
||||
final MockStreamListener listener = new MockStreamListener();
|
||||
final CountDownLatch newStreamReturn = new CountDownLatch(1);
|
||||
// The second stream should be pending.
|
||||
clientTransport.newStream(method, new Metadata.Headers(), listener);
|
||||
newStreamReturn.countDown();
|
||||
waitForStreamPending(1);
|
||||
|
||||
clientTransport.shutdown();
|
||||
|
|
|
|||
Loading…
Reference in New Issue