package org.mapfish.print.servlet.fileloader; import com.google.common.base.Optional; import com.google.common.io.Files; import org.junit.Test; import org.mapfish.print.IllegalFileAccessException; import org.mapfish.print.servlet.MapPrinterServletTest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import java.io.File; import java.net.URI; import java.util.NoSuchElementException; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @ContextConfiguration(locations = { MapPrinterServletTest.PRINT_CONTEXT }) public class ServletConfigFileLoaderTest extends AbstractConfigLoaderTest { public static final String CONFIG_FILE_URI_STRING = "servlet:///org/mapfish/print/servlet/fileloader/config.yaml"; @Autowired private ServletConfigFileLoader loader; @Override protected ConfigFileLoaderPlugin getLoader() { return loader; } @Test public void testToFile() throws Exception { assertFalse(loader.toFile(new URI("file://blahblahblah")).isPresent()); assertTrue(loader.toFile(new URI(CONFIG_FILE_URI_STRING)).isPresent()); assertTrue(loader.toFile(new URI("servlet:///org/mapfish/print/servlet/fileloader/")).isPresent()); } @Test public void testLastModified() throws Exception { final File file = CONFIG_FILE; Optional<Long> lastModified = this.loader.lastModified(new URI(CONFIG_FILE_URI_STRING)); assertTrue(lastModified.isPresent()); assertEquals(file.lastModified(), lastModified.get().longValue()); } @Test public void testAccessible() throws Exception { assertTrue(loader.isAccessible(new URI(CONFIG_FILE_URI_STRING))); assertFalse(loader.isAccessible(new URI(CONFIG_FILE_URI_STRING + "xzy"))); } @Test public void testLoadFile() throws Exception { final File file = CONFIG_FILE; byte[] loaded = this.loader.loadFile(new URI(CONFIG_FILE_URI_STRING)); assertArrayEquals(Files.toByteArray(file), loaded); } @Test public void testAccessibleChildResource() throws Exception { final URI configFileUri = new URI(CONFIG_FILE_URI_STRING); final String resourceFileName = "resourceFile.txt"; assertTrue(this.loader.isAccessible(configFileUri, "servlet:///org/mapfish/print/servlet/fileloader/" + resourceFileName)); assertTrue(this.loader.isAccessible(configFileUri, resourceFileName)); assertTrue(this.loader.isAccessible(configFileUri, getFile(FileConfigFileLoader.class, resourceFileName).toURI().toString())); assertTrue(this.loader.isAccessible(configFileUri, getFile(FileConfigFileLoader.class, resourceFileName).getAbsolutePath())); assertTrue(this.loader.isAccessible(configFileUri, getFile(FileConfigFileLoader.class, resourceFileName).getPath())); File file = getFile(FileConfigFileLoader.class, "/test-http-request-factory-application-context.xml"); assertFileAccessException(configFileUri, file.getAbsolutePath()); file = getFile(FileConfigFileLoader.class, "../../../../../test-http-request-factory-application-context.xml"); assertFileAccessException(configFileUri, file.getAbsolutePath()); assertFileAccessException(configFileUri,"servlet:///test-http-request-factory-application-context.xml"); } @Test public void testLoadFileChildResource() throws Exception { final URI configFileUri = new URI(CONFIG_FILE_URI_STRING); final String resourceFileName = "resourceFile.txt"; final byte[] bytes = Files.toByteArray(getFile(FileConfigFileLoader.class, resourceFileName)); assertArrayEquals(bytes, this.loader.loadFile(configFileUri, resourceFileName)); assertArrayEquals(bytes, this.loader.loadFile(configFileUri, getFile(FileConfigFileLoader.class, resourceFileName).getAbsolutePath())); assertArrayEquals(bytes, this.loader.loadFile(configFileUri, getFile(FileConfigFileLoader.class, resourceFileName).getPath())); assertArrayEquals(bytes, this.loader.loadFile(configFileUri, "servlet:///org/mapfish/print/servlet/fileloader/" + resourceFileName)); } @Test(expected = IllegalFileAccessException.class) public void testLoadFileChildResource_NotInConfigDir() throws Exception { final URI configFileUri = new URI(CONFIG_FILE_URI_STRING); this.loader.loadFile(configFileUri, getFile(FileConfigFileLoader.class, "/test-http-request-factory-application-context.xml") .getAbsolutePath()); } @Test(expected = IllegalFileAccessException.class) public void testLoadFileChildResource_NotInConfigDir_ServletURI() throws Exception { final URI configFileUri = new URI(CONFIG_FILE_URI_STRING); this.loader.loadFile(configFileUri, "servlet:///test-http-request-factory-application-context.xml"); } @Test(expected = NoSuchElementException.class) public void testLoadFileChildResource_DoesNotExist() throws Exception { final URI configFileUri = new URI(CONFIG_FILE_URI_STRING); this.loader.loadFile(configFileUri, "doesNotExist"); } }