Chromium Code Reviews| Index: components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java |
| diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java |
| index f4ff70cdb0c693ecf60c9f532007ec18eb8a7ffc..e288299dedfeb9646214e9f95b0770a15c02e3f3 100644 |
| --- a/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java |
| +++ b/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java |
| @@ -10,6 +10,7 @@ import android.test.suitebuilder.annotation.SmallTest; |
| import org.chromium.base.test.util.Feature; |
| import org.chromium.net.CronetTestActivity; |
| import org.chromium.net.CronetTestBase; |
| +import org.chromium.net.MockUrlRequestJobFactory; |
| import org.chromium.net.NativeTestServer; |
| import org.chromium.net.UrlRequestContextConfig; |
| import org.chromium.net.UrlRequestException; |
| @@ -478,6 +479,53 @@ public class CronetHttpURLConnectionTest extends CronetTestBase { |
| } |
| } |
| + /** |
| + * Tests batch reading on CronetInputStream when |
| + * {@link CronetHttpURLConnection#getMoreData} is called multiple times. |
| + */ |
| + @SmallTest |
| + @Feature({"Cronet"}) |
| + @OnlyRunCronetHttpURLConnection |
| + public void testBigDataRead() throws Exception { |
| + String data = "MyBigFunkyData"; |
| + int dataLength = data.length(); |
| + int repeatCount = 100000; |
| + MockUrlRequestJobFactory mMockUrlRequestJobFactory = new MockUrlRequestJobFactory( |
| + getInstrumentation().getTargetContext()); |
| + URL url = new URL(mMockUrlRequestJobFactory.getMockUrlForData(data, |
| + repeatCount)); |
| + HttpURLConnection connection = |
| + (HttpURLConnection) url.openConnection(); |
| + InputStream in = connection.getInputStream(); |
| + byte[] actualOutput = new byte[dataLength * repeatCount]; |
|
mmenke
2015/03/05 21:42:21
Suggest another test where we only have X body byt
xunjieli
2015/03/06 15:21:23
Is this the same as testInputStreamReadMoreBytesTh
mmenke
2015/03/06 16:42:16
Oops. Yea, it is.
|
| + int totalBytesRead = 0; |
| + // Number of bytes to read each time. It is incremented by one from 0. |
| + int numBytesToRead = 0; |
| + while (totalBytesRead < actualOutput.length) { |
| + if (actualOutput.length - totalBytesRead < numBytesToRead) { |
| + // Do not read out of bound. |
| + numBytesToRead = actualOutput.length - totalBytesRead; |
| + } |
| + int bytesRead = in.read(actualOutput, totalBytesRead, numBytesToRead); |
| + assertTrue(bytesRead <= numBytesToRead); |
| + totalBytesRead += bytesRead; |
| + numBytesToRead++; |
| + } |
| + |
| + // All data has been read. Try reading beyond what is available should give -1. |
| + assertEquals(0, in.read(actualOutput, 0, 0)); |
| + assertEquals(-1, in.read(actualOutput, 0, 1)); |
| + |
| + String responseData = new String(actualOutput); |
| + for (int i = 0; i < repeatCount; ++i) { |
| + assertEquals(data, responseData.substring(dataLength * i, |
| + dataLength * (i + 1))); |
| + } |
| + // TODO(xunjieli): Enable after crbug.com/463720 is fixed. |
| + // assertEquals(200, connection.getResponseCode()); |
| + // assertEquals("OK", connection.getResponseMessage()); |
| + } |
| + |
| @SmallTest |
| @Feature({"Cronet"}) |
| @CompareDefaultWithCronet |