/* (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.role;
import static org.junit.Assert.*;
import java.io.IOException;
import org.apache.wicket.Component;
import org.geoserver.security.GeoServerRoleService;
import org.geoserver.security.GeoServerSecurityManager;
import org.geoserver.security.config.SecurityRoleServiceConfig;
import org.geoserver.security.validation.SecurityConfigException;
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.XMLRoleService;
import org.geoserver.security.xml.XMLRoleServiceConfig;
import org.junit.Before;
import org.junit.Test;
public class XMLRoleConfigDetailsPanelTest extends AbstractSecurityNamedServicePanelTest {
@Override
protected String getDetailsFormComponentId() {
return "RoleTabbedPage:panel:namedConfig";
}
@Override
protected AbstractSecurityPage getBasePage() {
return new UserGroupRoleServicesPage();
}
@Override
protected String getBasePanelId() {
return "panel:panel:roleServices";
}
@Override
protected Integer getTabIndex() {
return 1;
}
@Override
protected Class<? extends Component> getNamedServicesClass() {
return RoleServicesPanel.class;
}
protected void setAdminRoleName(String roleName){
formTester.setValue("panel:content:adminRoleName",roleName);
}
protected String getAdminRoleName(){
return formTester.getForm().get("details:config.adminRoleName").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);
}
@Before
public void removeRoleService2() throws Exception {
GeoServerSecurityManager secMgr = getSecurityManager();
if (secMgr.listRoleServices().contains("default2")) {
SecurityRoleServiceConfig roleService = secMgr.loadRoleServiceConfig("default2");
secMgr.removeRoleService(roleService);
}
}
@Test
public void testAddModifyRemove() throws Exception{
initializeForXML();
activatePanel();
assertEquals(2, countItems());
assertNotNull(getSecurityNamedServiceConfig("default"));
assertNotNull(getSecurityNamedServiceConfig("test"));
assertNull(getSecurityNamedServiceConfig("xxxxxxxx"));
// Test simple add
clickAddNew();
tester.assertRenderedPage(SecurityNamedServiceNewPage.class);
//detailsPage = (RoleTabbedPage) tester.getLastRenderedPage();
newFormTester();
setSecurityConfigClassName(XMLRoleServicePanelInfo.class);
newFormTester();
setSecurityConfigName("default2");
setFileName("abc.xml");
setCheckInterval(5000);
setValidating(true);
clickCancel();
tester.assertRenderedPage(basePage.getClass());
assertEquals(2, countItems());
assertNotNull(getSecurityNamedServiceConfig("default"));
clickAddNew();
newFormTester();
setSecurityConfigClassName(XMLRoleServicePanelInfo.class);
newFormTester();
setSecurityConfigName("default2");
setFileName("abc.xml");
setCheckInterval(5000);
setValidating(true);
tester.assertRenderedPage(SecurityNamedServiceNewPage.class);
clickSave();
tester.assertRenderedPage(basePage.getClass());
assertEquals(3, countItems());
assertNotNull(getSecurityNamedServiceConfig("default"));
XMLRoleServiceConfig xmlConfig=
(XMLRoleServiceConfig)
getSecurityNamedServiceConfig("default2");
assertNotNull(xmlConfig);
assertEquals("default2",xmlConfig.getName());
assertEquals(XMLRoleService.class.getName(),xmlConfig.getClassName());
assertNull(xmlConfig.getAdminRoleName());
assertEquals("abc.xml",xmlConfig.getFileName());
assertEquals(5000,xmlConfig.getCheckInterval());
assertEquals(true,xmlConfig.isValidating());
// reload from manager
xmlConfig=
(XMLRoleServiceConfig)
getSecurityManager().loadRoleServiceConfig("default2");
assertNotNull(xmlConfig);
assertEquals("default2",xmlConfig.getName());
assertEquals(XMLRoleService.class.getName(),xmlConfig.getClassName());
assertNull(xmlConfig.getAdminRoleName());
assertEquals("abc.xml",xmlConfig.getFileName());
assertEquals(5000,xmlConfig.getCheckInterval());
assertEquals(true,xmlConfig.isValidating());
// test add with name clash
clickAddNew();
//detailsPage = (RoleTabbedPage) tester.getLastRenderedPage();
newFormTester();
setSecurityConfigClassName(XMLRoleServicePanelInfo.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 = (RoleTabbedPage) tester.getLastRenderedPage();
newFormTester("panel:panel:panel:form");
tester.debugComponentTrees();
formTester.setValue("panel:adminRoleName", "ROLE_ADMINISTRATOR");
//setFileName("abcd.xml");
formTester.setValue("panel:checkInterval", "5001");
//setCheckInterval(5001);
formTester.setValue("panel:validating", true);
//setValidating(true);
clickCancel();
tester.assertRenderedPage(basePage.getClass());
xmlConfig=
(XMLRoleServiceConfig)
getSecurityNamedServiceConfig("default");
assertEquals(XMLRoleService.DEFAULT_LOCAL_ADMIN_ROLE,xmlConfig.getAdminRoleName());
assertEquals(XMLRoleService.DEFAULT_LOCAL_GROUP_ADMIN_ROLE,xmlConfig.getGroupAdminRoleName());
assertEquals("roles.xml",xmlConfig.getFileName());
assertEquals(10000,xmlConfig.getCheckInterval());
assertEquals(true,xmlConfig.isValidating());
clickNamedServiceConfig("default2");
//detailsPage = (RoleTabbedPage) tester.getLastRenderedPage();
newFormTester("panel:panel:panel:form");
formTester.setValue("panel:adminRoleName", null);
//setFileName("abcd.xml");
formTester.setValue("panel:checkInterval", "5001");
//setCheckInterval(5001);
formTester.setValue("panel:validating", false);
clickSave();
tester.assertRenderedPage(basePage.getClass());
xmlConfig=
(XMLRoleServiceConfig)
getSecurityNamedServiceConfig("default2");
assertNull(xmlConfig.getAdminRoleName());
assertEquals("abc.xml",xmlConfig.getFileName());
assertEquals(5001,xmlConfig.getCheckInterval());
assertEquals(false,xmlConfig.isValidating());
// reload from manager
xmlConfig=(XMLRoleServiceConfig)
getSecurityManager().loadRoleServiceConfig("default2");
assertNull(xmlConfig.getAdminRoleName());
assertEquals("abc.xml",xmlConfig.getFileName());
assertEquals(5001,xmlConfig.getCheckInterval());
assertEquals(false,xmlConfig.isValidating());
//doRemove("tabbedPanel:panel:removeSelected");
}
@Test
public void testRemove() throws Exception {
initializeForXML();
XMLRoleServiceConfig config = new XMLRoleServiceConfig();
config.setName("default2");
config.setClassName(XMLRoleService.class.getCanonicalName());
config.setFileName("foo.xml");
getSecurityManager().saveRoleService(config);
activatePanel();
doRemove(null, "default2");
assertNull(getSecurityManager().loadRoleService("default2"));
}
}