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

Unified Diff: components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/CronetUrlTest.java

Issue 743713002: Cronet Fix Channel Write after Close when request is canceled after success. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address Matt's comments. Created 6 years 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/cronet_test_apk/CronetUrlTest.java
diff --git a/components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/CronetUrlTest.java b/components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/CronetUrlTest.java
index 8cc6313a1ff2151de14f0e9c2d79c1a8f98cad6a..d25f3253bf06d68597ac0da250f8e4807474c816 100644
--- a/components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/CronetUrlTest.java
+++ b/components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/CronetUrlTest.java
@@ -4,15 +4,20 @@
package org.chromium.cronet_test_apk;
+import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.SmallTest;
import org.chromium.base.PathUtils;
import org.chromium.base.test.util.Feature;
+import org.chromium.net.ChunkedWritableByteChannel;
import org.chromium.net.HttpUrlRequest;
import org.chromium.net.HttpUrlRequestFactoryConfig;
import java.io.File;
+import java.io.IOException;
+import java.nio.ByteBuffer;
import java.util.HashMap;
+import java.util.concurrent.Executors;
/**
* Example test that just starts the cronet sample.
@@ -244,4 +249,60 @@ public class CronetUrlTest extends CronetTestBase {
// ignored.
assertEquals(0, listener.mResponseAsBytes.length);
}
+
+ static class TestByteChannel extends ChunkedWritableByteChannel {
xunjieli 2014/12/04 15:21:56 Maybe a java doc here saying that TestByteChannel
mef 2014/12/05 23:25:07 Done.
+ boolean mIsOpen = true;
+
+ @Override
+ public int write(ByteBuffer byteBuffer) throws IOException {
+ assertTrue(isOpen());
+ return super.write(byteBuffer);
+ }
+
+ @Override
+ public void close() {
+ assertTrue(isOpen());
+ mIsOpen = false;
+ super.close();
+ }
+
+ @Override
+ public boolean isOpen() {
+ return mIsOpen;
+ }
+ }
+
+ @LargeTest
+ @Feature({"Cronet"})
+ public void testWriteAfterCancel() throws Exception {
+ CronetTestActivity activity = launchCronetTestAppWithUrl(URL);
+
+ // Make sure the activity was created as expected.
xunjieli 2014/12/04 15:21:56 nit: I think this is a stale comment. The null che
mef 2014/12/05 23:25:07 Done.
mef 2014/12/05 23:25:07 Done.
+ waitForActiveShellToBeDoneLoading();
+
+ // This test verifies that WritableByteChannel.write is not called after
+ // WritableByteChannel.close if if request is canceled from another
+ // thread.
+ for (int i = 0; i < 100; ++i) {
+ HashMap<String, String> headers = new HashMap<String, String>();
+ TestByteChannel channel = new TestByteChannel();
+ TestHttpUrlRequestListener listener =
+ new TestHttpUrlRequestListener();
+
+ // Create request.
+ final HttpUrlRequest request =
+ activity.mRequestFactory.createRequest(
+ URL, HttpUrlRequest.REQUEST_PRIORITY_LOW, headers,
xunjieli 2014/12/04 15:21:56 I wonder if we should use a url with actual respon
mef 2014/12/05 23:25:07 http://127.0.0.1:8000 gives a response body, but p
+ channel, listener);
+ request.start();
+ listener.blockForStart();
+ Runnable cancelTask = new Runnable() {
+ public void run() {
+ request.cancel();
+ }
+ };
+ Executors.newCachedThreadPool().execute(cancelTask);
+ listener.blockForComplete();
+ }
+ }
}

Powered by Google App Engine
This is Rietveld 408576698