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

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

Issue 972213002: [Cronet] Implement batch read in CronetInputStream (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix findbug warning Created 5 years, 9 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
« no previous file with comments | « components/cronet/android/java/src/org/chromium/net/urlconnection/CronetInputStream.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..e5e5e5db01f072d70cc91c73a015fe5d6adda205 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;
@@ -434,8 +435,9 @@ public class CronetHttpURLConnectionTest extends CronetTestBase {
@SmallTest
@Feature({"Cronet"})
@CompareDefaultWithCronet
- public void testInputStreamReadOneByte() throws Exception {
- String testInputString = "this is a really long header";
+ public void testInputStreamBatchReadBoundaryConditions() throws Exception {
+ String testInputString = "this is a very important header";
+ byte[] testInputBytes = testInputString.getBytes();
URL url = new URL(NativeTestServer.getEchoHeaderURL("foo"));
HttpURLConnection urlConnection =
(HttpURLConnection) url.openConnection();
@@ -443,14 +445,60 @@ public class CronetHttpURLConnectionTest extends CronetTestBase {
assertEquals(200, urlConnection.getResponseCode());
assertEquals("OK", urlConnection.getResponseMessage());
InputStream in = urlConnection.getInputStream();
+ try {
+ // Negative byteOffset.
+ int r = in.read(new byte[10], -1, 1);
+ fail();
+ } catch (IndexOutOfBoundsException e) {
+ // Expected.
+ }
+ try {
+ // Negative byteCount.
+ int r = in.read(new byte[10], 1, -1);
+ fail();
+ } catch (IndexOutOfBoundsException e) {
+ // Expected.
+ }
+ try {
+ // Read more than what buffer can hold.
+ int r = in.read(new byte[10], 0, 11);
+ fail();
+ } catch (IndexOutOfBoundsException e) {
+ // Expected.
+ }
+ urlConnection.disconnect();
+ }
+
+ @SmallTest
+ @Feature({"Cronet"})
+ @OnlyRunCronetHttpURLConnection
+ public void testInputStreamReadOneByte() throws Exception {
+ String data = "MyBigFunkyData";
+ int dataLength = data.length();
+ int repeatCount = 100000;
+ MockUrlRequestJobFactory mockUrlRequestJobFactory = new MockUrlRequestJobFactory(
+ getInstrumentation().getTargetContext());
+ URL url = new URL(mockUrlRequestJobFactory.getMockUrlForData(data,
+ repeatCount));
+ HttpURLConnection connection =
+ (HttpURLConnection) url.openConnection();
+ InputStream in = connection.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
int b;
while ((b = in.read()) != -1) {
out.write(b);
}
- urlConnection.disconnect();
- assertTrue(Arrays.equals(
- testInputString.getBytes(), out.toByteArray()));
+
+ // All data has been read. Try reading beyond what is available should give -1.
+ assertEquals(-1, in.read());
+ String responseData = new String(out.toByteArray());
+ 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
@@ -468,14 +516,61 @@ public class CronetHttpURLConnectionTest extends CronetTestBase {
InputStream in = urlConnection.getInputStream();
byte[] actualOutput = new byte[testInputBytes.length + 256];
int bytesRead = in.read(actualOutput, 0, actualOutput.length);
+ assertEquals(testInputBytes.length, bytesRead);
byte[] readSomeMore = new byte[10];
int bytesReadBeyondAvailable = in.read(readSomeMore, 0, 10);
- urlConnection.disconnect();
- assertEquals(testInputBytes.length, bytesRead);
assertEquals(-1, bytesReadBeyondAvailable);
for (int i = 0; i < bytesRead; i++) {
assertEquals(testInputBytes[i], actualOutput[i]);
}
+ urlConnection.disconnect();
+ }
+
+ /**
+ * 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 mockUrlRequestJobFactory = new MockUrlRequestJobFactory(
+ getInstrumentation().getTargetContext());
+ URL url = new URL(mockUrlRequestJobFactory.getMockUrlForData(data,
+ repeatCount));
+ HttpURLConnection connection =
+ (HttpURLConnection) url.openConnection();
+ InputStream in = connection.getInputStream();
+ byte[] actualOutput = new byte[dataLength * repeatCount];
+ 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
« no previous file with comments | « components/cronet/android/java/src/org/chromium/net/urlconnection/CronetInputStream.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698