Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(191)

Unified Diff: components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java

Issue 2697833003: [Cronet] Add isDone() check in CronetBidirectionalStream#onWritevCompleted (Closed)
Patch Set: address comments Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java
index cd0f40a06b5b64ca3a81e415f4cc095fc9262c75..ec3de1a9e951327d75a87bd9b0674ddc3a214b18 100644
--- a/components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java
@@ -400,6 +400,55 @@ public class BidirectionalStreamTest extends CronetTestBase {
@SmallTest
@Feature({"Cronet"})
@OnlyRunNativeCronet
+ // Regression test for crbug.com/692168. This test is racy, but it should catch the regression
+ // sometimes.
+ public void testCancelWhileWriteDataPending() throws Exception {
+ String url = Http2TestServer.getEchoStreamUrl();
+ TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCallback() {
+ // Number of onWriteCompleted callbacks that have been invoked.
+ private int mNumWriteCompleted = 0;
+ @Override
+ public void onWriteCompleted(BidirectionalStream stream, UrlResponseInfo info,
+ ByteBuffer buffer, boolean endOfStream) {
+ mNumWriteCompleted++;
+ super.onWriteCompleted(stream, info, buffer, endOfStream);
+ assertTrue(mNumWriteCompleted <= 2);
+ // Cancel in the second write callback to get a better chance of catching the race.
+ if (mNumWriteCompleted == 2) {
+ stream.cancel();
+ }
+ }
+ };
+ byte[] dummyString = "dummy".getBytes();
+ callback.addWriteData(dummyString, true);
+ callback.addWriteData(dummyString, false);
+ callback.addWriteData(dummyString, true);
+ callback.addWriteData(dummyString, false);
+ callback.addWriteData(dummyString, false);
+ callback.addWriteData(dummyString, false);
+ callback.addWriteData(dummyString, true);
+ callback.addWriteData(dummyString, false);
+ callback.addWriteData(dummyString, true);
+ callback.addWriteData(dummyString, false);
+ CronetBidirectionalStream stream =
+ (CronetBidirectionalStream) mTestFramework.mCronetEngine
+ .newBidirectionalStreamBuilder(url, callback, callback.getExecutor())
+ .build();
+ callback.setAutoAdvance(false);
+ stream.start();
+ callback.waitForNextWriteStep(); // onStreamReady
+ // Write 1 and flush().
+ callback.startNextWrite(stream);
+ // Write 2, 3 and flush(). 2 and 3 are in the flush queue.
+ callback.startNextWrite(stream);
+ callback.setAutoAdvance(true);
+ callback.blockForDone();
+ assertTrue(callback.mOnCanceledCalled);
+ }
+
+ @SmallTest
+ @Feature({"Cronet"})
+ @OnlyRunNativeCronet
public void testSimpleGetWithFlush() throws Exception {
// TODO(xunjieli): Use ParameterizedTest instead of the loop.
for (int i = 0; i < 2; i++) {

Powered by Google App Engine
This is Rietveld 408576698