Chromium Code Reviews| 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(); |
| + } |
| + } |
| } |