From cfa290756c6fdd1798374de78433bf174e555d4d Mon Sep 17 00:00:00 2001 From: Scott Battaglia Date: Thu, 31 Jan 2008 16:09:39 +0000 Subject: [PATCH] CASC-36 added test cases and fixed bug --- cas-client-core/pom.xml | 24 ++++++++- .../validation/Cas20ProxyTicketValidator.java | 7 ++- .../Cas20ProxyTicketValidatorBeanInfo.java | 22 ++++++-- .../validation/ProxyListPropertyEditor.java | 51 ++++++++++++------- .../Cas20ProxyTicketValidatorTests.java | 19 +++++++ .../resources/cas20ProxyTicketValidator.xml | 23 +++++++++ 6 files changed, 121 insertions(+), 25 deletions(-) create mode 100644 cas-client-core/src/test/resources/cas20ProxyTicketValidator.xml diff --git a/cas-client-core/pom.xml b/cas-client-core/pom.xml index 9f6f4d7..488f5ce 100644 --- a/cas-client-core/pom.xml +++ b/cas-client-core/pom.xml @@ -99,6 +99,28 @@ 1.1b jar compile - + + + + org.springframework + spring-bean + 2.5.1 + test + + + + org.springframework + spring-core + 2.5.1 + test + + + + org.springframework + spring-context + 2.5.1 + test + + diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java index 18ea289..5ef6787 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java @@ -1,3 +1,8 @@ +/* + * Copyright 2007 The JA-SIG Collaborative. All rights reserved. See license + * distributed with this file and available online at + * http://www.ja-sig.org/products/cas/overview/license/index.html + */ package org.jasig.cas.client.validation; import org.jasig.cas.client.util.XmlUtils; @@ -39,7 +44,7 @@ public final class Cas20ProxyTicketValidator extends Cas20ServiceTicketValidator } for (Iterator iter = this.allowedProxyChains.iterator(); iter.hasNext();) { - if (Arrays.equals(proxiedList, (Object[]) iter.next())) { + if (Arrays.equals(proxiedList, (String[]) iter.next())) { return; } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorBeanInfo.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorBeanInfo.java index bb8b07d..9883645 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorBeanInfo.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorBeanInfo.java @@ -1,10 +1,16 @@ +/* + * Copyright 2007 The JA-SIG Collaborative. All rights reserved. See license + * distributed with this file and available online at + * http://www.ja-sig.org/products/cas/overview/license/index.html + */ package org.jasig.cas.client.validation; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.beans.PropertyEditor; import java.beans.SimpleBeanInfo; -import java.util.List; + +import org.springframework.beans.propertyeditors.CustomBooleanEditor; /** * BeanInfo support for using this class with Spring. Configures a ProxyListPropertyEditor to be used with the @@ -18,13 +24,19 @@ public final class Cas20ProxyTicketValidatorBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { try { - final PropertyEditor propertyEditor = new ProxyListPropertyEditor(); - final PropertyDescriptor descriptor = new PropertyDescriptor("allowedProxyChains", List.class) { + final PropertyDescriptor descriptor = new PropertyDescriptor("allowedProxyChains", Cas20ProxyTicketValidator.class, null, "setAllowedProxyChains") { public PropertyEditor createPropertyEditor(final Object bean) { - return propertyEditor; + return new ProxyListPropertyEditor(); } }; - return new PropertyDescriptor[] {descriptor}; + + final PropertyDescriptor acceptAnyProxy = new PropertyDescriptor("acceptAnyProxy", Cas20ProxyTicketValidator.class, null, "setAcceptAnyProxy") { + public PropertyEditor createPropertyEditor(final Object bean) { + return new CustomBooleanEditor(true); + } + }; + + return new PropertyDescriptor[] {descriptor, acceptAnyProxy}; } catch (final IntrospectionException e) { throw new RuntimeException(e); } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyListPropertyEditor.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyListPropertyEditor.java index 05a1615..ffaa0f5 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyListPropertyEditor.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyListPropertyEditor.java @@ -1,35 +1,50 @@ +/* + * Copyright 2007 The JA-SIG Collaborative. All rights reserved. See license + * distributed with this file and available online at + * http://www.ja-sig.org/products/cas/overview/license/index.html + */ package org.jasig.cas.client.validation; import java.beans.PropertyEditorSupport; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.StringReader; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; +import org.jasig.cas.client.util.CommonUtils; + /** * Convert a String-formatted list of acceptable proxies to an array. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.1 - * + * */ public final class ProxyListPropertyEditor extends PropertyEditorSupport { - /** - * The new list of proxies to create. Its a list of String arrays. - */ - private final List proxyChains = new ArrayList(); + public void setAsText(final String text) throws IllegalArgumentException { + final BufferedReader reader = new BufferedReader(new StringReader(text)); + final List proxyChains = new ArrayList(); - public Object getValue() { - return this.proxyChains; - } + try { + String line; + while ((line = reader.readLine()) != null) { + if (CommonUtils.isNotBlank(line)) { + proxyChains.add(line.trim().split(" ")); + } + } + } catch (final IOException e) { + // ignore this + } finally { + try { + reader.close(); + } catch (final IOException e) { + // nothing to do + } + } - /** Converts the List of Strings into a list of arrays. */ - public void setValue(final Object o) { - final List values = (List) o; - - for (final Iterator iter = values.iterator(); iter.hasNext();) { - proxyChains.add(((String) iter.next()).split(" ")); - } - } + setValue(proxyChains); + } } diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorTests.java index 43398a6..aa0f057 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorTests.java @@ -9,6 +9,8 @@ import org.jasig.cas.client.PublicTestHttpServer; import org.jasig.cas.client.proxy.ProxyGrantingTicketStorage; import org.jasig.cas.client.proxy.ProxyGrantingTicketStorageImpl; import org.jasig.cas.client.proxy.ProxyRetriever; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; import java.io.UnsupportedEncodingException; import java.util.ArrayList; @@ -84,4 +86,21 @@ public final class Cas20ProxyTicketValidatorTests extends // expected } } + + public void testConstructionFromSpringBean() throws TicketValidationException, + UnsupportedEncodingException { + final ApplicationContext context = new ClassPathXmlApplicationContext("classpath:cas20ProxyTicketValidator.xml"); + final Cas20ProxyTicketValidator v = (Cas20ProxyTicketValidator) context.getBean("proxyTicketValidator"); + final Cas20ProxyTicketValidator v2 = (Cas20ProxyTicketValidator) context.getBean("proxyTicketValidatorWithAllowAnyProxy"); + + final String USERNAME = "username"; + final String RESPONSE = "usernamePGTIOU-84678-8a9d...proxy1proxy2proxy3"; + PublicTestHttpServer.instance().content = RESPONSE + .getBytes(PublicTestHttpServer.instance().encoding); + + final Assertion assertion = v.validate("test", + "test"); + assertEquals(USERNAME, assertion.getPrincipal().getName()); + + } } diff --git a/cas-client-core/src/test/resources/cas20ProxyTicketValidator.xml b/cas-client-core/src/test/resources/cas20ProxyTicketValidator.xml new file mode 100644 index 0000000..16ec091 --- /dev/null +++ b/cas-client-core/src/test/resources/cas20ProxyTicketValidator.xml @@ -0,0 +1,23 @@ + + + + + + + test test2 test3 test4 test5 + mytest mytest1 mytest2 mytest3 + proxy1 proxy2 proxy3 + + + + + + + + \ No newline at end of file