/* (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.usergroup; import static org.junit.Assert.*; import java.lang.reflect.Method; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.html.form.DropDownChoice; import org.geoserver.security.password.GeoServerDigestPasswordEncoder; import org.geoserver.security.password.GeoServerPlainTextPasswordEncoder; 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.UserGroupRoleServicesPage; import org.geoserver.security.xml.XMLUserGroupService; import org.geoserver.security.xml.XMLUserGroupServiceConfig; import org.junit.Test; public class XMLUserGroupConfigDetailsPanelTest extends AbstractSecurityNamedServicePanelTest { //UserGroupTabbedPage detailsPage; @Override protected String getDetailsFormComponentId() { return "UserGroupTabbedPage:panel:namedConfig"; } @Override protected AbstractSecurityPage getBasePage() { return new UserGroupRoleServicesPage(); } @Override protected String getBasePanelId() { return "panel:panel:userGroupServices"; } @Override protected Integer getTabIndex() { return 0; } @Override protected Class<? extends Component> getNamedServicesClass() { return UserGroupServicesPanel.class; } protected void setPasswordEncoderName(String encName){ formTester.setValue("panel:content:passwordEncoderName", encName); } protected String getPasswordEncoderName(){ return formTester.getForm().get("details:config.passwordEncoderName").getDefaultModelObjectAsString(); } protected void setPasswordPolicy(String policyName){ formTester.setValue("panel:content:passwordPolicyName", policyName); } protected String getPasswordPolicyName(){ return formTester.getForm().get("details:config.passwordPolicyName").getDefaultModelObjectAsString(); } protected void setFileName(String fileName){ formTester.setValue("panel:content:fileName",fileName); } protected String getFileName(){ return formTester.getForm().get("details:config.fileName").getDefaultModelObjectAsString(); } protected void setCheckInterval(Integer interval){ formTester.setValue("panel:content:checkInterval",interval.toString()); } protected Integer getCheckInterval (){ String temp= formTester.getForm().get("details:config.checkInterval").getDefaultModelObjectAsString(); if (temp == null || temp.length()==0) return 0; return new Integer(temp); } protected void setValidating(Boolean flag){ formTester.setValue("panel:content:validating",flag); } protected Boolean getValidating(){ String temp= formTester.getForm().get("details:config.validating").getDefaultModelObjectAsString(); return Boolean.valueOf(temp); } @Test public void testAddModify() throws Exception{ initializeForXML(); activatePanel(); assertEquals(2, countItems()); assertNotNull(getSecurityNamedServiceConfig("default")); assertNotNull(getSecurityNamedServiceConfig("test")); assertNull(getSecurityNamedServiceConfig("xxxxxxxx")); // Test simple add clickAddNew(); tester.assertRenderedPage(SecurityNamedServiceNewPage.class); setSecurityConfigClassName(XMLUserGroupServicePanelInfo.class); newFormTester(); setSecurityConfigName("default2"); setFileName("abc.xml"); setCheckInterval(5000); setValidating(true); clickCancel(); tester.assertRenderedPage(basePage.getClass()); assertEquals(2, countItems()); assertNotNull(getSecurityNamedServiceConfig("default")); clickAddNew(); tester.assertRenderedPage(SecurityNamedServiceNewPage.class); setSecurityConfigClassName(XMLUserGroupServicePanelInfo.class); newFormTester(); setPasswordEncoderName(getDigestPasswordEncoder().getName()); setPasswordPolicy("default"); setSecurityConfigName("default2"); setFileName("abc.xml"); setCheckInterval(5000); setValidating(true); clickSave(); tester.assertNoErrorMessage(); tester.assertRenderedPage(basePage.getClass()); assertEquals(3, countItems()); assertNotNull(getSecurityNamedServiceConfig("default")); XMLUserGroupServiceConfig xmlConfig= (XMLUserGroupServiceConfig) getSecurityNamedServiceConfig("default2"); assertNotNull(xmlConfig); assertEquals("default2",xmlConfig.getName()); assertEquals(XMLUserGroupService.class.getName(),xmlConfig.getClassName()); assertEquals(getDigestPasswordEncoder().getName(),xmlConfig.getPasswordEncoderName()); assertEquals(PasswordValidatorImpl.DEFAULT_NAME,xmlConfig.getPasswordPolicyName()); assertEquals("abc.xml",xmlConfig.getFileName()); assertEquals(5000,xmlConfig.getCheckInterval()); assertEquals(true,xmlConfig.isValidating()); // reload from manager xmlConfig= (XMLUserGroupServiceConfig) getSecurityManager().loadUserGroupServiceConfig("default2"); assertNotNull(xmlConfig); assertEquals("default2",xmlConfig.getName()); assertEquals(getDigestPasswordEncoder().getName(),xmlConfig.getPasswordEncoderName()); assertEquals(PasswordValidatorImpl.DEFAULT_NAME,xmlConfig.getPasswordPolicyName()); assertEquals("abc.xml",xmlConfig.getFileName()); assertEquals(5000,xmlConfig.getCheckInterval()); assertEquals(true,xmlConfig.isValidating()); // test add with name clash clickAddNew(); //detailsPage = (UserGroupTabbedPage) tester.getLastRenderedPage(); newFormTester(); setSecurityConfigClassName(XMLUserGroupServicePanelInfo.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("default"); tester.assertRenderedPage(SecurityNamedServiceEditPage.class); //detailsPage = (UserGroupTabbedPage) tester.getLastRenderedPage(); newFormTester("panel:panel:panel:form"); formTester.setValue("panel:passwordPolicyName", PasswordValidatorImpl.MASTERPASSWORD_NAME); formTester.setValue("panel:passwordEncoderName", getPlainTextPasswordEncoder().getName()); assertEquals(getDigestPasswordEncoder().getName(),xmlConfig.getPasswordEncoderName()); assertEquals(PasswordValidatorImpl.DEFAULT_NAME,xmlConfig.getPasswordPolicyName()); formTester.setValue("panel:checkInterval", "5001"); formTester.setValue("panel:validating", true); clickCancel(); tester.assertRenderedPage(basePage.getClass()); xmlConfig= (XMLUserGroupServiceConfig) getSecurityNamedServiceConfig("default"); assertEquals(getDigestPasswordEncoder().getName(),xmlConfig.getPasswordEncoderName()); assertEquals(PasswordValidatorImpl.DEFAULT_NAME,xmlConfig.getPasswordPolicyName()); assertEquals("users.xml",xmlConfig.getFileName()); assertEquals(10000,xmlConfig.getCheckInterval()); assertEquals(true,xmlConfig.isValidating()); clickNamedServiceConfig("default2"); //detailsPage = (UserGroupTabbedPage) tester.getLastRenderedPage(); newFormTester("panel:panel:panel:form"); //setPasswordPolicy(PasswordValidatorImpl.MASTERPASSWORD_NAME); formTester.setValue("panel:passwordPolicyName", PasswordValidatorImpl.MASTERPASSWORD_NAME); // setPasswordEncoderName(GeoserverPlainTextPasswordEncoder.BeanName); formTester.setValue("panel:checkInterval", "5001"); //setCheckInterval(5001); formTester.setValue("panel:validating", false); //setValidating(false); clickSave(); tester.assertNoErrorMessage(); tester.assertRenderedPage(basePage.getClass()); xmlConfig= (XMLUserGroupServiceConfig) getSecurityNamedServiceConfig("default2"); assertEquals(getDigestPasswordEncoder().getName(),xmlConfig.getPasswordEncoderName()); assertEquals(PasswordValidatorImpl.MASTERPASSWORD_NAME,xmlConfig.getPasswordPolicyName()); assertEquals("abc.xml",xmlConfig.getFileName()); assertEquals(5001,xmlConfig.getCheckInterval()); assertEquals(false,xmlConfig.isValidating()); // reload from manager xmlConfig=(XMLUserGroupServiceConfig) getSecurityManager().loadUserGroupServiceConfig("default2"); assertEquals(getDigestPasswordEncoder().getName(),xmlConfig.getPasswordEncoderName()); assertEquals(PasswordValidatorImpl.MASTERPASSWORD_NAME,xmlConfig.getPasswordPolicyName()); assertEquals("abc.xml",xmlConfig.getFileName()); assertEquals(5001,xmlConfig.getCheckInterval()); assertEquals(false,xmlConfig.isValidating()); } @Test public void testRemove() throws Exception { initializeForXML(); XMLUserGroupServiceConfig config = new XMLUserGroupServiceConfig(); config.setName("default3"); config.setClassName(XMLUserGroupService.class.getCanonicalName()); config.setPasswordEncoderName(getPlainTextPasswordEncoder().getName()); config.setPasswordPolicyName("default"); config.setFileName("foo.xml"); getSecurityManager().saveUserGroupService(config); activatePanel(); doRemove("tabbedPanel:panel:removeSelected", "default3"); assertNull(getSecurityManager().loadUserGroupService("default3")); } }