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..39165022390c643742b24d602bc7f5d1a3806c51 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 |
@@ -18,6 +18,7 @@ import java.io.ByteArrayOutputStream; |
import java.io.FileNotFoundException; |
import java.io.IOException; |
import java.io.InputStream; |
+import java.io.OutputStream; |
import java.net.HttpURLConnection; |
import java.net.MalformedURLException; |
import java.net.URL; |
@@ -37,6 +38,10 @@ import java.util.regex.Pattern; |
* See {@link CronetTestBase#runTest()} for details. |
*/ |
public class CronetHttpURLConnectionTest extends CronetTestBase { |
+ private static final String UPLOAD_DATA_STRING = "Nifty upload data!"; |
+ private static final byte[] UPLOAD_DATA = UPLOAD_DATA_STRING.getBytes(); |
+ private static final int REPEAT_COUNT = 100000; |
+ |
private CronetTestActivity mActivity; |
@Override |
@@ -76,6 +81,191 @@ public class CronetHttpURLConnectionTest extends CronetTestBase { |
@SmallTest |
@Feature({"Cronet"}) |
@CompareDefaultWithCronet |
+ public void testPostAfterConnectionMade() throws Exception { |
+ URL url = new URL(NativeTestServer.getEchoBodyURL()); |
+ HttpURLConnection connection = |
+ (HttpURLConnection) url.openConnection(); |
+ connection.setDoOutput(true); |
+ connection.setRequestMethod("POST"); |
+ assertEquals(200, connection.getResponseCode()); |
+ |
+ try { |
+ connection.getOutputStream(); |
+ fail(); |
+ } catch (java.net.ProtocolException e) { |
+ // Expected. |
+ } |
+ } |
+ |
+ @SmallTest |
+ @Feature({"Cronet"}) |
+ @CompareDefaultWithCronet |
+ public void testPostFixedLengthStreamingMode() throws Exception { |
+ URL url = new URL(NativeTestServer.getEchoBodyURL()); |
+ HttpURLConnection connection = |
+ (HttpURLConnection) url.openConnection(); |
+ connection.setDoOutput(true); |
+ connection.setRequestMethod("POST"); |
+ connection.setFixedLengthStreamingMode(UPLOAD_DATA.length); |
+ OutputStream out = connection.getOutputStream(); |
+ out.write(UPLOAD_DATA); |
+ assertEquals(200, connection.getResponseCode()); |
+ assertEquals("OK", connection.getResponseMessage()); |
+ assertEquals(UPLOAD_DATA_STRING, getResponseAsString(connection)); |
+ connection.disconnect(); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"Cronet"}) |
+ @CompareDefaultWithCronet |
+ public void testPostFixedLengthStreamingModeWriteOneByte() throws Exception { |
+ URL url = new URL(NativeTestServer.getEchoBodyURL()); |
+ HttpURLConnection connection = |
+ (HttpURLConnection) url.openConnection(); |
+ connection.setDoOutput(true); |
+ connection.setRequestMethod("POST"); |
+ connection.setFixedLengthStreamingMode(UPLOAD_DATA.length); |
+ OutputStream out = connection.getOutputStream(); |
+ for (int i = 0; i < UPLOAD_DATA.length; i++) { |
+ // Write one byte at a time. |
+ out.write(UPLOAD_DATA[i]); |
+ } |
+ assertEquals(200, connection.getResponseCode()); |
+ assertEquals("OK", connection.getResponseMessage()); |
+ assertEquals(UPLOAD_DATA_STRING, getResponseAsString(connection)); |
+ connection.disconnect(); |
+ } |
+ |
+ /** |
+ * Helper function to check whether {@code data} is a concatenation of |
+ * {@code REPEAT_COUNT} {@code UPLOAD_DATA_STRING} strings. |
+ */ |
+ private void checkLargeData(String data) { |
+ for (int i = 0; i < REPEAT_COUNT; i++) { |
+ assertEquals(UPLOAD_DATA_STRING, data.substring( |
+ UPLOAD_DATA_STRING.length() * i, UPLOAD_DATA_STRING.length() * (i + 1))); |
+ } |
+ } |
+ |
+ @SmallTest |
+ @Feature({"Cronet"}) |
+ @CompareDefaultWithCronet |
+ public void testPostFixedLengthStreamingModeLargeData() throws Exception { |
+ URL url = new URL(NativeTestServer.getEchoBodyURL()); |
+ HttpURLConnection connection = |
+ (HttpURLConnection) url.openConnection(); |
+ connection.setDoOutput(true); |
+ connection.setRequestMethod("POST"); |
+ byte[] largeData = new byte[REPEAT_COUNT * UPLOAD_DATA.length]; |
+ for (int i = 0; i < REPEAT_COUNT; i++) { |
+ for (int j = 0; j < UPLOAD_DATA.length; j++) { |
+ largeData[i * UPLOAD_DATA.length + j] = UPLOAD_DATA[j]; |
+ } |
+ } |
+ connection.setFixedLengthStreamingMode(UPLOAD_DATA.length * REPEAT_COUNT); |
+ OutputStream out = connection.getOutputStream(); |
+ int totalBytesWritten = 0; |
+ // Number of bytes to write each time. It is incremented by one from 0. |
+ int bytesToWrite = 0; |
+ while (totalBytesWritten < largeData.length) { |
+ if (bytesToWrite > largeData.length - totalBytesWritten) { |
+ // Do not write out of bound. |
+ bytesToWrite = largeData.length - totalBytesWritten; |
+ } |
+ out.write(largeData, totalBytesWritten, bytesToWrite); |
+ totalBytesWritten += bytesToWrite; |
+ bytesToWrite++; |
+ } |
+ assertEquals(200, connection.getResponseCode()); |
+ assertEquals("OK", connection.getResponseMessage()); |
+ checkLargeData(getResponseAsString(connection)); |
+ connection.disconnect(); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"Cronet"}) |
+ @CompareDefaultWithCronet |
+ public void testPostFixedLengthStreamingModeLargeDataWriteOneByte() |
+ throws Exception { |
+ URL url = new URL(NativeTestServer.getEchoBodyURL()); |
+ HttpURLConnection connection = |
+ (HttpURLConnection) url.openConnection(); |
+ connection.setDoOutput(true); |
+ connection.setRequestMethod("POST"); |
+ connection.setFixedLengthStreamingMode(UPLOAD_DATA.length * REPEAT_COUNT); |
+ OutputStream out = connection.getOutputStream(); |
+ for (int i = 0; i < REPEAT_COUNT; i++) { |
+ for (int j = 0; j < UPLOAD_DATA.length; j++) { |
+ // Write one byte at a time. |
+ out.write(UPLOAD_DATA[j]); |
+ } |
+ } |
+ assertEquals(200, connection.getResponseCode()); |
+ assertEquals("OK", connection.getResponseMessage()); |
+ checkLargeData(getResponseAsString(connection)); |
+ connection.disconnect(); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"Cronet"}) |
+ @CompareDefaultWithCronet |
+ public void testPostWithContentLength() throws Exception { |
+ URL url = new URL(NativeTestServer.getEchoBodyURL()); |
+ HttpURLConnection connection = |
+ (HttpURLConnection) url.openConnection(); |
+ connection.setDoOutput(true); |
+ connection.setRequestMethod("POST"); |
+ connection.setRequestProperty("Content-Length", |
+ Integer.toString(UPLOAD_DATA.length * REPEAT_COUNT)); |
+ OutputStream out = connection.getOutputStream(); |
+ for (int i = 0; i < REPEAT_COUNT; i++) { |
+ out.write(UPLOAD_DATA); |
+ } |
+ assertEquals(200, connection.getResponseCode()); |
+ assertEquals("OK", connection.getResponseMessage()); |
+ checkLargeData(getResponseAsString(connection)); |
+ connection.disconnect(); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"Cronet"}) |
+ @CompareDefaultWithCronet |
+ public void testPostWithoutContentLength() throws Exception { |
+ URL url = new URL(NativeTestServer.getEchoBodyURL()); |
+ HttpURLConnection connection = |
+ (HttpURLConnection) url.openConnection(); |
+ connection.setDoOutput(true); |
+ connection.setRequestMethod("POST"); |
+ OutputStream out = connection.getOutputStream(); |
+ for (int i = 0; i < REPEAT_COUNT; i++) { |
+ out.write(UPLOAD_DATA); |
+ } |
+ assertEquals(200, connection.getResponseCode()); |
+ assertEquals("OK", connection.getResponseMessage()); |
+ checkLargeData(getResponseAsString(connection)); |
+ connection.disconnect(); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"Cronet"}) |
+ @OnlyRunCronetHttpURLConnection |
+ // TODO(xunjieli): Change the test after chunked support is added. |
+ public void testPostChunked() throws Exception { |
+ URL url = new URL(NativeTestServer.getEchoBodyURL()); |
+ HttpURLConnection connection = |
+ (HttpURLConnection) url.openConnection(); |
+ connection.setDoOutput(true); |
+ connection.setRequestMethod("POST"); |
+ try { |
+ connection.setChunkedStreamingMode(0); |
+ } catch (UnsupportedOperationException e) { |
+ assertEquals("Chunked mode not supported yet", e.getMessage()); |
+ } |
+ } |
+ |
+ @SmallTest |
+ @Feature({"Cronet"}) |
+ @CompareDefaultWithCronet |
public void testNotFoundURLRequest() throws Exception { |
URL url = new URL(NativeTestServer.getFileURL("/notfound.html")); |
HttpURLConnection urlConnection = |