diff options
author | Jesse Wilson <jessewilson@google.com> | 2011-05-19 18:44:47 -0700 |
---|---|---|
committer | Jesse Wilson <jessewilson@google.com> | 2011-05-19 18:44:47 -0700 |
commit | ec6163ceac64902ccde3259e8a426f0f9ad6a88c (patch) | |
tree | 67ed11777135e3407a98f78871333d49530f0292 | |
parent | ae01ebf69d7d2e38eb66c40e0ebacd3b118acfc7 (diff) | |
download | libcore-ec6163ceac64902ccde3259e8a426f0f9ad6a88c.zip libcore-ec6163ceac64902ccde3259e8a426f0f9ad6a88c.tar.gz libcore-ec6163ceac64902ccde3259e8a426f0f9ad6a88c.tar.bz2 |
Add test cases inspired by Jetty-dependent Harmony tests.
Change-Id: Id8288e0524b64255c5d9808d3f5582708211d96b
-rw-r--r-- | luni/src/test/java/libcore/java/net/URLConnectionTest.java | 256 |
1 files changed, 252 insertions, 4 deletions
diff --git a/luni/src/test/java/libcore/java/net/URLConnectionTest.java b/luni/src/test/java/libcore/java/net/URLConnectionTest.java index 5d3dcca..6393e02 100644 --- a/luni/src/test/java/libcore/java/net/URLConnectionTest.java +++ b/luni/src/test/java/libcore/java/net/URLConnectionTest.java @@ -57,6 +57,7 @@ import javax.net.ssl.SSLSession; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; +import junit.framework.TestCase; import libcore.java.security.TestKeyStore; import libcore.javax.net.ssl.TestSSLContext; import tests.http.MockResponse; @@ -69,7 +70,7 @@ import static tests.http.SocketPolicy.SHUTDOWN_INPUT_AT_END; import static tests.http.SocketPolicy.SHUTDOWN_OUTPUT_AT_END; import tests.net.StuckServer; -public class URLConnectionTest extends junit.framework.TestCase { +public final class URLConnectionTest extends TestCase { private static final Authenticator SIMPLE_AUTHENTICATOR = new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { @@ -108,8 +109,11 @@ public class URLConnectionTest extends junit.framework.TestCase { HttpURLConnection urlConnection = (HttpURLConnection) server.getUrl("/").openConnection(); urlConnection.addRequestProperty("D", "e"); urlConnection.addRequestProperty("D", "f"); + assertEquals("f", urlConnection.getRequestProperty("D")); + assertEquals("f", urlConnection.getRequestProperty("d")); Map<String, List<String>> requestHeaders = urlConnection.getRequestProperties(); assertEquals(newSet("e", "f"), new HashSet<String>(requestHeaders.get("D"))); + assertEquals(newSet("e", "f"), new HashSet<String>(requestHeaders.get("d"))); try { requestHeaders.put("G", Arrays.asList("h")); fail("Modified an unmodifiable view."); @@ -131,7 +135,9 @@ public class URLConnectionTest extends junit.framework.TestCase { } catch (NullPointerException expected) { } urlConnection.setRequestProperty("NullValue", null); // should fail silently! + assertNull(urlConnection.getRequestProperty("NullValue")); urlConnection.addRequestProperty("AnotherNullValue", null); // should fail silently! + assertNull(urlConnection.getRequestProperty("AnotherNullValue")); urlConnection.getResponseCode(); RecordedRequest request = server.takeRequest(); @@ -152,13 +158,27 @@ public class URLConnectionTest extends junit.framework.TestCase { fail("Set header after connect"); } catch (IllegalStateException expected) { } + try { + urlConnection.getRequestProperties(); + fail(); + } catch (IllegalStateException expected) { + } + } + + public void testGetRequestPropertyReturnsLastValue() throws Exception { + server.play(); + HttpURLConnection urlConnection = (HttpURLConnection) server.getUrl("/").openConnection(); + urlConnection.addRequestProperty("A", "value1"); + urlConnection.addRequestProperty("A", "value2"); + assertEquals("value2", urlConnection.getRequestProperty("A")); } public void testResponseHeaders() throws IOException, InterruptedException { server.enqueue(new MockResponse() .setStatus("HTTP/1.0 200 Fantastic") - .addHeader("A: b") .addHeader("A: c") + .addHeader("B: d") + .addHeader("A: e") .setChunkedBody("ABCDE\nFGHIJ\nKLMNO\nPQR", 8)); server.play(); @@ -168,17 +188,38 @@ public class URLConnectionTest extends junit.framework.TestCase { assertEquals("HTTP/1.0 200 Fantastic", urlConnection.getHeaderField(null)); Map<String, List<String>> responseHeaders = urlConnection.getHeaderFields(); assertEquals(Arrays.asList("HTTP/1.0 200 Fantastic"), responseHeaders.get(null)); - assertEquals(newSet("b", "c"), new HashSet<String>(responseHeaders.get("A"))); + assertEquals(newSet("c", "e"), new HashSet<String>(responseHeaders.get("A"))); + assertEquals(newSet("c", "e"), new HashSet<String>(responseHeaders.get("a"))); try { responseHeaders.put("N", Arrays.asList("o")); fail("Modified an unmodifiable view."); } catch (UnsupportedOperationException expected) { } try { - responseHeaders.get("A").add("d"); + responseHeaders.get("A").add("f"); fail("Modified an unmodifiable view."); } catch (UnsupportedOperationException expected) { } + assertEquals("A", urlConnection.getHeaderFieldKey(0)); + assertEquals("c", urlConnection.getHeaderField(0)); + assertEquals("B", urlConnection.getHeaderFieldKey(1)); + assertEquals("d", urlConnection.getHeaderField(1)); + assertEquals("A", urlConnection.getHeaderFieldKey(2)); + assertEquals("e", urlConnection.getHeaderField(2)); + } + + public void testGetErrorStreamOnSuccessfulRequest() throws Exception { + server.enqueue(new MockResponse().setBody("A")); + server.play(); + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + assertNull(connection.getErrorStream()); + } + + public void testGetErrorStreamOnUnsuccessfulRequest() throws Exception { + server.enqueue(new MockResponse().setResponseCode(404).setBody("A")); + server.play(); + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + assertEquals("A", readAscii(connection.getErrorStream(), Integer.MAX_VALUE)); } // Check that if we don't read to the end of a response, the next request on the @@ -919,6 +960,104 @@ public class URLConnectionTest extends junit.framework.TestCase { assertEquals(Arrays.toString(requestBody), Arrays.toString(request.getBody())); } + public void testSetValidRequestMethod() throws Exception { + server.play(); + assertValidRequestMethod("GET"); + assertValidRequestMethod("DELETE"); + assertValidRequestMethod("HEAD"); + assertValidRequestMethod("OPTIONS"); + assertValidRequestMethod("POST"); + assertValidRequestMethod("PUT"); + assertValidRequestMethod("TRACE"); + } + + private void assertValidRequestMethod(String requestMethod) throws Exception { + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + connection.setRequestMethod(requestMethod); + assertEquals(requestMethod, connection.getRequestMethod()); + } + + public void testSetInvalidRequestMethodLowercase() throws Exception { + server.play(); + assertInvalidRequestMethod("get"); + } + + public void testSetInvalidRequestMethodConnect() throws Exception { + server.play(); + assertInvalidRequestMethod("CONNECT"); + } + + private void assertInvalidRequestMethod(String requestMethod) throws Exception { + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + try { + connection.setRequestMethod(requestMethod); + fail(); + } catch (ProtocolException expected) { + } + } + + public void testCannotSetNegativeFixedLengthStreamingMode() throws Exception { + server.play(); + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + try { + connection.setFixedLengthStreamingMode(-2); + fail(); + } catch (IllegalArgumentException expected) { + } + } + + public void testCanSetNegativeChunkedStreamingMode() throws Exception { + server.play(); + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + connection.setChunkedStreamingMode(-2); + } + + public void testCannotSetFixedLengthStreamingModeAfterConnect() throws Exception { + server.enqueue(new MockResponse().setBody("A")); + server.play(); + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + assertEquals("A", readAscii(connection.getInputStream(), Integer.MAX_VALUE)); + try { + connection.setFixedLengthStreamingMode(1); + fail(); + } catch (IllegalStateException expected) { + } + } + + public void testCannotSetChunkedStreamingModeAfterConnect() throws Exception { + server.enqueue(new MockResponse().setBody("A")); + server.play(); + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + assertEquals("A", readAscii(connection.getInputStream(), Integer.MAX_VALUE)); + try { + connection.setChunkedStreamingMode(1); + fail(); + } catch (IllegalStateException expected) { + } + } + + public void testCannotSetFixedLengthStreamingModeAfterChunkedStreamingMode() throws Exception { + server.play(); + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + connection.setChunkedStreamingMode(1); + try { + connection.setFixedLengthStreamingMode(1); + fail(); + } catch (IllegalStateException expected) { + } + } + + public void testCannotSetChunkedStreamingModeAfterFixedLengthStreamingMode() throws Exception { + server.play(); + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + connection.setFixedLengthStreamingMode(1); + try { + connection.setChunkedStreamingMode(1); + fail(); + } catch (IllegalStateException expected) { + } + } + public void testSecureFixedLengthStreaming() throws Exception { testSecureStreamingPost(StreamingMode.FIXED_LENGTH); } @@ -1608,6 +1747,115 @@ public class URLConnectionTest extends junit.framework.TestCase { assertEquals(-1, in.read()); // throws IOException in Gingerbread } + public void testGetContent() throws Exception { + server.enqueue(new MockResponse().setBody("A")); + server.play(); + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + InputStream in = (InputStream) connection.getContent(); + assertEquals("A", readAscii(in, Integer.MAX_VALUE)); + } + + public void testGetContentOfType() throws Exception { + server.enqueue(new MockResponse().setBody("A")); + server.play(); + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + try { + connection.getContent(null); + fail(); + } catch (NullPointerException expected) { + } + try { + connection.getContent(new Class[] { null }); + fail(); + } catch (NullPointerException expected) { + } + assertNull(connection.getContent(new Class[] { getClass() })); + connection.disconnect(); + } + + public void testGetOutputStreamOnGetFails() throws Exception { + server.enqueue(new MockResponse()); + server.play(); + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + try { + connection.getOutputStream(); + fail(); + } catch (ProtocolException expected) { + } + } + + public void testGetOutputAfterGetInputStreamFails() throws Exception { + server.enqueue(new MockResponse()); + server.play(); + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + connection.setDoOutput(true); + try { + connection.getInputStream(); + connection.getOutputStream(); + fail(); + } catch (ProtocolException expected) { + } + } + + public void testSetDoOutputOrDoInputAfterConnectFails() throws Exception { + server.enqueue(new MockResponse()); + server.play(); + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + connection.connect(); + try { + connection.setDoOutput(true); + fail(); + } catch (IllegalStateException expected) { + } + try { + connection.setDoInput(true); + fail(); + } catch (IllegalStateException expected) { + } + connection.disconnect(); + } + + public void testClientSendsContentLength() throws Exception { + server.enqueue(new MockResponse().setBody("A")); + server.play(); + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + connection.setDoOutput(true); + OutputStream out = connection.getOutputStream(); + out.write(new byte[] { 'A', 'B', 'C' }); + out.close(); + assertEquals("A", readAscii(connection.getInputStream(), Integer.MAX_VALUE)); + RecordedRequest request = server.takeRequest(); + assertContains(request.getHeaders(), "Content-Length: 3"); + } + + public void testGetContentLengthConnects() throws Exception { + server.enqueue(new MockResponse().setBody("ABC")); + server.play(); + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + assertEquals(3, connection.getContentLength()); + connection.disconnect(); + } + + public void testGetContentTypeConnects() throws Exception { + server.enqueue(new MockResponse() + .addHeader("Content-Type: text/plain") + .setBody("ABC")); + server.play(); + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + assertEquals("text/plain", connection.getContentType()); + connection.disconnect(); + } + + public void testGetContentEncodingConnects() throws Exception { + server.enqueue(new MockResponse() + .addHeader("Content-Encoding: identity") + .setBody("ABC")); + server.play(); + HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection(); + assertEquals("identity", connection.getContentEncoding()); + connection.disconnect(); + } + /** * Returns a gzipped copy of {@code bytes}. */ |