package org.geoserver.python; import java.sql.SQLException; import org.geoserver.catalog.Catalog; import org.geoserver.catalog.DataStoreInfo; import org.geoserver.catalog.FeatureTypeInfo; import org.geoserver.catalog.NamespaceInfo; import org.geoserver.catalog.impl.CatalogImpl; import org.geoserver.platform.GeoServerExtensions; import org.geotools.data.DataStore; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.h2.tools.DeleteDbFiles; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.feature.type.FeatureType; import org.springframework.context.ApplicationContext; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; public class PythonCatalogModTest extends PythonTestSupport { Catalog cat; @Before public void setUp() throws Exception { DeleteDbFiles.execute("target", "bar", false); cat = new CatalogImpl(); ApplicationContext context = createNiceMock(ApplicationContext.class); expect(context.getBean("catalog")).andReturn(cat).anyTimes(); replay(context); new GeoServerExtensions().setApplicationContext(context); } @After public void tearDown() throws Exception { new GeoServerExtensions().setApplicationContext(null); DeleteDbFiles.execute("target", "bar", false); } @Test public void testAddWorkspace() { assertEquals(0, cat.getWorkspaces().size()); pi.exec("from geoserver.catalog import Workspace"); pi.exec("ws = Workspace('foo')"); pi.exec("ws.save()"); assertEquals(1, cat.getWorkspaces().size()); assertNotNull(cat.getWorkspaceByName("foo")); } @Test public void testSaveWorkspace() { testAddWorkspace(); assertNotNull(cat.getWorkspaceByName("foo")); pi.exec("from geoserver.catalog import Workspace"); pi.exec("ws = Workspace('foo')"); pi.exec("ws.name = 'bar'"); pi.exec("ws.save()"); assertNull(cat.getWorkspaceByName("foo")); assertNotNull(cat.getWorkspaceByName("bar")); } @Test public void testAddStore() throws Exception { testAddWorkspace(); assertNull(cat.getDataStoreByName("foo", "bar")); pi.exec("from geoserver.catalog import Store"); pi.exec("st = Store('bar')"); pi.exec("st.connectionParameters.putAll({'database':'target/bar', 'dbtype': 'h2'})"); pi.exec("st.save()"); DataStoreInfo ds = cat.getDataStoreByName("foo", "bar"); assertNotNull(ds); assertNotNull(ds.getDataStore(null)); } @Test public void testAddStoreNonDefaultWorkspace() throws Exception { testAddWorkspace(); assertNull(cat.getDataStoreByName("acme", "bar")); pi.exec("from geoserver.catalog import Workspace, Store"); pi.exec("ws = Workspace('acme')"); pi.exec("ws.save()"); pi.exec("st = Store('bar', ws)"); pi.exec("st.connectionParameters.putAll({'database':'target/bar', 'dbtype': 'h2'})"); pi.exec("st.save()"); assertNotNull(cat.getDataStoreByName("acme", "bar")); } @Test public void testSaveStore() throws Exception { testAddStore(); assertNull(cat.getDataStoreByName("foo", "bar").getDescription()); pi.exec("from geoserver.catalog import Store"); pi.exec("st = Store('bar', 'foo')"); pi.exec("st.description = 'foobar'"); pi.exec("st.save()"); assertEquals("foobar", cat.getDataStoreByName("foo", "bar").getDescription()); } @Test public void testAddFeatureType() throws Exception { testAddStore(); NamespaceInfo ns = cat.getFactory().createNamespace(); ns.setPrefix("foo"); ns.setURI("http://foo.org"); cat.add(ns); DataStoreInfo ds = cat.getDataStoreByName("foo", "bar"); SimpleFeatureTypeBuilder tb = new SimpleFeatureTypeBuilder(); tb.setName("baz"); tb.add("x", Integer.class); tb.add("y", String.class); ((DataStore)ds.getDataStore(null)).createSchema(tb.buildFeatureType()); assertNull(cat.getFeatureTypeByDataStore(ds, "baz")); pi.exec("from geoserver.catalog import Catalog"); pi.exec("from geoserver.catalog import Layer"); pi.exec("cat = Catalog()"); pi.exec("st = cat['foo']['bar']"); pi.exec("l = Layer('baz', st)"); pi.exec("l.save()"); FeatureTypeInfo ft = cat.getFeatureTypeByDataStore(ds, "baz"); assertNotNull(ft); assertNotNull(ft.getFeatureType()); assertNotNull(ft.getFeatureSource(null, null)); } @Test public void testSaveFeatureType() throws Exception { testAddStore(); } }