/* (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.platform;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletContext;
import org.easymock.EasyMock;
import org.geoserver.platform.resource.FileSystemResourceStore;
import org.geoserver.platform.resource.ResourceStore;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
/**
* Tests for {@link GeoServerResourceLoader}.
*/
public class GeoServerResourceLoaderTest {
@Rule
public final ExpectedException expected = ExpectedException.none();
@Rule
public TemporaryFolder tempFolder = new TemporaryFolder();
/**
* Test {@link GeoServerResourceLoader#requireFile(String, String)} for a single file that exists.
*/
@Test
public void testRequireSingleExistingFile() {
GeoServerResourceLoader.requireFile("pom.xml", "Test fixture");
}
/**
* Test {@link GeoServerResourceLoader#requireFile(String, String)} for two files that exist.
*/
@Test
public void testRequireTwoExistingFiles() {
GeoServerResourceLoader.requireFile("pom.xml" + File.pathSeparator + "src", "Test fixture");
}
/**
* Test {@link GeoServerResourceLoader#requireFile(String, String)} for a single file that does not exist.
*/
@Test
public void testRequireSingleMissingFile() {
expected.expect(IllegalArgumentException.class);
expected.expectMessage(
"Missing required file: does-not-exist From: Test fixture: does-not-exist");
GeoServerResourceLoader.requireFile("does-not-exist", "Test fixture");
}
/**
* Test {@link GeoServerResourceLoader#requireFile(String, String)} for two files where one does not exist.
*/
@Test
public void testRequireSingleMissingFileOfTwo() {
expected.expect(IllegalArgumentException.class);
expected.expectMessage("Missing required file: does-not-exist From: Test fixture: pom.xml"
+ File.pathSeparator + "does-not-exist");
GeoServerResourceLoader.requireFile("pom.xml" + File.pathSeparator + "does-not-exist",
"Test fixture");
}
/**
* Test {@link GeoServerResourceLoader#lookupGeoServerDataDirectory(ServletContext)} with a single required file that exists specified in the Java
* environment.
*/
@Test
public void testLookupRequireExistingFileJava() {
ServletContext context = EasyMock.createMock(ServletContext.class);
EasyMock.expect(context.getInitParameter("GEOSERVER_REQUIRE_FILE")).andReturn(null);
EasyMock.expect(context.getInitParameter("GEOSERVER_DATA_DIR")).andReturn(null);
EasyMock.expect(context.getInitParameter("GEOSERVER_DATA_ROOT")).andReturn(null);
EasyMock.expect(context.getRealPath("/data")).andReturn("data");
EasyMock.replay(context);
System.setProperty("GEOSERVER_REQUIRE_FILE", "pom.xml");
try {
Assert.assertEquals("data",
GeoServerResourceLoader.lookupGeoServerDataDirectory(context));
} finally {
System.clearProperty("GEOSERVER_REQUIRE_FILE");
}
}
/**
* Test {@link GeoServerResourceLoader#lookupGeoServerDataDirectory(ServletContext)} with a single required file that does not exist specified in
* the Java environment.
*/
@Test
public void testLookupRequireMissingFileJava() {
ServletContext context = EasyMock.createMock(ServletContext.class);
EasyMock.expect(context.getInitParameter("GEOSERVER_REQUIRE_FILE")).andReturn(null);
EasyMock.expect(context.getInitParameter("GEOSERVER_DATA_DIR")).andReturn(null);
EasyMock.expect(context.getInitParameter("GEOSERVER_DATA_ROOT")).andReturn(null);
EasyMock.expect(context.getRealPath("/data")).andReturn("data");
EasyMock.replay(context);
expected.expect(IllegalArgumentException.class);
expected.expectMessage("Missing required file: does-not-exist "
+ "From: Java environment variable GEOSERVER_REQUIRE_FILE: does-not-exist");
System.setProperty("GEOSERVER_REQUIRE_FILE", "does-not-exist");
try {
GeoServerResourceLoader.lookupGeoServerDataDirectory(context);
} finally {
System.clearProperty("GEOSERVER_REQUIRE_FILE");
}
}
/**
* Test {@link GeoServerResourceLoader#lookupGeoServerDataDirectory(ServletContext)} with a single required file that does not exist specified in
* the servlet context.
*/
@Test
public void testLookupRequireMissingFileServlet() {
ServletContext context = EasyMock.createMock(ServletContext.class);
EasyMock.expect(context.getInitParameter("GEOSERVER_REQUIRE_FILE"))
.andReturn("does-not-exist");
EasyMock.expect(context.getInitParameter("GEOSERVER_DATA_DIR")).andReturn(null);
EasyMock.expect(context.getInitParameter("GEOSERVER_DATA_ROOT")).andReturn(null);
EasyMock.expect(context.getRealPath("/data")).andReturn("data");
EasyMock.replay(context);
expected.expect(IllegalArgumentException.class);
expected.expectMessage("Missing required file: does-not-exist "
+ "From: Servlet context parameter GEOSERVER_REQUIRE_FILE: does-not-exist");
GeoServerResourceLoader.lookupGeoServerDataDirectory(context);
}
@Test
public void testSetBaseDirectory() throws IOException {
GeoServerResourceLoader loader = new GeoServerResourceLoader();
assertNull(loader.getBaseDirectory());
assertEquals(ResourceStore.EMPTY, loader.getResourceStore());
tempFolder.create();
File tempDir = tempFolder.getRoot();
loader.setBaseDirectory(tempDir);
assertEquals(tempDir, loader.getBaseDirectory());
assertTrue(loader.getResourceStore() instanceof FileSystemResourceStore);
ResourceStore mockStore = EasyMock.createMock(ResourceStore.class);
loader = new GeoServerResourceLoader(mockStore);
assertNull(loader.getBaseDirectory());
assertEquals(mockStore, loader.getResourceStore());
loader.setBaseDirectory(tempDir);
assertEquals(tempDir, loader.getBaseDirectory());
assertEquals(mockStore, loader.getResourceStore());
}
}