/* (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.security;
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import org.apache.commons.io.output.ByteArrayOutputStream;
import org.geotools.factory.CommonFactoryFinder;
import org.opengis.filter.Filter;
import org.opengis.filter.FilterFactory2;
import org.opengis.filter.expression.PropertyName;
import com.vividsolutions.jts.geom.MultiPolygon;
import com.vividsolutions.jts.io.WKTReader;
public class TestAccessLimitsSerialization extends TestCase {
FilterFactory2 ff;
Filter filter;
MultiPolygon g;
@Override
protected void setUp() throws Exception {
ff = CommonFactoryFinder.getFilterFactory2(null);
filter = ff.equal(ff.property("attribute"), ff.literal(3), true);
g = (MultiPolygon) new WKTReader().read("MULTIPOLYGON(((0 0, 0 10, 10 10, 10 0, 0 0)))");
}
public void testAccessLimits() throws Exception {
AccessLimits limits = new AccessLimits(CatalogMode.MIXED);
testObjectSerialization(limits);
}
public void testSerializeWorkspaceAccessLimits() throws Exception {
WorkspaceAccessLimits limits = new WorkspaceAccessLimits(CatalogMode.HIDE, true, true, true);
testObjectSerialization(limits);
}
public void testSerializeDataAccessLimits() throws Exception {
DataAccessLimits limits = new DataAccessLimits(CatalogMode.CHALLENGE, filter);
testObjectSerialization(limits);
}
public void testCoverageAccessLimits() throws Exception {
CoverageAccessLimits limits = new CoverageAccessLimits(CatalogMode.MIXED, filter, g, null);
testObjectSerialization(limits);
}
public void testVectorAccessLimits() throws Exception {
List<PropertyName> properties = new ArrayList<PropertyName>();
properties.add(ff.property("test"));
VectorAccessLimits limits = new VectorAccessLimits(CatalogMode.MIXED, properties, filter,
properties, filter);
testObjectSerialization(limits);
}
public void testWMSAccessLimits() throws Exception {
List<PropertyName> properties = new ArrayList<PropertyName>();
properties.add(ff.property("test"));
WMSAccessLimits limits = new WMSAccessLimits(CatalogMode.MIXED, filter, g, true);
testObjectSerialization(limits);
}
private void testObjectSerialization(Serializable object) throws Exception {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(object);
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bos.toByteArray()));
Object clone = ois.readObject();
assertNotSame(object, clone);
assertEquals(object, clone);
}
}