package org.geoserver.security; import java.io.File; import org.acegisecurity.AcegiSecurityException; import org.geoserver.data.test.MockData; import org.geoserver.data.util.IOUtils; import org.geoserver.test.GeoServerTestSupport; import org.geotools.data.FeatureSource; import org.geotools.data.FeatureStore; import org.geotools.feature.FeatureCollection; import org.opengis.filter.Filter; /** * Tests that security rules are applied in a real simulation of a GeoServer * startup (loading the Spring context, reading the catalog and whatnot) * * @author Andrea Aime * */ public class SecureCatalogIntegrationTest extends GeoServerTestSupport { @Override protected void populateDataDirectory(MockData dataDirectory) throws Exception { super.populateDataDirectory(dataDirectory); File security = new File(dataDirectory.getDataDirectoryRoot(), "security"); security.mkdir(); File layers = new File(security, "layers.properties"); IOUtils.copy(SecureCatalogIntegrationTest.class .getResourceAsStream("functional.properties"), layers); } public void testFullAccess() throws Exception { FeatureSource source = getFeatureSource(MockData.LINES); FeatureCollection fc = source.getFeatures(); FeatureStore store = (FeatureStore) source; store.removeFeatures(Filter.INCLUDE); } public void testCannotRead() throws Exception { try { getFeatureSource(MockData.BUILDINGS); fail("This should have failed with a security exception!"); } catch (AcegiSecurityException e) { // fine, we should not be able to get to the feature source } } public void testCannotWrite() throws Exception { FeatureStore fs = (FeatureStore) getFeatureSource(MockData.DELETES); try { fs.removeFeatures(Filter.INCLUDE); fail("This should have failed with a security exception!"); } catch (AcegiSecurityException e) { // fine, we should not be able to get to the feature source } } }