/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.harmony.luni.tests.java.net;
//import dalvik.annotation.TestTargetNew;
//import dalvik.annotation.TestTargets;
//import dalvik.annotation.TestLevel;
//import dalvik.annotation.TestTargetClass;
//import dalvik.annotation.BrokenTest;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.CacheRequest;
import java.net.CacheResponse;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.ResponseCache;
import java.net.SocketPermission;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.security.Permission;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import tests.support.Support_Configuration;
//@TestTargetClass(HttpURLConnection.class)
public class HttpURLConnectionTest extends junit.framework.TestCase {
final String unknownURL = "http://unknown.host";
URL url;
HttpURLConnection uc;
private boolean isGetCalled;
private boolean isPutCalled;
private boolean isCacheWriteCalled;
private boolean isAbortCalled;
private Map<String, List<String>> mockHeaderMap;
private InputStream mockIs = new MockInputStream();
/**
* @tests java.net.HttpURLConnection#getResponseCode()
@TestTargetNew(
level = TestLevel.SUFFICIENT,
notes = "Verifies only successful response.",
method = "getResponseCode",
args = {}
)
*/
public void test_getResponseCode() {
try {
uc.connect();
assertEquals("Wrong response", 200, uc.getResponseCode());
} catch (IOException e) {
fail("Unexpected exception : " + e.getMessage());
}
try {
URL url = new URL(unknownURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.getResponseCode();
fail("IOException was not thrown.");
} catch(IOException e) {
//expected
}
}
/**
* @tests java.net.HttpURLConnection#getResponseMessage()
@TestTargetNew(
level = TestLevel.SUFFICIENT,
notes = "Verifies only successful response message.",
method = "getResponseMessage",
args = {}
)
*/
public void test_getResponseMessage() {
try {
uc.connect();
assertTrue("Wrong response: " + uc.getResponseMessage(), uc
.getResponseMessage().equals("OK"));
} catch (IOException e) {
fail("Unexpected exception : " + e.getMessage());
}
try {
URL url = new URL(unknownURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();
conn.getResponseMessage();
fail("IOException was not thrown.");
} catch(IOException e) {
//expected
}
}
/**
* @tests java.net.HttpURLConnection#getHeaderFields()
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getHeaderFields",
args = {}
)
@BrokenTest("Fails in CTS, passes in CoreTestRunner")
*/
public void test_getHeaderFields() throws Exception {
url = new URL("http://" + Support_Configuration.testURL);
uc = (HttpURLConnection) url.openConnection();
try {
uc.getInputStream();
} catch (IOException e) {
fail();
}
Map headers = uc.getHeaderFields();
List list = (List) headers.get("Content-Length");
if (list == null) {
list = (List) headers.get("content-length");
}
assertNotNull(list);
// content-length should always appear
String contentLength = (String) list.get(0);
assertNotNull(contentLength);
// there should be at least 2 headers
assertTrue(headers.size() > 1);
try {
// the map should be unmodifiable
headers.put("hi", "bye");
fail();
} catch (UnsupportedOperationException e) {
}
try {
// the list should be unmodifiable
list.set(0, "whatever");
fail();
} catch (UnsupportedOperationException e) {
}
}
/**
* @tests java.net.HttpURLConnection#getRequestProperties()
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRequestProperties",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "setRequestProperty",
args = {String.class, String.class}
)
})
*/
public void test_getRequestProperties() {
uc.setRequestProperty("whatever", "you like");
Map headers = uc.getRequestProperties();
List newHeader = (List) headers.get("whatever");
assertNotNull(newHeader);
assertEquals("you like", newHeader.get(0));
try {
// the map should be unmodifiable
headers.put("hi", "bye");
fail();
} catch (UnsupportedOperationException e) {
}
}
/**
* @tests java.net.HttpURLConnection#getRequestProperty(String)
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRequestProperty",
args = {String.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Exception test verification.",
method = "setRequestProperty",
args = {String.class, String.class}
)
})
*/
public void test_getRequestPropertyLjava_lang_String_BeforeConnected()
throws MalformedURLException, IOException {
uc.setRequestProperty("whatever", "you like"); //$NON-NLS-1$//$NON-NLS-2$
String res = uc.getRequestProperty("whatever"); //$NON-NLS-1$
assertEquals("you like", res); //$NON-NLS-1$
uc.setRequestProperty("", "you like"); //$NON-NLS-1$//$NON-NLS-2$
res = uc.getRequestProperty(""); //$NON-NLS-1$
assertEquals("you like", res); //$NON-NLS-1$
uc.setRequestProperty("", null); //$NON-NLS-1$
res = uc.getRequestProperty(""); //$NON-NLS-1$
assertEquals(null, res);
try {
uc.setRequestProperty(null, "you like"); //$NON-NLS-1$
fail("Should throw NullPointerException"); //$NON-NLS-1$
} catch (NullPointerException e) {
// expected
}
}
/**
* @tests java.net.HttpURLConnection#getRequestProperty(String)
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Verifies IllegalStateException and null as a parameter.",
method = "setRequestProperty",
args = {String.class, String.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Verifies IllegalStateException and null as a parameter.",
method = "getRequestProperty",
args = {String.class}
)
})
*/
public void test_getRequestPropertyLjava_lang_String_AfterConnected()
throws IOException {
uc.connect();
try {
uc.setRequestProperty("whatever", "you like"); //$NON-NLS-1$//$NON-NLS-2$
fail("Should throw IllegalStateException"); //$NON-NLS-1$
} catch (IllegalStateException e) {
// expected
}
try {
uc.setRequestProperty(null, "you like"); //$NON-NLS-1$
fail("Should throw IllegalStateException"); //$NON-NLS-1$
} catch (IllegalStateException e) {
// expected
}
String res = uc.getRequestProperty("whatever"); //$NON-NLS-1$
assertEquals(null, res);
res = uc.getRequestProperty(null);
assertEquals(null, res);
try {
uc.getRequestProperties();
fail("Should throw IllegalStateException"); //$NON-NLS-1$
} catch (IllegalStateException e) {
// expected
}
}
/**
* @tests java.net.HttpURLConnection#setFixedLengthStreamingMode_I()
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setFixedLengthStreamingMode",
args = {int.class}
)
*/
public void test_setFixedLengthStreamingModeI() throws Exception {
try {
uc.setFixedLengthStreamingMode(-1);
fail("should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// correct
}
uc.setFixedLengthStreamingMode(0);
uc.setFixedLengthStreamingMode(1);
try {
uc.setChunkedStreamingMode(1);
fail("should throw IllegalStateException");
} catch (IllegalStateException e) {
// correct
}
uc.connect();
try {
uc.setFixedLengthStreamingMode(-1);
fail("should throw IllegalStateException");
} catch (IllegalStateException e) {
// correct
}
try {
uc.setChunkedStreamingMode(-1);
fail("should throw IllegalStateException");
} catch (IllegalStateException e) {
// correct
}
MockHttpConnection mock = new MockHttpConnection(url);
assertEquals(-1, mock.getFixedLength());
mock.setFixedLengthStreamingMode(0);
assertEquals(0, mock.getFixedLength());
mock.setFixedLengthStreamingMode(1);
assertEquals(1, mock.getFixedLength());
mock.setFixedLengthStreamingMode(0);
assertEquals(0, mock.getFixedLength());
}
/**
* @tests java.net.HttpURLConnection#setChunkedStreamingMode_I()
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setChunkedStreamingMode",
args = {int.class}
)
*/
public void test_setChunkedStreamingModeI() throws Exception {
uc.setChunkedStreamingMode(0);
uc.setChunkedStreamingMode(-1);
uc.setChunkedStreamingMode(-2);
try {
uc.setFixedLengthStreamingMode(-1);
fail("should throw IllegalStateException");
} catch (IllegalStateException e) {
// correct
}
try {
uc.setFixedLengthStreamingMode(1);
fail("should throw IllegalStateException");
} catch (IllegalStateException e) {
// correct
}
uc.connect();
try {
uc.setFixedLengthStreamingMode(-1);
fail("should throw IllegalStateException");
} catch (IllegalStateException e) {
// correct
}
try {
uc.setChunkedStreamingMode(1);
fail("should throw IllegalStateException");
} catch (IllegalStateException e) {
// correct
}
MockHttpConnection mock = new MockHttpConnection(url);
assertEquals(-1, mock.getChunkLength());
mock.setChunkedStreamingMode(-1);
int defaultChunk = mock.getChunkLength();
assertTrue(defaultChunk > 0);
mock.setChunkedStreamingMode(0);
assertEquals(mock.getChunkLength(), defaultChunk);
mock.setChunkedStreamingMode(1);
assertEquals(1, mock.getChunkLength());
}
/**
* @tests java.net.HttpURLConnection#setFixedLengthStreamingMode_I()
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setFixedLengthStreamingMode",
args = {int.class}
)
*/
public void test_setFixedLengthStreamingModeI_effect() throws Exception {
String posted = "just a test";
java.net.HttpURLConnection conn = (java.net.HttpURLConnection) url
.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setFixedLengthStreamingMode(posted.length() - 1);
assertNull(conn.getRequestProperty("Content-length"));
conn.setRequestProperty("Content-length", String.valueOf(posted
.length()));
assertEquals(String.valueOf(posted.length()), conn
.getRequestProperty("Content-length"));
OutputStream out = conn.getOutputStream();
try {
out.write(posted.getBytes());
fail("should throw IOException");
} catch (IOException e) {
// correct, too many bytes written
}
try {
out.close();
fail("should throw IOException");
} catch (IOException e) {
// correct, too many bytes written
}
}
/**
* @tests java.net.HttpURLConnection#setChunkedStreamingMode_I()
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setChunkedStreamingMode",
args = {int.class}
)
*/
public void test_setChunkedStreamingModeI_effect() throws Exception {
String posted = "just a test";
// for test, use half length of the string
int chunkSize = posted.length() / 2;
java.net.HttpURLConnection conn = (java.net.HttpURLConnection) url
.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setChunkedStreamingMode(chunkSize);
assertNull(conn.getRequestProperty("Transfer-Encoding"));
// does not take effect
conn.setRequestProperty("Content-length", String.valueOf(posted
.length() - 1));
assertEquals(conn.getRequestProperty("Content-length"), String
.valueOf(posted.length() - 1));
OutputStream out = conn.getOutputStream();
// no error occurs
out.write(posted.getBytes());
out.close();
// no assert here, pass if no exception thrown
assertTrue(conn.getResponseCode() > 0);
}
/*
@TestTargetNew(
level = TestLevel.PARTIAL,
notes = "Simple test.",
method = "getOutputStream",
args = {}
)
*/
public void test_getOutputStream_afterConnection() throws Exception {
uc.setDoOutput(true);
uc.connect();
assertNotNull(uc.getOutputStream());
}
/**
* @tests java.net.URLConnection#setUseCaches() and its real implementation
* in HttpURLConnection using GetInputStream() and Connect()
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "using GetInputStream() and Connect()",
method = "setUseCaches",
args = {boolean.class}
)
*/
public void test_UseCache_HttpURLConnection_Connect_GetInputStream()
throws Exception {
// set cache before URLConnection created, or it does not take effect
ResponseCache rc = new MockNonCachedResponseCache();
ResponseCache.setDefault(rc);
uc = (HttpURLConnection) url.openConnection();
assertFalse(isGetCalled);
uc.setUseCaches(true);
uc.setDoInput(true);
uc.connect();
assertTrue(isGetCalled);
assertFalse(isPutCalled);
InputStream is = uc.getInputStream();
assertTrue(isPutCalled);
is.close();
((HttpURLConnection) uc).disconnect();
}
/**
* @tests java.net.URLConnection#setUseCaches() and its real implementation
* in HttpURLConnection using GetOutputStream() and Connect()
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "using GetOutputStream() and Connect()",
method = "setUseCaches",
args = {boolean.class}
)
*/
public void test_UseCache_HttpURLConnection_Connect_GetOutputStream()
throws Exception {
// set cache before URLConnection created, or it does not take effect
ResponseCache rc = new MockNonCachedResponseCache();
ResponseCache.setDefault(rc);
uc.setUseCaches(true);
URLConnection uc = url.openConnection();
uc.setDoOutput(true);
assertFalse(isGetCalled);
uc.connect();
assertTrue(isGetCalled);
assertFalse(isPutCalled);
OutputStream os = uc.getOutputStream();
assertFalse(isPutCalled);
os.close();
((HttpURLConnection) uc).disconnect();
}
/**
* @tests java.net.URLConnection#setUseCaches() and its real implementation
* in HttpURLConnection using GetOutputStream()
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "real implementation\n in HttpURLConnection using GetOutputStream()",
method = "setUseCaches",
args = {boolean.class}
)
*/
public void test_UseCache_HttpURLConnection_GetOutputStream()
throws Exception {
// set cache before URLConnection created, or it does not take effect
ResponseCache rc = new MockNonCachedResponseCache();
ResponseCache.setDefault(rc);
uc = (HttpURLConnection) url.openConnection();
assertFalse(isGetCalled);
uc.setDoOutput(true);
uc.setUseCaches(true);
OutputStream os = uc.getOutputStream();
assertTrue(isGetCalled);
assertFalse(isPutCalled);
os.write(1);
os.flush();
os.close();
((HttpURLConnection) uc).getResponseCode();
assertTrue(isGetCalled);
// assertTrue(isPutCalled);
isGetCalled = false;
isPutCalled = false;
//InputStream is = uc.getInputStream();
//assertFalse(isGetCalled);
//assertFalse(isPutCalled);
//is.close();
((HttpURLConnection) uc).disconnect();
}
/**
* @tests java.net.URLConnection#setUseCaches() and its real implementation
* in HttpURLConnection using GetInputStream()
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "real implementation in HttpURLConnection using GetInputStream()",
method = "setUseCaches",
args = {boolean.class}
)
*/
public void test_UseCache_HttpURLConnection_GetInputStream()
throws Exception {
// set cache before URLConnection created, or it does not take effect
ResponseCache rc = new MockNonCachedResponseCache();
ResponseCache.setDefault(rc);
URLConnection uc = url.openConnection();
assertFalse(isGetCalled);
uc.setDoOutput(true);
uc.setUseCaches(true);
InputStream is = uc.getInputStream();
assertTrue(isGetCalled);
assertTrue(isPutCalled);
((HttpURLConnection) uc).getResponseCode();
is.close();
((HttpURLConnection) uc).disconnect();
}
/**
* @tests java.net.URLConnection#setUseCaches() and its real implementation
* in HttpURLConnection using a MockResponseCache returns cache of
* null
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "MockResponseCache returns cache null",
method = "setUseCaches",
args = {boolean.class}
)
*/
public void test_UseCache_HttpURLConnection_NonCached() throws IOException {
ResponseCache.setDefault(new MockNonCachedResponseCache());
uc = (HttpURLConnection) url.openConnection();
// default useCaches is true
assertTrue(uc.getUseCaches());
uc.setDoInput(true);
// make sure ResponseCache.get/put is called
isGetCalled = false;
isPutCalled = false;
InputStream is = uc.getInputStream();
assertFalse(is instanceof MockInputStream);
assertTrue(isGetCalled);
assertTrue(isPutCalled);
// make sure protocol handler has tried to write to cache.
isCacheWriteCalled = false;
is.read();
assertTrue(isCacheWriteCalled);
// make sure protocol handler has tried to write to cache.
isCacheWriteCalled = false;
byte[] buf = new byte[1];
is.read(buf);
assertTrue(isCacheWriteCalled);
// make sure protocol handler has tried to write to cache.
isCacheWriteCalled = false;
buf = new byte[1];
is.read(buf, 0, 1);
assertTrue(isCacheWriteCalled);
// make sure protocol handler has tried to call abort.
isAbortCalled = false;
is.close();
assertTrue(isAbortCalled);
uc.disconnect();
}
/**
* @tests java.net.URLConnection#setUseCaches() and its real implementation
* in HttpURLConnection using a MockResponseCache returns a mock
* cache
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "test default, and implementation with MockResponseCache",
method = "setUseCaches",
args = {boolean.class}
)
*/
public void test_UseCache_HttpURLConnection_Cached() throws IOException {
ResponseCache.setDefault(new MockCachedResponseCache());
URL u = new URL("http://" + Support_Configuration.SpecialInetTestAddress);
HttpURLConnection uc = (HttpURLConnection) u.openConnection();
// default useCaches is true
assertTrue(uc.getUseCaches());
// make sure ResponseCache.get/put is called
isGetCalled = false;
isPutCalled = false;
InputStream is = uc.getInputStream();
assertEquals(4711, is.read());
assertTrue(isGetCalled);
// make sure protocol handler doesn't try to write to cache, since
// it has been in cache already.
isCacheWriteCalled = false;
is.read();
assertFalse(isCacheWriteCalled);
// make sure protocol handler doesn't try to write to cache, since
// it has been in cache already.
isCacheWriteCalled = false;
byte[] buf = new byte[1];
is.read(buf);
assertFalse(isCacheWriteCalled);
// make sure protocol handler doesn't try to write to cache, since
// it has been in cache already.
isCacheWriteCalled = false;
buf = new byte[1];
is.read(buf, 0, 1);
assertFalse(isCacheWriteCalled);
// make sure abort is not called since no write is performed
isAbortCalled = false;
is.close();
assertFalse(isAbortCalled);
uc.disconnect();
}
/**
* @tests java.net.URLConnection#setUseCaches() and its real implementation
* in HttpURLConnection using getHeaderFields()
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "tests header fields written to cache with getHeaderFields.",
method = "setUseCaches",
args = {boolean.class}
)
*/
public void test_UseCache_HttpURLConnection_getHeaderFields()
throws IOException {
ResponseCache.setDefault(new MockCachedResponseCache());
URL u = new URL("http://" + Support_Configuration.SpecialInetTestAddress);
HttpURLConnection uc = (HttpURLConnection) u.openConnection();
Map<String, List<String>> headerMap = uc.getHeaderFields();
assertTrue(isGetCalled);
assertFalse(isPutCalled);
assertEquals(mockHeaderMap, headerMap);
assertEquals(4711, uc.getInputStream().read());
uc.disconnect();
}
/**
* @tests java.net.URLConnection#setUseCaches() and its real implementation
* in HttpURLConnection using GetOutputStream()
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "setUseCaches",
args = {boolean.class}
)
*/
public void test_UseCache_HttpURLConnection_NoCached_GetOutputStream()
throws Exception {
ResponseCache.setDefault(new MockNonCachedResponseCache());
uc = (HttpURLConnection) url.openConnection();
uc.setChunkedStreamingMode(10);
uc.setDoOutput(true);
uc.getOutputStream();
assertTrue(isGetCalled);
assertFalse(isPutCalled);
assertFalse(isAbortCalled);
uc.disconnect();
}
/**
* @tests java.net.URLConnection#getErrorStream()
@TestTargetNew(
level = TestLevel.SUFFICIENT,
notes = "Negative cases depends on server responds.",
method = "getErrorStream",
args = {}
)
*/
public void test_getErrorStream() throws Exception {
uc.connect();
assertEquals(200, uc.getResponseCode());
// no error stream
assertNull(uc.getErrorStream());
uc.disconnect();
assertNull(uc.getErrorStream());
try {
URL url = new URL(unknownURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
assertNull(conn.getErrorStream());
} catch(IOException e) {
fail("IOException was thrown.");
}
}
/**
* @tests {@link java.net.HttpURLConnection#setFollowRedirects(boolean)}
* @tests {@link java.net.HttpURLConnection#getFollowRedirects()}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getFollowRedirects",
args = {}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setFollowRedirects",
args = {boolean.class}
)
})
*/
public void test_followRedirects() {
assertTrue("The default value of followRedirects is not true",
HttpURLConnection.getFollowRedirects());
HttpURLConnection.setFollowRedirects(false);
assertFalse(HttpURLConnection.getFollowRedirects());
HttpURLConnection.setFollowRedirects(true);
assertTrue(HttpURLConnection.getFollowRedirects());
SecurityManager sm = new SecurityManager() {
public void checkPermission(Permission perm) {
}
public void checkSetFactory() {
throw new SecurityException();
}
};
SecurityManager oldSm = System.getSecurityManager();
System.setSecurityManager(sm);
try {
HttpURLConnection.setFollowRedirects(false);
fail("SecurityException should be thrown.");
} catch (SecurityException e) {
// expected
} finally {
System.setSecurityManager(oldSm);
}
}
/*
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getInstanceFollowRedirects",
args = {}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setInstanceFollowRedirects",
args = {boolean.class}
)
})
*/
public void test_instanceFollowRedirect() {
assertTrue(uc.getInstanceFollowRedirects());
uc.setInstanceFollowRedirects(false);
assertFalse(uc.getInstanceFollowRedirects());
uc.setInstanceFollowRedirects(true);
assertTrue(uc.getInstanceFollowRedirects());
uc.setFollowRedirects(false);
assertTrue(uc.getInstanceFollowRedirects());
}
/**
* @throws ProtocolException
* @tests {@link java.net.HttpURLConnection#setRequestMethod(String)}
* @tests {@link java.net.HttpURLConnection#getRequestMethod()}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getRequestMethod",
args = {}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setRequestMethod",
args = {java.lang.String.class}
)
})
*/
public void test_requestMethod() throws MalformedURLException, ProtocolException{
URL url = new URL("http://" + Support_Configuration.SpecialInetTestAddress);
HttpURLConnection con = new MyHttpURLConnection(url);
assertEquals("The default value of requestMethod is not \"GET\"", "GET",
con.getRequestMethod());
String[] methods = { "GET", "DELETE", "HEAD", "OPTIONS", "POST", "PUT",
"TRACE" };
// Nomal set. Should not throw ProtocolException
for (String method : methods) {
con.setRequestMethod(method);
assertEquals("The value of requestMethod is not " + method, method,
con.getRequestMethod());
}
try {
con.setRequestMethod("Wrong method");
fail("Should throw ProtocolException");
} catch (ProtocolException e) {
// Expected
}
try {
con.setRequestMethod("get");
fail("Should throw ProtocolException");
} catch (ProtocolException e) {
// Expected
}
}
private static class MyHttpURLConnection extends HttpURLConnection {
protected MyHttpURLConnection(URL url) {
super(url);
}
@Override
public void disconnect() {
// do nothing
}
@Override
public boolean usingProxy() {
return false;
}
@Override
public void connect() throws IOException {
// do nothing
}
}
/**
* @tests java.net.URLConnection#getPermission()
@TestTargetNew(
level = TestLevel.SUFFICIENT,
notes = "IOException is not verified.",
method = "getPermission",
args = {}
)
*/
public void test_Permission() throws Exception {
uc.connect();
Permission permission = uc.getPermission();
assertNotNull(permission);
permission.implies(new SocketPermission("localhost","connect"));
try {
URL url = new URL(unknownURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.getPermission();
} catch(IOException e) {
fail("IOException was thrown.");
}
}
/*
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "HttpURLConnection",
args = {java.net.URL.class}
)
*/
public void test_Constructor() throws IOException {
MockHttpConnection conn1 = new MockHttpConnection(url);
conn1.connect();
conn1.disconnect();
MockHttpConnection conn2 = new MockHttpConnection(null);
conn2.connect();
conn2.disconnect();
URL url = new URL("file://newFile.txt");
MockHttpConnection conn3 = new MockHttpConnection(url);
conn3.connect();
conn3.disconnect();
}
/*
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "disconnect",
args = {}
)
*/
public void test_disconnect() {
try {
URL url1 = new URL("http://" + Support_Configuration.testURL);
HttpURLConnection uc1 = (HttpURLConnection) url1.openConnection();
uc1.disconnect();
InputStream is = uc1.getInputStream();
byte [] array = new byte [10];
is.read(array);
assertNotNull(array);
try {
uc1.connect();
uc1.disconnect();
} catch(IOException e) {
fail("IOException was thrown.");
}
} catch (Exception e) {
fail("Exception during setup : " + e.getMessage());
}
}
/*
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getHeaderFieldDate",
args = {java.lang.String.class, long.class}
)
*/
public void test_getHeaderFieldDate(String name, long Default) {
long date = uc.getHeaderFieldDate(uc.getHeaderField(0), 0);
assertEquals(System.currentTimeMillis(), date);
}
/*
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "usingProxy",
args = {}
)
*/
public void test_usingProxy() {
assertFalse(uc.usingProxy());
}
class MockNonCachedResponseCache extends ResponseCache {
public CacheResponse get(URI arg0, String arg1, Map arg2)
throws IOException {
isGetCalled = true;
return null;
}
public CacheRequest put(URI arg0, URLConnection arg1)
throws IOException {
isPutCalled = true;
return new MockCacheRequest();
}
}
class MockCachedResponseCache extends ResponseCache {
public CacheResponse get(URI arg0, String arg1, Map arg2)
throws IOException {
if (null == arg0 || null == arg1 || null == arg2) {
throw new NullPointerException();
}
isGetCalled = true;
return new MockCacheResponse();
}
public CacheRequest put(URI arg0, URLConnection arg1)
throws IOException {
if (null == arg0 || null == arg1) {
throw new NullPointerException();
}
isPutCalled = true;
return new MockCacheRequest();
}
}
class MockCacheRequest extends CacheRequest {
public OutputStream getBody() throws IOException {
isCacheWriteCalled = true;
return new MockOutputStream();
}
public void abort() {
isAbortCalled = true;
}
}
class MockCacheResponse extends CacheResponse {
public Map<String, List<String>> getHeaders() throws IOException {
return mockHeaderMap;
}
public InputStream getBody() throws IOException {
return mockIs;
}
}
class MockInputStream extends InputStream {
public int read() throws IOException {
return 4711;
}
public int read(byte[] arg0, int arg1, int arg2) throws IOException {
return 1;
}
public int read(byte[] arg0) throws IOException {
return 1;
}
}
class MockOutputStream extends OutputStream {
public void write(int b) throws IOException {
isCacheWriteCalled = true;
}
public void write(byte[] b, int off, int len) throws IOException {
isCacheWriteCalled = true;
}
public void write(byte[] b) throws IOException {
isCacheWriteCalled = true;
}
}
class MockHttpConnection extends HttpURLConnection {
protected MockHttpConnection(URL url) {
super(url);
}
public void disconnect() {
// do nothing
}
public boolean usingProxy() {
return false;
}
public void connect() throws IOException {
// do nothing
}
public int getChunkLength() {
return super.chunkLength;
}
public int getFixedLength() {
return super.fixedContentLength;
}
}
protected void setUp() {
try {
url = new URL(Support_Configuration.hTTPURLyahoo);
uc = (HttpURLConnection) url.openConnection();
} catch (Exception e) {
fail("Exception during setup : " + e.getMessage());
}
mockHeaderMap = new Hashtable<String, List<String>>();
List<String> valueList = new ArrayList<String>();
valueList.add("value1");
mockHeaderMap.put("field1", valueList);
mockHeaderMap.put("field2", valueList);
isGetCalled = false;
isPutCalled = false;
isCacheWriteCalled = false;
}
protected void tearDown() {
uc.disconnect();
ResponseCache.setDefault(null);
}
}