/* (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.jdbcconfig.config; import static org.junit.Assert.*; import static org.hamcrest.CoreMatchers.*; import java.util.Collection; import org.geoserver.catalog.WorkspaceInfo; import org.geoserver.catalog.impl.CatalogImpl; import org.geoserver.config.GeoServerFacade; import org.geoserver.config.GeoServerImplTest; import org.geoserver.config.GeoServerInfo; import org.geoserver.config.ServiceInfo; import org.geoserver.config.impl.GeoServerImpl; import org.geoserver.config.impl.ServiceInfoImpl; import org.geoserver.config.impl.SettingsInfoImpl; import org.geoserver.config.util.XStreamPersisterInitializer; import org.geoserver.jdbcconfig.JDBCConfigTestSupport; import org.geoserver.jdbcconfig.catalog.JDBCCatalogFacade; import org.geoserver.jdbcconfig.internal.ConfigDatabase; import org.geoserver.jdbcconfig.internal.JDBCConfigXStreamPersisterInitializer; import org.geoserver.platform.GeoServerExtensionsHelper; import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @RunWith(Parameterized.class) public class JDBCGeoServerImplTest extends GeoServerImplTest { private JDBCGeoServerFacade facade; private JDBCConfigTestSupport testSupport; public JDBCGeoServerImplTest(JDBCConfigTestSupport.DBConfig dbConfig) { testSupport = new JDBCConfigTestSupport(dbConfig); } @Parameterized.Parameters(name = "{0}") public static Iterable<Object[]> data() { return JDBCConfigTestSupport.parameterizedDBConfigs(); } @Override public void setUp() throws Exception { testSupport.setUp(); ConfigDatabase configDb = testSupport.getDatabase(); facade = new JDBCGeoServerFacade(configDb); facade.setResourceLoader(testSupport.getResourceLoader()); super.setUp(); } @After public void tearDown() throws Exception { facade.dispose(); testSupport.tearDown(); } @Override protected GeoServerImpl createGeoServer() { GeoServerImpl gs = new GeoServerImpl(); gs.setFacade(facade); CatalogImpl catalog = testSupport.getCatalog(); catalog.setFacade(new JDBCCatalogFacade(testSupport.getDatabase())); gs.setCatalog(catalog); return gs; } @Override public void testAddService() throws Exception { super.testAddService(); //ensure s.getGeoServer() != null ServiceInfo s = geoServer.getServiceByName( "foo", ServiceInfo.class ); assertNotNull(s.getGeoServer()); } @Test public void testGlobalSettingsWithId() throws Exception { SettingsInfoImpl settings = new SettingsInfoImpl(); settings.setId("settings"); GeoServerInfo global = geoServer.getFactory().createGlobal(); global.setSettings(settings); geoServer.setGlobal(global); assertEquals( global, geoServer.getGlobal() ); } @Test public void testModifyService() throws Exception { ServiceInfo service = geoServer.getFactory().createService(); ((ServiceInfoImpl)service).setId( "id" ); service.setName( "foo" ); service.setTitle( "bar" ); service.setMaintainer( "quux" ); geoServer.add( service ); ServiceInfo s1 = geoServer.getServiceByName( "foo", ServiceInfo.class ); s1.setMaintainer("quam"); ServiceInfo s2 = geoServer.getServiceByName( "foo", ServiceInfo.class ); assertEquals( "quux", s2.getMaintainer() ); geoServer.save( s1 ); s2 = geoServer.getServiceByName( "foo", ServiceInfo.class ); assertEquals( "quam", s2.getMaintainer() ); } // Would have put this on GeoServerImplTest, but it depends on WMS and WFS InfoImpl classes // which would lead to circular dependencies. @SuppressWarnings("unchecked") @Test public void testTypedServicesWithWorkspace() throws Exception { // Make a workspace WorkspaceInfo ws1 = geoServer.getCatalog().getFactory().createWorkspace(); ws1.setName("TEST-WORKSPACE-1"); geoServer.getCatalog().add(ws1); // Make a service for that workspace ServiceInfo ws1wms = new org.geoserver.wms.WMSInfoImpl(); ws1wms.setWorkspace(ws1); ws1wms.setName("WMS1"); ws1wms.setTitle("WMS for WS1"); geoServer.add(ws1wms); // Make a second for that workspace ServiceInfo ws1wfs = new org.geoserver.wfs.WFSInfoImpl(); ws1wfs.setWorkspace(ws1); ws1wfs.setName("WFS1"); ws1wfs.setTitle("WFS for WS1"); geoServer.add(ws1wfs); // Make a global service ServiceInfo gwms = new org.geoserver.wms.WMSInfoImpl(); gwms.setName("WMSG"); gwms.setTitle("Global WMS"); geoServer.add(gwms); // Make a second global service ServiceInfo gwfs = new org.geoserver.wfs.WFSInfoImpl(); gwfs.setName("WFSG"); gwfs.setTitle("Global WFS"); geoServer.add(gwfs); // Make a workspace WorkspaceInfo ws2 = geoServer.getCatalog().getFactory().createWorkspace(); ws2.setName("TEST-WORKSPACE-2"); geoServer.getCatalog().add(ws2); // Make a service for that workspace ServiceInfo ws2wms = new org.geoserver.wms.WMSInfoImpl(); ws2wms.setWorkspace(ws2); ws2wms.setName("WMS2"); ws2wms.setTitle("WMS for WS2"); geoServer.add(ws2wms); // Make a second for that workspace ServiceInfo ws2wfs = new org.geoserver.wfs.WFSInfoImpl(); ws2wfs.setWorkspace(ws2); ws2wfs.setName("WFS2"); ws2wfs.setTitle("WFS for WS2"); geoServer.add(ws2wfs); // Check that we get the services we expect to assertThat(geoServer.getService(org.geoserver.wms.WMSInfo.class), equalTo(gwms)); assertThat(geoServer.getService(org.geoserver.wfs.WFSInfo.class), equalTo(gwfs)); assertThat((Collection<ServiceInfo>)geoServer.getServices(), allOf(hasItems(gwms, gwfs), not(hasItems(ws1wms, ws1wfs, ws2wms, ws2wfs)))); assertThat(geoServer.getService(ws1, org.geoserver.wms.WMSInfo.class), equalTo(ws1wms)); assertThat(geoServer.getService(ws1, org.geoserver.wfs.WFSInfo.class), equalTo(ws1wfs)); assertThat((Collection<ServiceInfo>)geoServer.getServices(ws1), allOf(hasItems(ws1wms, ws1wfs), not(hasItems(gwms, gwfs, ws2wms, ws2wfs)))); assertThat(geoServer.getService(ws2, org.geoserver.wms.WMSInfo.class), equalTo(ws2wms)); assertThat(geoServer.getService(ws2, org.geoserver.wfs.WFSInfo.class), equalTo(ws2wfs)); assertThat((Collection<ServiceInfo>)geoServer.getServices(ws2), allOf(hasItems(ws2wms, ws2wfs), not(hasItems(gwms, gwfs, ws1wms, ws1wfs)))); } }