/* (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.web.jdbc; import static org.junit.Assert.*; import java.util.Arrays; import org.apache.wicket.Component; import org.apache.wicket.feedback.FeedbackMessage; import org.apache.wicket.markup.html.form.FormComponent; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.util.tester.FormTester; import org.geoserver.data.test.SystemTestData; import org.geoserver.security.config.SecurityManagerConfig; import org.geoserver.security.jdbc.config.JDBCSecurityServiceConfig; import org.geoserver.security.jdbc.config.JDBCUserGroupServiceConfig; import org.geoserver.security.web.AbstractSecurityWicketTestSupport; import org.geoserver.web.ComponentBuilder; import org.geoserver.web.FormTestPage; import org.junit.Test; public class JDBCConnectionPanelTest extends AbstractSecurityWicketTestSupport { JDBCConnectionPanel<JDBCSecurityServiceConfig> current; String relBase = "panel:cxPanelContainer:cxPanel:"; String base = "form:" + relBase; JDBCSecurityServiceConfig config; protected void setupPanel(final boolean jndi) { config = new JDBCUserGroupServiceConfig(); config.setJndi(jndi); setupPanel(config); } @Override protected void onSetUp(SystemTestData testData) throws Exception { super.onSetUp(testData); // disable url parameter encoding for these tests SecurityManagerConfig config = getSecurityManager().getSecurityConfig(); config.setEncryptingUrlParams(false); getSecurityManager().saveSecurityConfig(config); } protected void setupPanel(JDBCSecurityServiceConfig theConfig) { this.config = theConfig; tester.startPage(new FormTestPage(new ComponentBuilder() { private static final long serialVersionUID = 1L; public Component buildComponent(String id) { return current = new JDBCConnectionPanel(id, new Model(config)); }; }, new CompoundPropertyModel(config))); } @Test public void testJNDI() throws Exception { setupPanel(true); tester.assertRenderedPage(FormTestPage.class); assertTrue(config.isJndi()); assertVisibility(true); FormTester ftester = tester.newFormTester("form"); ftester.setValue(relBase+ "jndiName", "jndiurl"); ftester.submit(); tester.assertNoErrorMessage(); assertEquals("jndiurl", config.getJndiName()); } @Test public void testConnectionTestJNDI() throws Exception { JDBCUserGroupServiceConfig theConfig = new JDBCUserGroupServiceConfig(); theConfig.setJndi(true); theConfig.setJndiName("jndiurl"); setupPanel(theConfig); tester.assertRenderedPage(FormTestPage.class); tester.clickLink("form:panel:cxTest", true); assertEquals(1, tester.getMessages(FeedbackMessage.ERROR).size()); } @Test public void testBasic() throws Exception { setupPanel(false); tester.assertRenderedPage(FormTestPage.class); assertFalse(config.isJndi()); assertVisibility(false); FormTester ftester = tester.newFormTester("form"); ftester.setValue(relBase+"userName", "user1" ); ftester.setValue(relBase+"password", "pw" ); ftester.setValue(relBase+"driverClassName", "org.h2.Driver" ); ftester.setValue(relBase+"connectURL", "jdbc:h2" ); ftester.submit(); tester.assertNoErrorMessage(); assertEquals("user1", config.getUserName()); assertEquals("pw", config.getPassword()); assertEquals("org.h2.Driver", config.getDriverClassName()); assertEquals("jdbc:h2", config.getConnectURL()); } @Test public void testConncetionTestBasic() throws Exception { JDBCUserGroupServiceConfig theConfig = new JDBCUserGroupServiceConfig(); theConfig.setUserName("user1"); theConfig.setPassword("pw"); theConfig.setDriverClassName("org.h2.Driver"); theConfig.setConnectURL("jdbc:foo"); setupPanel(theConfig); tester.assertRenderedPage(FormTestPage.class); tester.clickLink("form:panel:cxTest", true); assertEquals(1, tester.getMessages(FeedbackMessage.ERROR).size()); } @Test public void testConnectionTestBasicOK() throws Exception { JDBCUserGroupServiceConfig theConfig = new JDBCUserGroupServiceConfig(); theConfig.setUserName("user1"); theConfig.setPassword("pw"); theConfig.setDriverClassName("org.h2.Driver"); theConfig.setConnectURL("jdbc:h2:file:target/db"); setupPanel(theConfig); tester.assertRenderedPage(FormTestPage.class); tester.clickLink("form:panel:cxTest", true); assertEquals(1, tester.getMessages(FeedbackMessage.INFO).size()); } protected void assertVisibility(boolean jndi) { if (jndi) { tester.assertComponent(base+"jndiName", TextField.class); tester.assertVisible(base+"jndiName"); } else { for (String c : Arrays.asList(new String[]{"driverClassName", "connectURL", "userName", "password"})) { tester.assertComponent(base+ c, FormComponent.class); tester.assertVisible(base + c); } } } }