/****************************************************************************** * JBoss, a division of Red Hat * * Copyright 2011, Red Hat Middleware, LLC, and individual * * contributors as indicated by the @authors tag. See the * * copyright.txt in the distribution for a full listing of * * individual contributors. * * * * This is free software; you can redistribute it and/or modify it * * under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation; either version 2.1 of * * the License, or (at your option) any later version. * * * * This software is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this software; if not, write to the Free * * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * * 02110-1301 USA, or see the FSF site: http://www.fsf.org. * ******************************************************************************/ package org.gatein.web.redirect; import java.util.HashMap; import java.util.Map; import org.exoplatform.container.PortalContainer; import org.exoplatform.container.component.RequestLifeCycle; import org.gatein.web.redirect.api.RedirectKey; import org.gatein.web.redirect.api.RedirectType; import org.gatein.web.redirect.api.SiteRedirectService; /** * @author <a href="mailto:mwringe@redhat.com">Matt Wringe</a> * @version $Revision$ */ public class TestRedirect extends TestConfig { String userAgentA = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/500.0 (KHTML, like Gecko) TestBrowser/1.2.3 Safari/500.0"; String userAgentB = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/500.0 (KHTML, like Gecko) TestBrowser/1.2.3 Safari/500."; // One // character // difference // Hack since there is a memory leak somewhere with bootstrap.dispose and we are using an old // version of junit which doesn't support @beforeClass and @afterClass annotations public void testALL() { atestNoRedirects(); atestEmptyConditions(); atestAcceptAllUserAgents(); atestAcceptAllUserAgentsDisabled(); atestSimpleUserAgentRedirects(); atestSimpleUserAgentRedirectsDisabled(); atestUserAgentRedirects(); atestSimpleDevicePropertyRedirect(); atestDevicePropertyRedirects(); } public void atestNoRedirects() { PortalContainer container = getContainer(); RequestLifeCycle.begin(container); SiteRedirectService redirectService = (SiteRedirectService) container .getComponentInstanceOfType(SiteRedirectService.class); assertNotNull(redirectService); RedirectKey redirectKey = redirectService.getRedirectSite("noRedirects", userAgentA, null); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); RequestLifeCycle.end(); } public void atestEmptyConditions() { PortalContainer container = getContainer(); RequestLifeCycle.begin(container); SiteRedirectService redirectService = (SiteRedirectService) container .getComponentInstanceOfType(SiteRedirectService.class); assertNotNull(redirectService); RedirectKey redirectKey = redirectService.getRedirectSite("emptyConditions", userAgentA, null); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); RequestLifeCycle.end(); } public void atestAcceptAllUserAgents() { String originName = "userAgentRedirectAll"; PortalContainer container = getContainer(); RequestLifeCycle.begin(container); SiteRedirectService redirectService = (SiteRedirectService) container .getComponentInstanceOfType(SiteRedirectService.class); assertNotNull(redirectService); RedirectKey redirectKey = redirectService.getRedirectSite(originName, userAgentA, null); assertEquals(RedirectType.REDIRECT, redirectKey.getType()); assertEquals("redirectA", redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, userAgentB, null); assertEquals(RedirectType.REDIRECT, redirectKey.getType()); assertEquals("redirectA", redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, "", null); assertEquals(RedirectType.REDIRECT, redirectKey.getType()); assertEquals("redirectA", redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, null, null); assertEquals(RedirectType.REDIRECT, redirectKey.getType()); assertEquals("redirectA", redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, "123 sadf as fa sd", null); assertEquals(RedirectType.REDIRECT, redirectKey.getType()); assertEquals("redirectA", redirectKey.getRedirect()); RequestLifeCycle.end(); } public void atestAcceptAllUserAgentsDisabled() { String originName = "userAgentRedirectAllDisabled"; PortalContainer container = getContainer(); RequestLifeCycle.begin(container); SiteRedirectService redirectService = (SiteRedirectService) container .getComponentInstanceOfType(SiteRedirectService.class); assertNotNull(redirectService); RedirectKey redirectKey = redirectService.getRedirectSite(originName, userAgentA, null); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, userAgentB, null); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, "", null); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, null, null); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, "123 sadf as fa sd", null); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); RequestLifeCycle.end(); } public void atestSimpleUserAgentRedirects() { PortalContainer container = getContainer(); RequestLifeCycle.begin(container); SiteRedirectService redirectService = (SiteRedirectService) container .getComponentInstanceOfType(SiteRedirectService.class); assertNotNull(redirectService); RedirectKey redirectKey = redirectService.getRedirectSite("simpleUserAgentRedirect", userAgentA, null); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite("simpleUserAgentRedirect", userAgentA, null); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite("simpleUserAgentRedirect", "asdf asdf as df FOO asdf asdf a sdf", null); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite("simpleUserAgentRedirect", "asdf asdf as df foo asdf asdf a sdf", null); assertEquals(RedirectType.REDIRECT, redirectKey.getType()); assertEquals("redirectA", redirectKey.getRedirect()); RequestLifeCycle.end(); } public void atestSimpleUserAgentRedirectsDisabled() { String originName = "simpleUserAgentRedirectDisabled"; PortalContainer container = getContainer(); RequestLifeCycle.begin(container); SiteRedirectService redirectService = (SiteRedirectService) container .getComponentInstanceOfType(SiteRedirectService.class); assertNotNull(redirectService); RedirectKey redirectKey = redirectService.getRedirectSite(originName, userAgentA, null); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, userAgentA, null); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, "asdf asdf as df FOO asdf asdf a sdf", null); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, "asdf asdf as df foo asdf asdf a sdf", null); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); RequestLifeCycle.end(); } public void atestUserAgentRedirects() { String originName = "userAgentRedirect"; PortalContainer container = getContainer(); RequestLifeCycle.begin(container); SiteRedirectService redirectService = (SiteRedirectService) container .getComponentInstanceOfType(SiteRedirectService.class); assertNotNull(redirectService); RedirectKey redirectKey = redirectService.getRedirectSite(originName, "sdf sdf asd foo asdf asf", null); assertEquals(RedirectType.REDIRECT, redirectKey.getType()); assertEquals("redirectA", redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, "sdf sdf asd Foo asdf asf", null); assertEquals(RedirectType.REDIRECT, redirectKey.getType()); assertEquals("redirectB", redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, "sdf sdf helloasd foo asdf asf", null); assertEquals(RedirectType.REDIRECT, redirectKey.getType()); assertEquals("redirectB", redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, "sdf abc helloasd foo bar asdf asf", null); assertEquals(RedirectType.REDIRECT, redirectKey.getType()); assertEquals("redirectB", redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, "sdf abc world helloasd foo bar asdf asf", null); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); RequestLifeCycle.end(); } public void atestSimpleDevicePropertyRedirect() { String originName = "simpleDevicePropertyRedirect"; PortalContainer container = getContainer(); RequestLifeCycle.begin(container); SiteRedirectService redirectService = (SiteRedirectService) container .getComponentInstanceOfType(SiteRedirectService.class); assertNotNull(redirectService); RedirectKey redirectKey = redirectService.getRedirectSite(originName, userAgentA, null); assertEquals(RedirectType.NEEDDEVICEINFO, redirectKey.getType()); assertNull(redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, userAgentA, new HashMap<String, String>()); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, userAgentA, createSimplePropertyMap()); assertEquals(RedirectType.REDIRECT, redirectKey.getType()); assertEquals("redirectA", redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, userAgentA, createPropertyMapA()); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); RequestLifeCycle.end(); } public void atestDevicePropertyRedirects() { String originName = "devicePropertyRedirect"; PortalContainer container = getContainer(); RequestLifeCycle.begin(container); SiteRedirectService redirectService = (SiteRedirectService) container .getComponentInstanceOfType(SiteRedirectService.class); assertNotNull(redirectService); RedirectKey redirectKey = redirectService.getRedirectSite(originName, userAgentA, null); assertEquals(RedirectType.NEEDDEVICEINFO, redirectKey.getType()); assertNull(redirectKey.getRedirect()); redirectKey = redirectService.getRedirectSite(originName, userAgentA, new HashMap<String, String>()); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); Map<String, String> deviceProperties = new HashMap<String, String>(); deviceProperties.put("foo", "bar"); redirectKey = redirectService.getRedirectSite(originName, userAgentA, deviceProperties); assertEquals(RedirectType.REDIRECT, redirectKey.getType()); assertEquals("redirectA", redirectKey.getRedirect()); deviceProperties.remove("foo"); deviceProperties.put("number", "12"); redirectKey = redirectService.getRedirectSite(originName, userAgentA, deviceProperties); assertEquals(RedirectType.REDIRECT, redirectKey.getType()); assertEquals("redirectB", redirectKey.getRedirect()); deviceProperties.put("number", "9"); redirectKey = redirectService.getRedirectSite(originName, userAgentA, deviceProperties); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); deviceProperties.put("number", "26.5"); redirectKey = redirectService.getRedirectSite(originName, userAgentA, deviceProperties); assertEquals(RedirectType.NOREDIRECT, redirectKey.getType()); assertNull(redirectKey.getRedirect()); deviceProperties.remove("number"); deviceProperties.put("hello", "world"); redirectKey = redirectService.getRedirectSite(originName, userAgentA, deviceProperties); assertEquals(RedirectType.REDIRECT, redirectKey.getType()); assertEquals("redirectC", redirectKey.getRedirect()); deviceProperties.put("hello", "WORLD"); redirectKey = redirectService.getRedirectSite(originName, userAgentA, deviceProperties); assertEquals(RedirectType.REDIRECT, redirectKey.getType()); assertEquals("redirectC", redirectKey.getRedirect()); RequestLifeCycle.end(); } public Map<String, String> createEmptyPropertyMap() { return new HashMap<String, String>(); } public Map<String, String> createSimplePropertyMap() { Map<String, String> simpleMap = new HashMap<String, String>(); simpleMap.put("foo", "bar"); return simpleMap; } public Map<String, String> createPropertyMapA() { Map<String, String> propertyMapA = new HashMap<String, String>(); propertyMapA.put("hello", "world"); propertyMapA.put(null, null); propertyMapA.put("", ""); propertyMapA.put("ABC", "123"); return propertyMapA; } public Map<String, String> createPropertyMapB() { Map<String, String> propertyMapB = new HashMap<String, String>(); propertyMapB.put("hello", "world"); propertyMapB.put(null, null); propertyMapB.put("", ""); propertyMapB.put("ABC", "123"); propertyMapB.put("foo", "BAR"); return propertyMapB; } public PortalContainer getContainer() { String configurationFile = "org/exoplatform/portal/config/TestRedirects-configuration.xml"; String origin = "testRedirects"; return getContainer(configurationFile, origin); } }