/* (c) 2014 - 2015 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.config; import static org.junit.Assert.*; import java.io.File; import java.io.IOException; import java.net.URL; import org.geoserver.catalog.Catalog; import org.geoserver.catalog.LayerGroupInfo; import org.geoserver.catalog.LayerInfo; import org.geoserver.catalog.StyleInfo; import org.geoserver.catalog.impl.CatalogImpl; import org.geoserver.config.impl.GeoServerImpl; import org.geoserver.config.impl.ServiceInfoImpl; import org.geoserver.config.util.XStreamPersister; import org.geoserver.config.util.XStreamPersisterFactory; import org.geoserver.config.util.XStreamServiceLoader; import org.geoserver.platform.GeoServerExtensions; import org.geoserver.platform.GeoServerExtensionsHelper; import org.geoserver.platform.GeoServerResourceLoader; import org.geotools.data.DataUtilities; import org.junit.After; import org.junit.Before; import org.junit.Test; public class DefaultGeoServerLoaderTest { DefaultGeoServerLoader loader; Catalog catalog; XStreamPersister xp; boolean helloServiceSaved = false; static interface HelloServiceInfo extends ServiceInfo { } static final class HelloServiceInfoImpl extends ServiceInfoImpl implements HelloServiceInfo { } static final class HelloServiceXStreamLoader extends XStreamServiceLoader<HelloServiceInfo> { public HelloServiceXStreamLoader(GeoServerResourceLoader resourceLoader, String filenameBase) { super(resourceLoader, filenameBase); } @Override public Class<HelloServiceInfo> getServiceClass() { return HelloServiceInfo.class; } @Override protected HelloServiceInfo createServiceFromScratch(GeoServer gs) { return new HelloServiceInfoImpl(); } }; @Before public void setUp() { URL url = DefaultGeoServerLoaderTest.class.getResource("/data_dir/nested_layer_groups"); GeoServerResourceLoader resourceLoader = new GeoServerResourceLoader(DataUtilities.urlToFile(url)) { @Override public File createFile(File parentFile, String location) throws IOException { if ("hello.xml".equals(location)) { helloServiceSaved = true; } return super.createFile(parentFile, location); } }; GeoServerExtensionsHelper.singleton("resourceLoader", resourceLoader, GeoServerResourceLoader.class); loader = new DefaultGeoServerLoader(resourceLoader); catalog = new CatalogImpl(); catalog.setResourceLoader( resourceLoader ); XStreamPersisterFactory xpf = new XStreamPersisterFactory(); xp = xpf.createXMLPersister(); XStreamServiceLoader<HelloServiceInfo> helloLoader = new HelloServiceXStreamLoader( resourceLoader, "hello"); GeoServerExtensionsHelper.singleton("helloLoader", helloLoader, XStreamServiceLoader.class); } @After public void tearDown() { GeoServerExtensionsHelper.clear(); // clear singleton } @Test public void testGeneratedStyles() throws Exception { XStreamPersisterFactory xpf = new XStreamPersisterFactory(); XStreamPersister xp = xpf.createXMLPersister(); xp.setCatalog( catalog ); loader.initializeStyles(catalog, xp); StyleInfo polygon = catalog.getStyleByName( StyleInfo.DEFAULT_POLYGON ); assertEquals( "default_polygon.sld", polygon.getFilename() ); } @Test public void testLoadNestedLayerGroups() throws Exception { GeoServerResourceLoader resources = GeoServerExtensions.bean(GeoServerResourceLoader.class ); assertSame( catalog.getResourceLoader(), resources ); loader.readCatalog(catalog, xp); LayerGroupInfo simpleLayerGroup = catalog.getLayerGroupByName("topp", "simplegroup"); assertNotNull(simpleLayerGroup); assertEquals(101, simpleLayerGroup.getAttribution().getLogoWidth()); assertEquals(102, simpleLayerGroup.getAttribution().getLogoHeight()); assertEquals(2, simpleLayerGroup.getMetadataLinks().size()); assertEquals("http://my/metadata/link/1", simpleLayerGroup.getMetadataLinks().get(0).getContent()); assertEquals("text/html", simpleLayerGroup.getMetadataLinks().get(0).getType()); LayerGroupInfo nestedLayerGroup = catalog.getLayerGroupByName("topp", "nestedgroup"); assertNotNull(nestedLayerGroup); assertNotNull(nestedLayerGroup.getLayers()); assertEquals(2, nestedLayerGroup.getLayers().size()); assertTrue(nestedLayerGroup.getLayers().get(0) instanceof LayerGroupInfo); assertNotNull(((LayerGroupInfo)nestedLayerGroup.getLayers().get(0)).getLayers()); assertTrue(nestedLayerGroup.getLayers().get(1) instanceof LayerInfo); } @Test public void testLoadWithoutResaving() throws Exception { GeoServerImpl gs = new GeoServerImpl(); gs.setCatalog(catalog); // this one already calls onto loadService loader.postProcessBeforeInitialization(gs, "geoServer"); // for extra measure, also do a reload loader.reload(); assertFalse("hello.xml should not have been saved during load", helloServiceSaved); } }