blob: 72be761d8340b3af9e2084ada8bcac11e4e98470 [file] [log] [blame]
/* 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.tests.java.net;
import junit.framework.TestCase;
import java.net.CookieManager;
import java.net.CookieStore;
import java.net.HttpCookie;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
import java.util.RandomAccess;
public class CookieStoreTest extends TestCase {
private CookieManager cookieManager;
private CookieStore cookieStore;
/**
* java.net.CookieStore#add(URI, HttpCookie)
* @since 1.6
*/
public void test_add_LURI_LHttpCookie() throws URISyntaxException {
URI uri = new URI("http://harmony.test.unit.org");
HttpCookie cookie = new HttpCookie("name1", "value1");
cookie.setDiscard(true);
// This needn't throw. We should use the cookie's domain, if set.
// If no domain is set, this cookie will languish in the store until
// it expires.
cookieStore.add(null, cookie);
try {
cookieStore.add(uri, null);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
try {
cookieStore.add(null, null);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
cookieStore.add(uri, cookie);
List<HttpCookie> list = cookieStore.get(uri);
assertEquals(1, list.size());
assertTrue(list.contains(cookie));
HttpCookie cookie2 = new HttpCookie(" NaME1 ", " TESTVALUE1 ");
cookieStore.add(uri, cookie2);
list = cookieStore.get(uri);
assertEquals(1, list.size());
assertEquals(" TESTVALUE1 ", list.get(0).getValue());
assertTrue(list.contains(cookie2));
// domain and path attributes works
HttpCookie anotherCookie = new HttpCookie("name1", "value1");
anotherCookie.setDomain("domain");
anotherCookie.setPath("Path");
cookieStore.add(uri, anotherCookie);
list = cookieStore.get(uri);
assertEquals(2, list.size());
assertNull(list.get(0).getDomain());
assertEquals("domain", list.get(1).getDomain());
assertEquals("Path", list.get(1).getPath());
URI uri2 = new URI("http://.test.unit.org");
HttpCookie cookie3 = new HttpCookie("NaME2", "VALUE2");
cookieStore.add(uri2, cookie3);
list = cookieStore.get(uri2);
assertEquals(1, list.size());
assertEquals("VALUE2", list.get(0).getValue());
list = cookieStore.getCookies();
assertEquals(3, list.size());
// expired cookie won't be selected.
HttpCookie cookie4 = new HttpCookie("cookie4", "value4");
cookie4.setMaxAge(-2);
assertTrue(cookie4.hasExpired());
cookieStore.add(uri2, cookie4);
list = cookieStore.getCookies();
assertEquals(3, list.size());
assertFalse(cookieStore.remove(uri2, cookie4));
cookie4.setMaxAge(3000);
cookie4.setDomain("domain");
cookie4.setPath("path");
cookieStore.add(uri2, cookie4);
list = cookieStore.get(uri2);
assertEquals(2, list.size());
cookieStore.add(uri, cookie4);
list = cookieStore.get(uri);
assertEquals(3, list.size());
list = cookieStore.get(uri2);
assertEquals(2, list.size());
list = cookieStore.getCookies();
assertEquals(4, list.size());
URI baduri = new URI("bad_url");
HttpCookie cookie6 = new HttpCookie("cookie5", "value5");
cookieStore.add(baduri, cookie6);
list = cookieStore.get(baduri);
assertTrue(list.contains(cookie6));
}
/**
* java.net.CookieStore#get(URI)
* @since 1.6
*/
public void test_get_LURI() throws URISyntaxException {
try {
cookieStore.get(null);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
URI uri1 = new URI("http://get.uri1.test.org");
List<HttpCookie> list = cookieStore.get(uri1);
assertTrue(list.isEmpty());
HttpCookie cookie1 = new HttpCookie("cookie_name1", "cookie_value1");
HttpCookie cookie2 = new HttpCookie("cookie_name2", "cookie_value2");
cookieStore.add(uri1, cookie1);
cookieStore.add(uri1, cookie2);
URI uri2 = new URI("http://get.uri2.test.org");
HttpCookie cookie3 = new HttpCookie("cookie_name3", "cookie_value3");
cookieStore.add(uri2, cookie3);
list = cookieStore.get(uri1);
assertEquals(2, list.size());
list = cookieStore.get(uri2);
assertEquals(1, list.size());
// domain-match cookies also be selected.
HttpCookie cookie4 = new HttpCookie("cookie_name4", "cookie_value4");
cookie4.setDomain(".uri1.test.org");
cookieStore.add(uri2, cookie4);
list = cookieStore.get(uri1);
assertEquals(3, list.size());
cookieStore.add(uri1, cookie4);
list = cookieStore.get(uri1);
assertEquals(3, list.size());
list = cookieStore.get(uri2);
assertEquals(2, list.size());
// expired cookie won't be selected.
HttpCookie cookie5 = new HttpCookie("cookie_name5", "cookie_value5");
cookie5.setMaxAge(-333);
assertTrue(cookie5.hasExpired());
cookieStore.add(uri1, cookie5);
list = cookieStore.get(uri1);
assertEquals(3, list.size());
assertFalse(cookieStore.remove(uri1, cookie5));
list = cookieStore.getCookies();
assertEquals(4, list.size());
cookie4.setMaxAge(-123);
list = cookieStore.get(uri1);
assertEquals(2, list.size());
list = cookieStore.getCookies();
assertEquals(3, list.size());
// expired cookies are also deleted even if it domain-matches the URI
HttpCookie cookie6 = new HttpCookie("cookie_name6", "cookie_value6");
cookie6.setMaxAge(-2);
cookie6.setDomain(".uri1.test.org");
cookieStore.add(uri2, cookie6);
list = cookieStore.get(uri1);
assertEquals(2, list.size());
assertFalse(cookieStore.remove(null, cookie6));
URI uri3 = new URI("http://get.uri3.test.org");
assertTrue(cookieStore.get(uri3).isEmpty());
URI baduri = new URI("invalid_uri");
assertTrue(cookieStore.get(baduri).isEmpty());
}
/**
* java.net.CookieStore#getCookies()
* @since 1.6
*/
public void test_getCookies() throws URISyntaxException {
List<HttpCookie> list = cookieStore.getCookies();
assertTrue(list.isEmpty());
assertTrue(list instanceof RandomAccess);
HttpCookie cookie1 = new HttpCookie("cookie_name", "cookie_value");
URI uri1 = new URI("http://getcookies1.test.org");
cookieStore.add(uri1, cookie1);
list = cookieStore.getCookies();
assertTrue(list.contains(cookie1));
HttpCookie cookie2 = new HttpCookie("cookie_name2", "cookie_value2");
URI uri2 = new URI("http://getcookies2.test.org");
cookieStore.add(uri2, cookie2);
list = cookieStore.getCookies();
assertEquals(2, list.size());
assertTrue(list.contains(cookie1));
assertTrue(list.contains(cookie2));
// duplicated cookie won't be selected.
cookieStore.add(uri2, cookie1);
list = cookieStore.getCookies();
assertEquals(2, list.size());
// expired cookie won't be selected.
HttpCookie cookie3 = new HttpCookie("cookie_name3", "cookie_value3");
cookie3.setMaxAge(-1357);
cookieStore.add(uri1, cookie3);
list = cookieStore.getCookies();
assertEquals(2, list.size());
try {
list.add(new HttpCookie("readOnlyName", "readOnlyValue"));
fail("should throw UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// expected
}
try {
list.remove(new HttpCookie("readOnlyName", "readOnlyValue"));
fail("should throw UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// expected
}
}
/**
* java.net.CookieStore#getURIs()
* @since 1.6
*/
public void test_getURIs() throws URISyntaxException {
List<URI> list = cookieStore.getURIs();
assertTrue(list.isEmpty());
URI uri1 = new URI("http://geturis1.test.com");
HttpCookie cookie1 = new HttpCookie("cookie_name1", "cookie_value1");
cookieStore.add(uri1, cookie1);
list = cookieStore.getURIs();
assertEquals("geturis1.test.com", list.get(0).getHost());
HttpCookie cookie2 = new HttpCookie("cookie_name2", "cookie_value2");
cookieStore.add(uri1, cookie2);
list = cookieStore.getURIs();
assertEquals(1, list.size());
URI uri2 = new URI("http://geturis2.test.com");
cookieStore.add(uri2, cookie2);
list = cookieStore.getURIs();
assertEquals(2, list.size());
assertTrue(list.contains(uri1));
assertTrue(list.contains(uri2));
}
/**
* java.net.CookieStore#remove(URI, HttpCookie)
* @since 1.6
*/
public void test_remove_LURI_LHttpCookie() throws URISyntaxException {
URI uri1 = new URI("http://remove1.test.com");
HttpCookie cookie1 = new HttpCookie("cookie_name1", "cookie_value1");
try {
cookieStore.remove(uri1, null);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
assertFalse(cookieStore.remove(uri1, cookie1));
assertFalse(cookieStore.remove(null, cookie1));
cookieStore.add(uri1, cookie1);
URI uri2 = new URI("http://remove2.test.com");
HttpCookie cookie2 = new HttpCookie("cookie_name2", "cookie_value2");
cookieStore.add(uri2, cookie2);
assertTrue(cookieStore.remove(uri1, cookie1));
assertFalse(cookieStore.remove(uri1, cookie1));
assertEquals(2, cookieStore.getURIs().size());
assertEquals(1, cookieStore.getCookies().size());
assertTrue(cookieStore.remove(uri2, cookie2));
assertFalse(cookieStore.remove(uri2, cookie2));
assertEquals(2, cookieStore.getURIs().size());
assertEquals(0, cookieStore.getCookies().size());
assertTrue(cookieStore.removeAll());
cookieStore.add(uri1, cookie1);
cookieStore.add(uri2, cookie2);
HttpCookie cookie3 = new HttpCookie("cookie_name3", "cookie_value3");
assertFalse(cookieStore.remove(null, cookie3));
// No guarantees on behavior if we call remove with a different
// uri from the one originally associated with the cookie.
assertFalse(cookieStore.remove(null, cookie1));
assertTrue(cookieStore.remove(uri1, cookie1));
assertFalse(cookieStore.remove(uri1, cookie1));
assertEquals(2, cookieStore.getURIs().size());
assertEquals(1, cookieStore.getCookies().size());
assertTrue(cookieStore.remove(uri2, cookie2));
assertFalse(cookieStore.remove(uri2, cookie2));
assertEquals(2, cookieStore.getURIs().size());
assertEquals(0, cookieStore.getCookies().size());
cookieStore.removeAll();
// expired cookies can also be deleted.
cookie2.setMaxAge(-34857);
cookieStore.add(uri2, cookie2);
assertTrue(cookieStore.remove(uri2, cookie2));
assertFalse(cookieStore.remove(uri2, cookie2));
assertEquals(0, cookieStore.getCookies().size());
cookie2.setMaxAge(34857);
cookieStore.add(uri1, cookie1);
cookieStore.add(uri2, cookie1);
cookieStore.add(uri2, cookie2);
assertTrue(cookieStore.remove(uri1, cookie1));
assertFalse(cookieStore.remove(uri1, cookie1));
assertTrue(cookieStore.get(uri2).contains(cookie1));
assertTrue(cookieStore.get(uri2).contains(cookie2));
assertEquals(0, cookieStore.get(uri1).size());
cookieStore.remove(uri2, cookie2);
cookieStore.removeAll();
cookieStore.add(uri2, cookie2);
cookieStore.add(uri1, cookie1);
assertEquals(2, cookieStore.getCookies().size());
assertFalse(cookieStore.remove(uri2, cookie1));
assertTrue(cookieStore.remove(uri1, cookie1));
assertEquals(2, cookieStore.getURIs().size());
assertEquals(1, cookieStore.getCookies().size());
assertTrue(cookieStore.getCookies().contains(cookie2));
cookieStore.removeAll();
URI uri3 = new URI("http://remove3.test.com");
URI uri4 = new URI("http://test.com");
HttpCookie cookie4 = new HttpCookie("cookie_name4", "cookie_value4");
cookie4.setDomain(".test.com");
cookie2.setMaxAge(-34857);
cookie3.setMaxAge(-22);
cookie4.setMaxAge(-45);
cookieStore.add(uri1, cookie1);
cookieStore.add(uri2, cookie2);
cookieStore.add(uri3, cookie3);
cookieStore.add(uri4, cookie4);
assertEquals(0, cookieStore.get(uri2).size());
assertFalse(cookieStore.remove(uri2, cookie2));
assertTrue(cookieStore.remove(uri3, cookie3));
assertFalse(cookieStore.remove(uri4, cookie4));
}
/**
* java.net.CookieStore#test_removeAll()
* @since 1.6
*/
public void test_removeAll() throws URISyntaxException {
assertFalse(cookieStore.removeAll());
URI uri1 = new URI("http://removeAll1.test.com");
HttpCookie cookie1 = new HttpCookie("cookie_name1", "cookie_value1");
cookieStore.add(uri1, cookie1);
URI uri2 = new URI("http://removeAll2.test.com");
HttpCookie cookie2 = new HttpCookie("cookie_name2", "cookie_value2");
cookieStore.add(uri2, cookie2);
assertTrue(cookieStore.removeAll());
assertTrue(cookieStore.getURIs().isEmpty());
assertTrue(cookieStore.getCookies().isEmpty());
assertFalse(cookieStore.removeAll());
}
@Override
protected void setUp() throws Exception {
super.setUp();
cookieManager = new CookieManager();
cookieStore = cookieManager.getCookieStore();
}
@Override
protected void tearDown() throws Exception {
cookieManager = null;
cookieStore = null;
super.tearDown();
}
}