package org.geoserver.wfsv.security;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import org.geoserver.security.WrapperPolicy;
import org.geoserver.security.decorators.SecuredObjects;
import org.geoserver.util.SecurityUtils;
import org.geotools.data.DataUtilities;
import org.geotools.data.VersioningDataStore;
import org.geotools.data.VersioningFeatureStore;
import org.opengis.filter.Filter;
public class ReadOnlyVersioningDataStoreTest extends SecuredVersioningTest {
private static final String SCHEMA = "testSchema";
private VersioningDataStore mock;
@Override
protected void setUp() throws Exception {
super.setUp();
// create a feature store
VersioningFeatureStore mockStore = createNiceMock(VersioningFeatureStore.class);
mockStore.removeFeatures(Filter.INCLUDE);
expect(mockStore.getSchema()).andReturn(DataUtilities.createType(SCHEMA, "id:int"));
replay(mockStore);
// create a data store
mock = createNiceMock(VersioningDataStore.class);
expect(mock.getFeatureSource(SCHEMA)).andReturn(mockStore);
expect(mock.isVersioned(SCHEMA)).andReturn(true);
mock.setVersioned(SCHEMA, true, null, null);
replay(mock);
}
public void testDataStoreHide() throws Exception {
ReadOnlyVersioningDataStore secured = (ReadOnlyVersioningDataStore) SecuredObjects.secure(
mock, WrapperPolicy.hide(null));
assertTrue(secured.isVersioned(SCHEMA));
try {
secured.setVersioned(SCHEMA, true, null, null);
fail("Should have thrown a unsupported operation exception...");
} catch (UnsupportedOperationException e) {
// fine
}
// make sure we get a read only wrapper, a source instead of a store
ReadOnlyVersioningFeatureSource source = (ReadOnlyVersioningFeatureSource) secured
.getFeatureSource(SCHEMA);
}
public void testDataStoreChallenge() throws Exception {
ReadOnlyVersioningDataStore secured = (ReadOnlyVersioningDataStore) SecuredObjects.secure(
mock, WrapperPolicy.readOnlyChallenge(null));
assertTrue(secured.isVersioned(SCHEMA));
try {
secured.setVersioned(SCHEMA, true, null, null);
fail("Should have thrown a security exception...");
} catch (Throwable e) {
if (SecurityUtils.isSecurityException(e)==false)
fail("Should have thrown a security exception...");
}
// make sure we get a read only wrapper, a source instead of a store
ReadOnlyVersioningFeatureStore store = (ReadOnlyVersioningFeatureStore) secured
.getFeatureSource(SCHEMA);
try {
store.removeFeatures(Filter.INCLUDE);
fail("Should have thrown a security exception");
} catch(Throwable e) {
if (SecurityUtils.isSecurityException(e)==false)
fail("Should have thrown a security exception...");
}
}
}