/* This code is part of Freenet. It is distributed under the GNU General * Public License, version 2 (or at your option any later version). See * http://www.gnu.org/ for further details of the GPL. */ package freenet.clients.http; import java.net.URI; import java.net.URISyntaxException; import java.util.Date; import junit.framework.TestCase; import freenet.support.CurrentTimeUTC; public class CookieTest extends TestCase { static final String VALID_PATH = "/Freetalk"; static final String VALID_NAME = "SessionID"; static final String VALID_VALUE = "abCd12345"; URI validPath; Date validExpiresDate; Cookie cookie; @Override protected void setUp() throws Exception { super.setUp(); validPath = new URI(VALID_PATH); validExpiresDate = new Date(CurrentTimeUTC.getInMillis()+60*60*1000); cookie = new Cookie(validPath, VALID_NAME, VALID_VALUE, validExpiresDate); } public void testCookieURIStringStringDate() throws URISyntaxException { try { new Cookie(null, VALID_NAME, VALID_VALUE, validExpiresDate); fail("Constructor allows path to be null"); } catch(RuntimeException e) {} try { new Cookie(new URI(""), VALID_NAME, VALID_VALUE, validExpiresDate); fail("Constructor allows path to be empty"); } catch(RuntimeException e) {} // TODO: Test for invalid characters in path. try { new Cookie(validPath, null, VALID_VALUE, validExpiresDate); fail("Constructor allows name to be null"); } catch(RuntimeException e) {} try { new Cookie(validPath, "", VALID_VALUE, validExpiresDate); fail("Constructor allows name to be empty"); } catch(RuntimeException e) {} try { new Cookie(validPath, "test;", VALID_VALUE, validExpiresDate); fail("Constructor allows invalid characters in name"); } catch(RuntimeException e) {} // TODO: Test for more invalid characters in name // Empty values are allowed; new Cookie(validPath, VALID_NAME, null, validExpiresDate).getValue(); new Cookie(validPath, VALID_NAME, "", validExpiresDate); try { new Cookie(validPath, VALID_NAME, "\"", validExpiresDate); fail("Constructor allows invalid characters in value"); } catch(RuntimeException e) {} try { new Cookie(validPath, VALID_NAME, VALID_VALUE + "รค", validExpiresDate); fail("Constructor allows non-US-ASCII characters in value"); } catch(RuntimeException e) {} // TODO: Test for more invalid characters in value; try { new Cookie(validPath, VALID_NAME, VALID_VALUE, new Date(CurrentTimeUTC.getInMillis()-1)); fail("Constructor allows construction of expired cookies."); } catch(RuntimeException e) {} } public void testEqualsObject() throws URISyntaxException { assertEquals(cookie, cookie); assertEquals(cookie, new Cookie(validPath, VALID_NAME, VALID_VALUE, new Date(CurrentTimeUTC.getInMillis()+60*1000))); // Value is not checked in equals(). assertEquals(cookie, new Cookie(validPath, VALID_NAME, "", new Date(CurrentTimeUTC.getInMillis()+60*1000))); assertFalse(cookie.equals(new Cookie(new URI(VALID_PATH.toLowerCase()), VALID_NAME, VALID_VALUE, validExpiresDate))); assertEquals(cookie, new Cookie(validPath, VALID_NAME.toLowerCase(), VALID_VALUE, validExpiresDate)); // TODO: Test domain. This is currently done in ReceivedCookieTest } public void testGetDomain() { // TODO: Implement. } public void testGetPath() { assertEquals(VALID_PATH, cookie.getPath().toString()); } public void testGetName() { assertEquals(VALID_NAME.toLowerCase(), cookie.getName()); } public void testGetValue() { assertEquals(VALID_VALUE, cookie.getValue()); } // TODO: getExpirationDate() is commented out because it is broken, see ReceivedCookie.java // public void testGetExpirationDate() { // assertEquals(validExpiresDate, cookie.getExpirationDate()); // } public void testEncodeToHeaderValue() { System.out.println(cookie.encodeToHeaderValue()); // TODO: Implement. } }