diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyReceivingTicketValidationFilter.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyReceivingTicketValidationFilter.java index 3642705..61d3742 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyReceivingTicketValidationFilter.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyReceivingTicketValidationFilter.java @@ -91,7 +91,7 @@ public class Cas20ProxyReceivingTicketValidationFilter extends AbstractTicketVal if (CommonUtils.isNotBlank(allowAnyProxy) || CommonUtils.isNotBlank(allowedProxyChains)) { final Cas20ProxyTicketValidator v = new Cas20ProxyTicketValidator(casServerUrlPrefix); v.setAcceptAnyProxy(parseBoolean(allowAnyProxy)); - v.setAllowedProxyChains(new ProxyList(constructListOfProxies(allowedProxyChains))); + v.setAllowedProxyChains(createProxyList(allowedProxyChains)); validator = v; } else { validator = new Cas20ServiceTicketValidator(casServerUrlPrefix); @@ -117,17 +117,15 @@ public class Cas20ProxyReceivingTicketValidationFilter extends AbstractTicketVal return validator; } - protected final List constructListOfProxies(final String proxies) { + protected final ProxyList createProxyList(final String proxies) { if (CommonUtils.isBlank(proxies)) { - return new ArrayList(); + return new ProxyList(); } - final String[] splitProxies = proxies.split("\n"); - final List items = Arrays.asList(splitProxies); final ProxyListEditor editor = new ProxyListEditor(); - editor.setValue(items); - return (List) editor.getValue(); - } + editor.setAsText(proxies); + return (ProxyList) editor.getValue(); + } public void destroy() { super.destroy(); diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyList.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyList.java index 107b042..0105713 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyList.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyList.java @@ -5,6 +5,8 @@ */ package org.jasig.cas.client.validation; +import org.jasig.cas.client.util.CommonUtils; + import java.util.ArrayList; import java.util.List; import java.util.Iterator; @@ -22,6 +24,13 @@ public final class ProxyList { private final List proxyChains; public ProxyList(final List proxyChains) { + CommonUtils.assertNotNull(proxyChains, "List of proxy chains cannot be null."); + + // Assert that all entries in the list are String[] + for (final Iterator iter = proxyChains.iterator(); iter.hasNext();) { + CommonUtils.assertTrue(iter.next() instanceof String[], "Proxy chains must contain String[] items exclusively."); + } + this.proxyChains = proxyChains; } diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyReceivingTicketValidationFilterTest.java b/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyReceivingTicketValidationFilterTests.java similarity index 69% rename from cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyReceivingTicketValidationFilterTest.java rename to cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyReceivingTicketValidationFilterTests.java index 432bb58..daa2556 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyReceivingTicketValidationFilterTest.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyReceivingTicketValidationFilterTests.java @@ -1,21 +1,21 @@ package org.jasig.cas.client.validation; import junit.framework.TestCase; - -import java.util.Timer; -import java.util.TimerTask; - import org.jasig.cas.client.proxy.CleanUpTimerTask; import org.jasig.cas.client.proxy.ProxyGrantingTicketStorage; import org.jasig.cas.client.proxy.ProxyGrantingTicketStorageImpl; import org.jasig.cas.client.util.MethodFlag; +import org.springframework.mock.web.MockFilterConfig; + +import java.util.Timer; +import java.util.TimerTask; /** - * Unit test for {@link Cas20ProxyReceivingTicketValidationFilter} - * + * Unit test for {@link org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter} + * * @author Brad Cupit (brad [at] lsu {dot} edu) */ -public class Cas20ProxyReceivingTicketValidationFilterTest extends TestCase { +public class Cas20ProxyReceivingTicketValidationFilterTests extends TestCase { private final Timer defaultTimer = new Timer(true); @@ -59,7 +59,7 @@ public class Cas20ProxyReceivingTicketValidationFilterTest extends TestCase { filter.setTimerTask(defaultTimerTask); filter.init(); filter.destroy(); - + assertTrue(cancelMethodFlag.wasCalled()); } @@ -115,11 +115,11 @@ public void testCallsCleanAllOnSchedule() throws Exception { filter.destroy(); } - + public void testThrowsForNullStorage() throws Exception { Cas20ProxyReceivingTicketValidationFilter filter = newCas20ProxyReceivingTicketValidationFilter(); filter.setProxyGrantingTicketStorage(null); - + try { filter.init(); fail("expected an exception due to null ProxyGrantingTicketStorage"); @@ -127,15 +127,50 @@ public void testCallsCleanAllOnSchedule() throws Exception { // test passes } } - + + public void testGetTicketValidator() throws Exception { + Cas20ProxyReceivingTicketValidationFilter filter = newCas20ProxyReceivingTicketValidationFilter(); + filter.setProxyGrantingTicketStorage(storage); + filter.setMillisBetweenCleanUps(250); + filter.setTimer(defaultTimer); + filter.setTimerTask(new TimerTask() { + public void run() {} + }); + filter.init(); + + // Test case #1 + final MockFilterConfig config1 = new MockFilterConfig(); + config1.addInitParameter("allowedProxyChains", "https://a.example.com"); + config1.addInitParameter("casServerUrlPrefix", "https://cas.jasig.org/"); + assertNotNull(filter.getTicketValidator(config1)); + + // Test case #2 + final MockFilterConfig config2 = new MockFilterConfig(); + config2.addInitParameter( + "allowedProxyChains", + "https://a.example.com https://b.example.com"); + config2.addInitParameter("casServerUrlPrefix", "https://cas.jasig.org/"); + assertNotNull(filter.getTicketValidator(config2)); + + // Test case #3 + final MockFilterConfig config3 = new MockFilterConfig(); + config3.addInitParameter( + "allowedProxyChains", + "https://a.example.com https://b.example.com\nhttps://c.example.com"); + config3.addInitParameter("casServerUrlPrefix", "https://cas.jasig.org/"); + assertNotNull(filter.getTicketValidator(config3)); + } + + + /** - * construct a working {@link Cas20ProxyReceivingTicketValidationFilter} + * construct a working {@link org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter} */ private Cas20ProxyReceivingTicketValidationFilter newCas20ProxyReceivingTicketValidationFilter() { final Cas20ProxyReceivingTicketValidationFilter filter = new Cas20ProxyReceivingTicketValidationFilter(); filter.setServerName("localhost"); filter.setTicketValidator(new Cas20ProxyTicketValidator("")); - + return filter; } -} +} \ No newline at end of file