okhttp: Remove finished stream even if a pending stream was started · grpc/grpc-java@d21fe32

@@ -2080,6 +2080,26 @@ public void shutdownNow_streamListenerRpcProgress() throws Exception {

20802080

assertEquals(MISCARRIED, listener3.rpcProgress);

20812081

}

208220822083+

@Test

2084+

public void finishedStreamRemovedFromInUseState() throws Exception {

2085+

initTransport();

2086+

setMaxConcurrentStreams(1);

2087+

final MockStreamListener listener = new MockStreamListener();

2088+

OkHttpClientStream stream =

2089+

clientTransport.newStream(method, new Metadata(), CallOptions.DEFAULT, tracers);

2090+

stream.start(listener);

2091+

OkHttpClientStream pendingStream =

2092+

clientTransport.newStream(method, new Metadata(), CallOptions.DEFAULT, tracers);

2093+

pendingStream.start(listener);

2094+

waitForStreamPending(1);

2095+

clientTransport.finishStream(stream.transportState().id(), Status.OK, PROCESSED,

2096+

false, null, null);

2097+

verify(transportListener).transportInUse(true);

2098+

clientTransport.finishStream(pendingStream.transportState().id(), Status.OK, PROCESSED,

2099+

false, null, null);

2100+

verify(transportListener).transportInUse(false);

2101+

}

2102+20832103

private int activeStreamCount() {

20842104

return clientTransport.getActiveStreams().length;

20852105

}