/* (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.script.py; import static org.easymock.EasyMock.anyObject; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import javax.script.ScriptEngine; import org.geoserver.catalog.Catalog; import org.geoserver.catalog.DataStoreInfo; import org.geoserver.catalog.FeatureTypeInfo; import org.geoserver.catalog.impl.CatalogImpl; import org.geoserver.platform.GeoServerExtensions; import org.geoserver.platform.GeoServerExtensionsHelper; import org.geoserver.platform.GeoServerResourceLoader; import org.geoserver.script.ScriptTestSupport; import org.geotools.data.DataStore; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.h2.tools.DeleteDbFiles; import org.springframework.context.ApplicationContext; public class PyCatalogModTest extends ScriptTestSupport { Catalog cat; ScriptEngine e; public void setUp() throws Exception { super.setUp(); GeoServerExtensionsHelper.init( null ); // suppress extension lookup warnings DeleteDbFiles.execute("target", "bar", false); GeoServerResourceLoader resourceLoader = scriptMgr.getDataDirectory().getResourceLoader(); cat = new CatalogImpl(); cat.setResourceLoader(resourceLoader); ApplicationContext context = createNiceMock(ApplicationContext.class); expect(context.getBean("catalog")).andReturn(cat).anyTimes(); expect(context.getBean("resourceLoader")).andReturn( resourceLoader ); expect(context.getBeanNamesForType(GeoServerResourceLoader.class)).andReturn(new String[]{"resourceLoader"}).anyTimes(); expect(context.getBeanNamesForType((Class<?>)anyObject())).andReturn(new String[]{}).anyTimes(); replay(context); GeoServerExtensionsHelper.init( context ); // mock context to use for test e = scriptMgr.createNewEngine("py"); } public void tearDown() throws Exception { super.tearDown(); GeoServerExtensionsHelper.init( null ); // clear mock context DeleteDbFiles.execute("target", "bar", false); } public void testAddWorkspace() throws Exception { GeoServerResourceLoader loader = GeoServerExtensions.bean(GeoServerResourceLoader.class); assertNotNull("resourceLoader",loader); assertEquals(0, cat.getWorkspaces().size()); e.eval("from geoserver.catalog import Workspace"); e.eval("ws = Workspace('foo')"); e.eval("ws.uri = 'http://foo.org'"); e.eval("ws.save()"); assertEquals(1, cat.getWorkspaces().size()); assertNotNull(cat.getWorkspaceByName("foo")); } public void testSaveWorkspace() throws Exception { testAddWorkspace(); assertNotNull(cat.getWorkspaceByName("foo")); e.eval("from geoserver.catalog import Workspace"); e.eval("ws = Workspace('foo')"); e.eval("ws.name = 'bar'"); e.eval("ws.save()"); assertNull(cat.getWorkspaceByName("foo")); assertNotNull(cat.getWorkspaceByName("bar")); } public void testAddStore() throws Exception { testAddWorkspace(); assertNull(cat.getDataStoreByName("foo", "bar")); e.eval("from geoserver.catalog import Store"); e.eval("st = Store('bar')"); e.eval("st.connectionParameters.putAll({'database':'target/bar', 'dbtype': 'h2'})"); e.eval("st.save()"); DataStoreInfo ds = cat.getDataStoreByName("foo", "bar"); assertNotNull(ds); assertNotNull(ds.getDataStore(null)); } public void testAddStoreNonDefaultWorkspace() throws Exception { testAddWorkspace(); assertNull(cat.getDataStoreByName("acme", "bar")); e.eval("from geoserver.catalog import Workspace, Store"); e.eval("ws = Workspace('acme')"); e.eval("ws.save()"); e.eval("st = Store('bar', ws)"); e.eval("st.connectionParameters.putAll({'database':'target/bar', 'dbtype': 'h2'})"); e.eval("st.save()"); assertNotNull(cat.getDataStoreByName("acme", "bar")); } public void testSaveStore() throws Exception { testAddStore(); assertNull(cat.getDataStoreByName("foo", "bar").getDescription()); e.eval("from geoserver.catalog import Store"); e.eval("st = Store('bar', 'foo')"); e.eval("st.description = 'foobar'"); e.eval("st.save()"); assertEquals("foobar", cat.getDataStoreByName("foo", "bar").getDescription()); } public void testAddFeatureType() throws Exception { testAddStore(); 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")); e.eval("from geoserver.catalog import Catalog"); e.eval("from geoserver.catalog import Layer"); e.eval("cat = Catalog()"); e.eval("st = cat['foo']['bar']"); e.eval("l = Layer('baz', st)"); e.eval("l.save()"); FeatureTypeInfo ft = cat.getFeatureTypeByDataStore(ds, "baz"); assertNotNull(ft); assertNotNull(ft.getFeatureType()); assertNotNull(ft.getFeatureSource(null, null)); } public void testSaveFeatureType() throws Exception { testAddStore(); } }