/* 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(); } }