Index: components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetBufferedOutputStreamTest.java |
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetBufferedOutputStreamTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetBufferedOutputStreamTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..79fd319ca86e1a1f023195c16c5dd74aa2628a92 |
--- /dev/null |
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetBufferedOutputStreamTest.java |
@@ -0,0 +1,112 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.net.urlconnection; |
+ |
+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.NativeTestServer; |
+import org.chromium.net.UploadDataSink; |
+import org.chromium.net.UrlRequestContext; |
+ |
+import java.net.URL; |
+import java.nio.ByteBuffer; |
+import java.util.Arrays; |
+ |
+/** |
+ * Tests the CronetBufferedOutputStream implementation. |
+ */ |
+public class CronetBufferedOutputStreamTest extends CronetTestBase { |
+ private CronetTestActivity mActivity; |
+ private UrlRequestContext mUrlRequestContext; |
+ private static final String UPLOAD_DATA = "some upload data!"; |
+ |
+ @Override |
+ protected void setUp() throws Exception { |
+ super.setUp(); |
+ mActivity = launchCronetTestApp(); |
+ mUrlRequestContext = mActivity.mUrlRequestContext; |
+ assertTrue(NativeTestServer.startNativeTestServer( |
+ getInstrumentation().getTargetContext())); |
+ } |
+ |
+ @Override |
+ protected void tearDown() throws Exception { |
+ NativeTestServer.shutdownNativeTestServer(); |
+ super.tearDown(); |
+ } |
+ |
+ /** |
+ * Tests that if caller writes more than the content length provided, |
+ * an exception should occur. |
+ */ |
+ @SmallTest |
+ @Feature({"Cronet"}) |
+ public void testWriteBufferOutOfBound() throws Exception { |
+ URL url = new URL(NativeTestServer.getEchoBodyURL()); |
+ CronetHttpURLConnection conn = new CronetHttpURLConnection(url, |
+ mUrlRequestContext); |
+ byte[] data = UPLOAD_DATA.getBytes("UTF8"); |
+ // Set a content length that is 1 byte shorter. |
+ CronetBufferedOutputStream out = |
+ new CronetBufferedOutputStream(conn, data.length - 1); |
+ try { |
+ out.write(data); |
+ fail(); |
+ } catch (IllegalStateException e) { |
+ assertEquals("Writing out of bound.", e.getMessage()); |
+ } |
+ } |
+ |
+ /** |
+ * Tests that {@link CronetBufferedOutputStream} supports rewind. |
+ */ |
+ @SmallTest |
+ @Feature({"Cronet"}) |
+ public void testRewind() throws Exception { |
+ URL url = new URL(NativeTestServer.getEchoBodyURL()); |
+ CronetHttpURLConnection conn = new CronetHttpURLConnection(url, |
+ mUrlRequestContext); |
+ byte[] data = UPLOAD_DATA.getBytes("UTF8"); |
+ CronetBufferedOutputStream out = |
+ new CronetBufferedOutputStream(conn, data.length); |
+ out.write(data); |
+ TestUploadDataSink sink = new TestUploadDataSink(); |
+ out.rewind(sink); |
+ assertTrue(sink.mRewindSucceededCalled); |
+ ByteBuffer byteBuffer = ByteBuffer.allocate(data.length); |
+ out.read(sink, byteBuffer); |
+ assertTrue(sink.mReadSucceededCalled); |
+ assertTrue(Arrays.equals(data, byteBuffer.array())); |
+ } |
+ |
+ private static class TestUploadDataSink implements UploadDataSink { |
+ boolean mReadSucceededCalled = false; |
+ boolean mRewindSucceededCalled = false; |
+ |
+ @Override |
+ public void onReadSucceeded(boolean finalChunk) { |
+ mReadSucceededCalled = true; |
+ } |
+ |
+ @Override |
+ public void onReadError(Exception exception) { |
+ // Left blank. |
+ } |
+ |
+ @Override |
+ public void onRewindSucceeded() { |
+ mRewindSucceededCalled = true; |
+ } |
+ |
+ @Override |
+ public void onRewindError(Exception e) { |
+ // Left blank. |
+ } |
+ } |
+} |