/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.security.validation;
import static org.geoserver.security.validation.PasswordPolicyException.IS_NULL;
import static org.geoserver.security.validation.PasswordPolicyException.MAX_LENGTH_$1;
import static org.geoserver.security.validation.PasswordPolicyException.MIN_LENGTH_$1;
import static org.geoserver.security.validation.PasswordPolicyException.NO_DIGIT;
import static org.geoserver.security.validation.PasswordPolicyException.NO_LOWERCASE;
import static org.geoserver.security.validation.PasswordPolicyException.NO_UPPERCASE;
import static org.geoserver.security.validation.PasswordPolicyException.RESERVED_PREFIX_$1;
import static org.junit.Assert.*;
import org.geoserver.security.config.PasswordPolicyConfig;
import org.geoserver.test.GeoServerMockTestSupport;
import org.junit.Before;
import org.junit.Test;
public class PasswordValidatorTest extends GeoServerMockTestSupport{
PasswordPolicyConfig config;
PasswordValidatorImpl validator;
@Before
public void init() throws Exception {
config = new PasswordPolicyConfig();
validator = new PasswordValidatorImpl(getSecurityManager());
validator.setConfig(config);
}
@Test
public void testPasswords() throws PasswordPolicyException{
checkForException(null, IS_NULL);
validator.validatePassword("".toCharArray());
validator.validatePassword("a".toCharArray());
checkForException("plain:a", RESERVED_PREFIX_$1,"plain:");
checkForException("crypt1:a", RESERVED_PREFIX_$1,"crypt1:");
checkForException("digest1:a", RESERVED_PREFIX_$1,"digest1:");
validator.validatePassword("plain".toCharArray());
validator.validatePassword("plaina".toCharArray());
config.setMinLength(2);
checkForException("a", MIN_LENGTH_$1,2);
validator.validatePassword("aa".toCharArray());
config.setMaxLength(10);
checkForException("01234567890", MAX_LENGTH_$1,10);
validator.validatePassword("0123456789".toCharArray());
config.setDigitRequired(true);
checkForException("abcdef", NO_DIGIT);
validator.validatePassword("abcde4".toCharArray());
config.setUppercaseRequired(true);
checkForException("abcdef4", NO_UPPERCASE);
validator.validatePassword("abcde4F".toCharArray());
config.setLowercaseRequired(true);
checkForException("ABCDE4F", NO_LOWERCASE);
validator.validatePassword("abcde4F".toCharArray());
}
protected void checkForException(String password, String id,Object... params) {
try {
validator.validatePassword(password != null ? password.toCharArray() : null);
} catch (PasswordPolicyException ex) {
assertEquals(id,ex.getId());
assertEquals(params.length, ex.getArgs().length);
for (int i = 0; i < params.length ;i++) {
assertEquals(params[i], ex.getArgs()[i]);
}
}
}
}