/* (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.web.demo;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.data.test.SystemTestData;
import org.geoserver.platform.GeoServerExtensions;
import org.geoserver.security.CatalogMode;
import org.geoserver.security.TestResourceAccessManager;
import org.geoserver.security.VectorAccessLimits;
import org.geoserver.web.GeoServerWicketTestSupport;
import org.junit.Test;
import org.opengis.filter.Filter;
import com.google.common.collect.Lists;
public class PreviewLayerProviderMixedModeTest extends GeoServerWicketTestSupport {
/**
* Add the test resource access manager in the spring context
*/
@Override
protected void setUpSpring(List<String> springContextLocations) {
super.setUpSpring(springContextLocations);
springContextLocations.add("classpath:/org/geoserver/web/demo/ResourceAccessManagerContext.xml");
}
/**
* Enable the Spring Security auth filters
*/
@Override
protected List<javax.servlet.Filter> getFilters() {
return Collections.singletonList((javax.servlet.Filter) GeoServerExtensions
.bean("filterChainProxy"));
}
/**
* Add the users
*/
@Override
protected void onSetUp(SystemTestData testData) throws Exception {
super.onSetUp(testData);
addUser("cite", "cite", null, Collections.singletonList("ROLE_DUMMY"));
addUser("cite_mixed", "cite", null, Collections.singletonList("ROLE_DUMMY"));
// populate the access manager
TestResourceAccessManager tam = (TestResourceAccessManager) applicationContext
.getBean("testResourceAccessManager");
Catalog catalog = getCatalog();
FeatureTypeInfo buildings = catalog.getFeatureTypeByName(getLayerId(SystemTestData.BUILDINGS));
// user in mixed mode
tam.putLimits("cite_mixed", buildings, new VectorAccessLimits(CatalogMode.MIXED, null, Filter.EXCLUDE, null, Filter.EXCLUDE));
}
@Test
public void testMixedMode() throws Exception {
PreviewLayerProvider provider = new PreviewLayerProvider();
// full access
login("cite", "cite");
assertTrue(previewHasBuildings(provider));
// no access, but no exception either, since this is not a direct access
login("cite_mixed", "cite");
assertFalse(previewHasBuildings(provider));
}
private boolean previewHasBuildings(PreviewLayerProvider provider) {
Iterator<PreviewLayer> it = provider.iterator(0, provider.size());
String buildingsPrefixedName = getLayerId(SystemTestData.BUILDINGS);
while(it.hasNext()) {
PreviewLayer pl = it.next();
if(buildingsPrefixedName.equals(pl.getName())) {
return true;
}
}
return false;
}
private PreviewLayer getPreviewLayer(PreviewLayerProvider provider, String prefixedName) {
for (PreviewLayer pl : Lists.newArrayList(provider.iterator(0, Integer.MAX_VALUE))) {
if(pl.getName().equals(prefixedName)) {
return pl;
}
}
return null;
}
}