package org.geoserver.security.decorators; import static org.easymock.EasyMock.*; import junit.framework.TestCase; import org.acegisecurity.AcegiSecurityException; import org.geoserver.security.SecureObjectsTest; import org.geoserver.security.SecureCatalogImpl.WrapperPolicy; import org.geotools.data.DataAccess; import org.geotools.data.DataStore; import org.geotools.data.DefaultQuery; import org.geotools.data.FeatureSource; import org.geotools.data.FeatureStore; import org.geotools.feature.FeatureCollection; import org.geotools.feature.NameImpl; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.filter.Filter; public class ReadOnlyFeatureSourceTest extends SecureObjectsTest { public void testReadOnlyFeatureSourceDataStore() throws Exception { // build up the mock DataStore ds = createNiceMock(DataStore.class); replay(ds); FeatureSource fs = createNiceMock(FeatureSource.class); FeatureCollection fc = createNiceMock(FeatureCollection.class); expect(fs.getDataStore()).andReturn(ds); expect(fs.getFeatures()).andReturn(fc); expect(fs.getFeatures(Filter.INCLUDE)).andReturn(fc); expect(fs.getFeatures(new DefaultQuery())).andReturn(fc); replay(fs); ReadOnlyFeatureSource ro = new ReadOnlyFeatureSource(fs, WrapperPolicy.HIDE); assertTrue(ro.getDataStore() instanceof ReadOnlyDataStore); ReadOnlyFeatureCollection collection = (ReadOnlyFeatureCollection) ro.getFeatures(); assertEquals(WrapperPolicy.HIDE, ro.policy); assertTrue(ro.getFeatures(Filter.INCLUDE) instanceof ReadOnlyFeatureCollection); assertTrue(ro.getFeatures(new DefaultQuery()) instanceof ReadOnlyFeatureCollection); } public void testReadOnlyFeatureStore() throws Exception { // build up the mock SimpleFeatureType schema = createNiceMock(SimpleFeatureType.class); expect(schema.getName()).andReturn(new NameImpl("testFT")); replay(schema); FeatureStore fs = createNiceMock(FeatureStore.class); expect(fs.getSchema()).andReturn(schema); replay(fs); ReadOnlyFeatureStore ro = new ReadOnlyFeatureStore(fs, WrapperPolicy.RO_CHALLENGE); try { ro.addFeatures(createNiceMock(FeatureCollection.class)); fail("This should have thrown a security exception"); } catch(AcegiSecurityException e) { // ok } } public void testReadOnlyFeatureSourceDataAccess() throws Exception { // build the mock up DataAccess da = createNiceMock(DataAccess.class); replay(da); FeatureSource fs = createNiceMock(FeatureSource.class); expect(fs.getDataStore()).andReturn(da); replay(fs); ReadOnlyFeatureSource ro = new ReadOnlyFeatureSource(fs, WrapperPolicy.RO_CHALLENGE); assertTrue(ro.getDataStore() instanceof ReadOnlyDataAccess); } }