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 {
20802080assertEquals(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+20832103private int activeStreamCount() {
20842104return clientTransport.getActiveStreams().length;
20852105 }