/* (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.catalog; import static org.geoserver.catalog.Predicates.acceptAll; import static org.geoserver.catalog.Predicates.asc; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import java.util.List; import org.geoserver.catalog.Catalog; import org.geoserver.catalog.FeatureTypeInfo; import org.geoserver.catalog.LayerInfo; import org.geoserver.catalog.StyleInfo; import org.geoserver.catalog.impl.CatalogImpl; import org.geoserver.catalog.util.CloseableIterator; import org.geoserver.jdbcconfig.JDBCConfigTestSupport; import org.geoserver.jdbcconfig.internal.ConfigDatabase; import org.junit.After; import org.junit.Test; import org.opengis.filter.Filter; import org.opengis.filter.sort.SortBy; import com.google.common.collect.Lists; import java.util.logging.Level; import org.geotools.util.logging.Logging; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @RunWith(Parameterized.class) public class CatalogImplWithJDBCFacadeTest extends org.geoserver.catalog.impl.CatalogImplTest { private JDBCCatalogFacade facade; private JDBCConfigTestSupport testSupport; public CatalogImplWithJDBCFacadeTest(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 { super.GET_LAYER_BY_ID_WITH_CONCURRENT_ADD_TEST_COUNT = 10; testSupport.setUp(); ConfigDatabase configDb = testSupport.getDatabase(); facade = new JDBCCatalogFacade(configDb); super.setUp(); } @After public void tearDown() throws Exception { facade.dispose(); testSupport.tearDown(); } @Override protected Catalog createCatalog() { CatalogImpl catalogImpl = new CatalogImpl(); catalogImpl.setFacade(facade); return catalogImpl; } @Test public void testOrderByMultiple() { addDataStore(); addNamespace(); FeatureTypeInfo ft1 = newFeatureType("ft1", ds); ft1.setSRS("EPSG:1"); FeatureTypeInfo ft2 = newFeatureType("ft2", ds); ft2.setSRS("EPSG:2"); FeatureTypeInfo ft3 = newFeatureType("ft3", ds); ft3.setSRS("EPSG:1"); FeatureTypeInfo ft4 = newFeatureType("ft4", ds); ft4.setSRS("EPSG:2"); FeatureTypeInfo ft5 = newFeatureType("ft5", ds); ft5.setSRS("EPSG:1"); FeatureTypeInfo ft6 = newFeatureType("ft6", ds); ft6.setSRS("EPSG:2"); FeatureTypeInfo ft7 = newFeatureType("ft7", ds); ft7.setSRS("EPSG:1"); FeatureTypeInfo ft8 = newFeatureType("ft8", ds); ft8.setSRS("EPSG:2"); catalog.add(ft1); catalog.add(ft2); catalog.add(ft3); catalog.add(ft4); catalog.add(ft5); catalog.add(ft6); catalog.add(ft7); catalog.add(ft8); StyleInfo s1, s2, s3; catalog.add(s1 = newStyle("s1", "s1Filename")); catalog.add(s2 = newStyle("s2", "s2Filename")); catalog.add(s3 = newStyle("s3", "s3Filename")); LayerInfo l1 = newLayer(ft8, s1); LayerInfo l2 = newLayer(ft7, s2); LayerInfo l3 = newLayer(ft6, s3); LayerInfo l4 = newLayer(ft5, s1); LayerInfo l5 = newLayer(ft4, s2); LayerInfo l6 = newLayer(ft3, s3); LayerInfo l7 = newLayer(ft2, s1); LayerInfo l8 = newLayer(ft1, s2); catalog.add(l1); catalog.add(l2); catalog.add(l3); catalog.add(l4); catalog.add(l5); catalog.add(l6); catalog.add(l7); catalog.add(l8); Filter filter; SortBy sortOrder; List<LayerInfo> expected; /* Layer Style Feature Type SRS l4 s1 ft5 EPSG:1 l8 s2 ft1 EPSG:1 l2 s2 ft7 EPSG:1 l6 s3 ft3 EPSG:1 l7 s1 ft2 EPSG:2 l1 s1 ft8 EPSG:2 l5 s2 ft4 EPSG:2 l3 s3 ft6 EPSG:2 */ filter = acceptAll(); sortOrder = asc("resource.name"); expected = Lists.newArrayList(l1, l2, l3); //testOrderBy(LayerInfo.class, filter, null, null, sortOrder, expected); CloseableIterator<LayerInfo> it = facade.list(LayerInfo.class, filter, null, null, asc("resource.SRS"), asc("defaultStyle.name"), asc("resource.name")); try { assertThat(it.next(), is(l4)); assertThat(it.next(), is(l8)); assertThat(it.next(), is(l2)); assertThat(it.next(), is(l6)); assertThat(it.next(), is(l7)); assertThat(it.next(), is(l1)); assertThat(it.next(), is(l5)); assertThat(it.next(), is(l3)); } finally { it.close(); } } // @Override // public void testGetLayerGroupByNameWithWorkspace() { // try { // super.testGetLayerGroupByNameWithWorkspace(); // } catch (AssertionFailedError e) { // // ignoring failure, we need to fix this as we did for styles by workspace. Check the // // comment in the original test case: // // "//will randomly return one... we should probably return null with multiple matches" // e.printStackTrace(); // } // } /** * Allow execution of a single test method with a hard-coded DBConfig. Due * to the way junit/maven work with parameterized tests, running a single * test was not possible at the time of the change. * * To do so, use the public constructor of DBConfig, create your test, call * setUp and then the test(s) of interest as in the example below. */ public static void main(String[] args) throws Exception { Logging.getLogger("").getHandlers()[0].setLevel(Level.ALL); Logging.getLogger("org.geoserver.jdbcconfig.internal").setLevel(Level.ALL); JDBCConfigTestSupport.DBConfig config = new JDBCConfigTestSupport.DBConfig( "oracle", "oracle.jdbc.OracleDriver", "jdbc:oracle:thin:system/oracle@//localhost:49161/xe", "system", "oracle"); CatalogImplWithJDBCFacadeTest test = new CatalogImplWithJDBCFacadeTest(config); test.setUp(); test.testOrderBy(); } }