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 5ede19a65c84a27fc38ce59c8d5aada676c7d54e..0555e262113afc6b0cfca09acdc2d3001e9244da 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,14 +4,19 @@ |
| package org.chromium.cronet_test_apk; |
| +import android.test.suitebuilder.annotation.LargeTest; |
| import android.test.suitebuilder.annotation.SmallTest; |
| 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. |
| @@ -245,4 +250,60 @@ public class CronetUrlTest extends CronetTestBase { |
| // ignored. |
| assertEquals(0, listener.mResponseAsBytes.length); |
| } |
| + |
| + static class TestByteChannel extends ChunkedWritableByteChannel { |
|
miloslav
2014/11/26 10:44:35
Instances of this class should never be accessed f
mef
2014/11/26 14:06:21
Yes, in old API all operations with this channel a
|
| + 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. |
| + 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, |
| + channel, listener); |
| + request.start(); |
| + listener.blockForStarted(); |
| + Runnable cancelTask = new Runnable() { |
| + public void run() { |
| + request.cancel(); |
| + } |
| + }; |
| + Executors.newCachedThreadPool().execute(cancelTask); |
| + listener.blockForComplete(); |
| + } |
| + } |
| } |