/* (c) 2014 - 2016 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.web.passwd; import static org.junit.Assert.*; import java.lang.reflect.Method; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.geoserver.security.config.PasswordPolicyConfig; import org.geoserver.security.validation.PasswordValidatorImpl; import org.geoserver.security.web.AbstractSecurityNamedServicePanelTest; import org.geoserver.security.web.AbstractSecurityPage; import org.geoserver.security.web.SecurityNamedServiceEditPage; import org.geoserver.security.web.SecurityNamedServiceNewPage; import org.geoserver.security.web.SecuritySettingsPage; import org.junit.Test; public class PasswordPolicyDetailsPanelTest extends AbstractSecurityNamedServicePanelTest { @Override protected String getDetailsFormComponentId() { return "passwordPolicyPanel:namedConfig"; } @Override protected AbstractSecurityPage getBasePage() { return new PasswordPage(); } @Override protected String getBasePanelId() { return "form:passwordPolicies"; } @Override protected Integer getTabIndex() { return 2; } @Override protected Class<? extends Component> getNamedServicesClass() { return PasswordPoliciesPanel.class; } protected void setDigitRequired(boolean value){ formTester.setValue("panel:content:digitRequired", value); } protected boolean getDigitRequired(boolean value){ return (Boolean) formTester.getForm().get("details:config.digitRequired").getDefaultModelObject(); } protected void setUpperCaseRequired(boolean value){ formTester.setValue("panel:content:uppercaseRequired", value); } protected boolean getUpperCaseRequired(boolean value){ return (Boolean) formTester.getForm().get("details:config.uppercaseRequired").getDefaultModelObject(); } protected void setLowerCaseRequired(boolean value){ formTester.setValue("panel:content:lowercaseRequired", value); } protected boolean getLowerCaseRequired(boolean value){ return (Boolean) formTester.getForm().get("details:config.lowercaseRequired").getDefaultModelObject(); } protected void setUnlimted(boolean value){ formTester.setValue("panel:content:unlimitedMaxLength", value); tester.executeAjaxEvent("form:panel:content:unlimitedMaxLength","click"); } protected boolean getUnlimted(boolean value){ return (Boolean) formTester.getForm().get("details:unlimited").getDefaultModelObject(); } protected void setMinLength(int value){ formTester.setValue("panel:content:minLength", new Integer(value).toString()); } protected int getMinLength(int value){ return (Integer) formTester.getForm().get("details:config.minLength").getDefaultModelObject(); } protected void setMaxLength(int value){ formTester.setValue("panel:content:maxLength:maxLength", new Integer(value).toString()); } protected int getMaxLength(int value){ return (Integer) formTester.getForm().get("details:config.maxLength").getDefaultModelObject(); } @Test public void testAddModify() throws Exception{ initializeForXML(); activatePanel(); assertEquals(2, countItems()); assertNotNull(getSecurityNamedServiceConfig("default")); assertNull(getSecurityNamedServiceConfig("xxxxxxxx")); // Test simple add clickAddNew(); tester.assertRenderedPage(SecurityNamedServiceNewPage.class); //detailsPage = (PasswordPolicyPage) tester.getLastRenderedPage(); newFormTester(); setSecurityConfigClassName(PasswordPolicyPanelInfo.class); newFormTester(); setSecurityConfigName("default2"); setMinLength(5); clickCancel(); tester.assertRenderedPage(basePage.getClass()); assertEquals(2, countItems()); assertNotNull(getSecurityNamedServiceConfig("default")); assertNotNull(getSecurityNamedServiceConfig("master")); clickAddNew(); //detailsPage = (PasswordPolicyPage) tester.getLastRenderedPage(); newFormTester(); setSecurityConfigClassName(PasswordPolicyPanelInfo.class); setUnlimted(false); tester.assertVisible("form:panel:content:maxLength:maxLength"); newFormTester(); setSecurityConfigName("default2"); setDigitRequired(true); setUpperCaseRequired(true); setLowerCaseRequired(true); setMinLength(2); setMaxLength(4); clickSave(); tester.assertRenderedPage(basePage.getClass()); assertEquals(3, countItems()); assertNotNull(getSecurityNamedServiceConfig("default")); assertNotNull(getSecurityNamedServiceConfig("master")); PasswordPolicyConfig pwConfig= (PasswordPolicyConfig) getSecurityNamedServiceConfig("default2"); assertNotNull(pwConfig); assertEquals("default2",pwConfig.getName()); assertEquals(PasswordValidatorImpl.class.getName(),pwConfig.getClassName()); assertTrue(pwConfig.isDigitRequired()); assertTrue(pwConfig.isLowercaseRequired()); assertTrue(pwConfig.isUppercaseRequired()); assertEquals(2, pwConfig.getMinLength()); assertEquals(4, pwConfig.getMaxLength()); // reload from manager pwConfig= (PasswordPolicyConfig) getSecurityManager().loadPasswordPolicyConfig("default2"); assertNotNull(pwConfig); assertEquals("default2",pwConfig.getName()); assertEquals(PasswordValidatorImpl.class.getName(),pwConfig.getClassName()); assertTrue(pwConfig.isDigitRequired()); assertTrue(pwConfig.isLowercaseRequired()); assertTrue(pwConfig.isUppercaseRequired()); assertEquals(2, pwConfig.getMinLength()); assertEquals(4, pwConfig.getMaxLength()); // test add with name clash clickAddNew(); newFormTester(); setSecurityConfigClassName(PasswordPolicyPanelInfo.class); newFormTester(); setSecurityConfigName("default2"); clickSave(); // should not work tester.assertRenderedPage(SecurityNamedServiceNewPage.class); testErrorMessagesWithRegExp(".*default2.*"); clickCancel(); tester.assertRenderedPage(basePage.getClass()); // end test add with name clash // start test modify clickNamedServiceConfig("default2"); tester.assertRenderedPage(SecurityNamedServiceEditPage.class); newFormTester("panel:panel:form"); formTester.setValue("panel:maxLength:maxLength", "27"); clickCancel(); tester.assertRenderedPage(basePage.getClass()); pwConfig= (PasswordPolicyConfig) getSecurityNamedServiceConfig("default2"); assertEquals(4,pwConfig.getMaxLength()); clickNamedServiceConfig("default2"); newFormTester("panel:panel:form"); //setUnlimted(true); formTester.setValue("panel:unlimitedMaxLength", true); tester.executeAjaxEvent("panel:panel:form:panel:unlimitedMaxLength","click"); tester.assertInvisible("panel:panel:form:panel:maxLength:maxLength"); newFormTester("panel:panel:form"); //setDigitRequired(false); formTester.setValue("panel:digitRequired", false); //setUpperCaseRequired(false); formTester.setValue("panel:uppercaseRequired", false); //setLowerCaseRequired(false); formTester.setValue("panel:lowercaseRequired", false); formTester.setValue("panel:minLength", "3"); //setMinLength(3); clickSave(); tester.assertRenderedPage(basePage.getClass()); pwConfig= (PasswordPolicyConfig ) getSecurityNamedServiceConfig("default2"); assertFalse(pwConfig.isDigitRequired()); assertFalse(pwConfig.isLowercaseRequired()); assertFalse(pwConfig.isUppercaseRequired()); assertEquals(3, pwConfig.getMinLength()); assertEquals(-1, pwConfig.getMaxLength()); pwConfig=getSecurityManager().loadPasswordPolicyConfig("default2"); assertFalse(pwConfig.isDigitRequired()); assertFalse(pwConfig.isLowercaseRequired()); assertFalse(pwConfig.isUppercaseRequired()); assertEquals(3, pwConfig.getMinLength()); assertEquals(-1, pwConfig.getMaxLength()); //doRemove("tabbedPanel:panel:removeSelected"); } @Test public void testRemove() throws Exception { initializeForXML(); PasswordPolicyConfig config = new PasswordPolicyConfig(); config.setName("default3"); config.setClassName(PasswordValidatorImpl.class.getCanonicalName()); getSecurityManager().savePasswordPolicy(config); activatePanel(); doRemove(null, "default3"); assertNull(getSecurityManager().loadPasswordPolicyConfig("default3")); } }