/* (c) 2016 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.security.decorators; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import java.io.IOException; import java.util.Arrays; import org.geoserver.platform.GeoServerExtensionsHelper; import org.geoserver.security.CatalogMode; import org.geoserver.security.VectorAccessLimits; import org.geoserver.security.WrapperPolicy; import org.geotools.data.DataUtilities; import org.geotools.data.collection.ListFeatureCollection; import org.geotools.factory.CommonFactoryFinder; import org.geotools.feature.SchemaException; import org.geotools.feature.visitor.CountVisitor; import org.geotools.feature.visitor.MaxVisitor; import org.junit.Before; import org.junit.Test; import org.opengis.feature.FeatureVisitor; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.filter.expression.PropertyName; import org.opengis.util.ProgressListener; public class SecuredSimpleFeatureCollectionTest { FeatureVisitor lastVisitor = null; private ListFeatureCollection collection; @Before public void setup() throws SchemaException { GeoServerExtensionsHelper.singleton("secureDataFactory", new DefaultSecureDataFactory(), SecuredObjectFactory.class); this.lastVisitor = null; SimpleFeatureType originalSchema = DataUtilities.createType("BasicPolygons", "the_geom:MultiPolygon:srid=4326,ID:String,value:int"); collection = new ListFeatureCollection(originalSchema) { public void accepts(FeatureVisitor visitor, ProgressListener progress) throws java.io.IOException { lastVisitor = visitor; }; }; } @Test public void testMaxVisitorDelegation() throws SchemaException, IOException { MaxVisitor visitor = new MaxVisitor(CommonFactoryFinder.getFilterFactory2().property("value")); WrapperPolicy policy = WrapperPolicy.hide(new VectorAccessLimits(CatalogMode.HIDE, null, null, null, null)); assertOptimalVisit(visitor, policy); } @Test public void testMaxOnHiddenField() throws SchemaException, IOException { MaxVisitor visitor = new MaxVisitor(CommonFactoryFinder.getFilterFactory2().property("value")); PropertyName geom = CommonFactoryFinder.getFilterFactory2().property("the_geom"); WrapperPolicy policy = WrapperPolicy.hide(new VectorAccessLimits(CatalogMode.HIDE, Arrays.asList(geom), null, null, null)); SecuredSimpleFeatureCollection secured = new SecuredSimpleFeatureCollection(collection, policy); secured.accepts(visitor, null); assertNull(lastVisitor); } @Test public void testCountVisitorDelegation() throws SchemaException, IOException { FeatureVisitor visitor = new CountVisitor(); WrapperPolicy policy = WrapperPolicy.hide(new VectorAccessLimits(CatalogMode.HIDE, null, null, null, null)); assertOptimalVisit(visitor, policy); } private void assertOptimalVisit(FeatureVisitor visitor, WrapperPolicy policy) throws IOException { SecuredSimpleFeatureCollection secured = new SecuredSimpleFeatureCollection(collection, policy); secured.accepts(visitor, null); assertSame(lastVisitor, visitor); } }