/* * Licensed 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.esigate.cookie; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Properties; import junit.framework.TestCase; import org.apache.http.cookie.ClientCookie; import org.apache.http.impl.cookie.BasicClientCookie; import org.esigate.Driver; import org.esigate.HttpErrorPage; import org.esigate.MockRequestExecutor; import org.esigate.Parameters; import org.esigate.http.IncomingRequest; import org.esigate.impl.DriverRequest; import org.esigate.test.TestUtils; public class DefaultCookieManagerTest extends TestCase { private DefaultCookieManager cookieManager; private DriverRequest request; private Driver driver; @Override protected void setUp() throws HttpErrorPage { Properties properties = new Properties(); properties.setProperty(Parameters.STORE_COOKIES_IN_SESSION.getName(), "b, f"); properties.setProperty(Parameters.DISCARD_COOKIES.getName(), "D,e"); cookieManager = new DefaultCookieManager(); cookieManager.init(null, properties); driver = MockRequestExecutor.createDriver(); request = TestUtils.createDriverRequest(driver); } @Override protected void tearDown() { cookieManager = null; } public void testAddCookie() { assertNotNull(cookieManager.getCookies(request)); assertEquals(0, cookieManager.getCookies(request).size()); cookieManager.addCookie(new org.apache.http.impl.cookie.BasicClientCookie("b", "value"), request); assertNotNull(cookieManager.getCookies(request)); assertEquals(1, cookieManager.getCookies(request).size()); org.apache.http.cookie.Cookie cookie = cookieManager.getCookies(request).get(0); assertNotNull(cookie); assertEquals("b", cookie.getName()); assertEquals("value", cookie.getValue()); assertEquals(org.apache.http.impl.cookie.BasicClientCookie.class, cookie.getClass()); // Test httponly attribute org.apache.http.impl.cookie.BasicClientCookie httponlycookie = new org.apache.http.impl.cookie.BasicClientCookie("f", "httponly_insession"); httponlycookie.setAttribute("HttpOnly", ""); cookieManager.addCookie(httponlycookie, request); assertEquals(2, cookieManager.getCookies(request).size()); cookie = cookieManager.getCookies(request).get(1); assertEquals("f", cookie.getName()); assertTrue(((ClientCookie) cookie).containsAttribute("HttpOnly")); } public void testRewriteForBrowser() { // Test httponly attribute BasicClientCookie cookie = new org.apache.http.impl.cookie.BasicClientCookie("a", "httponly_sendtobrowser"); cookie.setDomain("localhost"); cookie.setPath("test"); cookie.setComment("comment"); ClientCookie cookieRewrited = (ClientCookie) DefaultCookieManager.rewriteForBrowser(cookie, request); assertEquals(cookieRewrited.getComment(), cookie.getComment()); assertFalse(cookieRewrited.containsAttribute("httponly")); cookie.setAttribute("httponly", ""); cookieRewrited = (ClientCookie) DefaultCookieManager.rewriteForBrowser(cookie, request); assertTrue(cookieRewrited.containsAttribute("httponly")); } public void testInit() { assertNotNull(cookieManager.getStoredCookies()); assertEquals(2, cookieManager.getStoredCookies().size()); List<String> cookieNames = new ArrayList<>(cookieManager.getStoredCookies()); Collections.sort(cookieNames); assertEquals("b", cookieNames.get(0)); assertEquals("f", cookieNames.get(1)); } public void testFilter() throws HttpErrorPage { IncomingRequest incomingRequest = TestUtils.createIncomingRequest().addCookie(new BasicClientCookie("a", "value a")) .addCookie(new BasicClientCookie("b", "value b")) .addCookie(new BasicClientCookie("c", "value c")) .addCookie(new BasicClientCookie("e", "value e")).build(); request = new DriverRequest(incomingRequest, driver, "/"); List<org.apache.http.cookie.Cookie> cookies = cookieManager.getCookies(request); assertNotNull(cookies); assertFalse(cookies.isEmpty()); assertEquals(2, cookies.size()); assertEquals("a", cookies.get(0).getName()); assertEquals("c", cookies.get(1).getName()); } public void testRewriteDomain() { assertEquals(null, DefaultCookieManager.rewriteDomain("provider1", "provider1", "www.foo.com")); assertEquals(".foo.com", DefaultCookieManager.rewriteDomain(".provider1.net", "www.provider1.net", "www.foo.com")); assertEquals(".subdomain.foo.com", DefaultCookieManager.rewriteDomain(".subdomain1.provider1.net", "www.subdomain1.provider1.net", "www.subdomain.foo.com")); assertEquals(".foo.com", DefaultCookieManager.rewriteDomain(".provider1.net", "www.provider1.net", "www.subdomain.foo.com")); assertEquals(null, DefaultCookieManager.rewriteDomain("www.provider1.net", "www.provider1.net", "www.foo.com")); assertEquals(null, DefaultCookieManager.rewriteDomain("localhost", "localhost", "www.foo.com")); assertEquals(null, DefaultCookieManager.rewriteDomain("127.0.0.1", "127.0.0.1", "www.foo.com")); assertEquals(null, DefaultCookieManager.rewriteDomain("provider1.subdomain.net", "www.provider1.subdomain.net", "www.foo.com")); } /** * 0000232: Cookie management : ESIGate should replace in user's cookie store new cookies received instead of always * adding them. * * @see "http://www.esigate.org/mantisbt/view.php?id=232" * */ public void testReplace() { assertEquals(0, cookieManager.getCookies(request).size()); // Add cookie cookieManager.addCookie(new BasicClientCookie("b", "value1"), request); assertEquals(1, cookieManager.getCookies(request).size()); // Replace cookie value cookieManager.addCookie(new BasicClientCookie("b", "value2"), request); // Ensure cookie is replaced assertEquals(1, cookieManager.getCookies(request).size()); assertEquals("value2", cookieManager.getCookies(request).get(0).getValue()); } }