/* * Copyright (C) 2007 - 2014 GeoSolutions S.A.S. * http://www.geo-solutions.it * * GPLv3 + Classpath exception * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.geoserver.geofence; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; import java.io.OutputStreamWriter; import java.net.URISyntaxException; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import org.apache.commons.io.IOUtils; import org.custommonkey.xmlunit.SimpleNamespaceContext; import org.custommonkey.xmlunit.XMLUnit; import org.geoserver.geofence.config.GeoFenceConfiguration; import org.geoserver.geofence.config.GeoFenceConfigurationManager; import org.geoserver.geofence.config.GeoFencePropertyPlaceholderConfigurer; import org.geoserver.geofence.utils.GeofenceTestUtils; import org.geoserver.platform.resource.Resource; import org.geoserver.test.GeoServerTestSupport; import org.junit.Test; import org.springframework.core.io.UrlResource; public class AccessManagerConfigTest extends GeoServerTestSupport { // protected GeofenceAccessManager manager; // protected RuleReaderService geofenceService; GeoFencePropertyPlaceholderConfigurer configurer; GeoFenceConfigurationManager manager; @Override protected void oneTimeSetUp() throws Exception { try{ super.oneTimeSetUp(); } catch(Exception e) { LOGGER.severe("Error in OneTimeSetup: it may be due to GeoFence not running, please check the logs -- " + e.getMessage()); LOGGER.log(Level.FINE, "Error in OneTimeSetup: it may be due to GeoFence not running, please check the logs", e); } Map<String, String> namespaces = new HashMap<String, String>(); namespaces.put("xlink", "http://www.w3.org/1999/xlink"); namespaces.put("wfs", "http://www.opengis.net/wfs"); namespaces.put("wcs", "http://www.opengis.net/wcs/1.1.1"); namespaces.put("gml", "http://www.opengis.net/gml"); getTestData().registerNamespaces(namespaces); XMLUnit.setXpathNamespaceContext(new SimpleNamespaceContext(namespaces)); } @Override protected void setUpInternal() throws Exception { super.setUpInternal(); // get the beans we use for testing // manager = (GeofenceAccessManager) applicationContext.getBean("geofenceRuleAccessManager"); // geofenceService = (RuleReaderService) applicationContext.getBean("ruleReaderService"); manager = (GeoFenceConfigurationManager) applicationContext.getBean("geofenceConfigurationManager"); configurer = (GeoFencePropertyPlaceholderConfigurer) applicationContext.getBean("geofence-configurer"); configurer.setLocation(new UrlResource(this.getClass().getResource("/test-config.properties"))); } @Test public void testSave() throws IOException, URISyntaxException { GeofenceTestUtils.emptyFile("test-config.properties"); GeoFenceConfiguration config = new GeoFenceConfiguration(); config.setInstanceName("TEST_INSTANCE"); config.setServicesUrl("http://fakeservice"); config.setAllowRemoteAndInlineLayers(true); config.setGrantWriteToWorkspacesToAuthenticatedUsers(true); config.setUseRolesToFilter(true); config.setAcceptedRoles("A,B"); manager.setConfiguration(config); Resource configurationFile = configurer.getConfigFile(); BufferedWriter writer = null; try { writer = new BufferedWriter(new OutputStreamWriter(configurationFile.out())); writer.write("newUserProperty=custom_property_value\n"); } finally { IOUtils.closeQuietly(writer); } manager.storeConfiguration(); File configFile = configurer.getConfigFile().file(); LOGGER.info("Config file is " + configFile); String content = GeofenceTestUtils.readConfig(configFile); assertTrue(content.contains("fakeservice")); assertTrue(content.contains("TEST_INSTANCE")); assertTrue(!content.contains("custom_property_value")); } }