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.springframework.beans.factory.annotation.Autowired; 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; public class FileConfigFileLoaderTest extends AbstractConfigLoaderTest { @Autowired private FileConfigFileLoader loader; @Override public FileConfigFileLoader getLoader() { return loader; } @Test public void testToFile() throws Exception { assertFalse(loader.toFile(new URI("servlet:///blahblahblah")).isPresent()); assertTrue(loader.toFile(CONFIG_FILE.toURI()).isPresent()); assertTrue(loader.toFile(CONFIG_FILE.getParentFile().toURI()).isPresent()); } @Test public void testLastModified() throws Exception { Optional<Long> lastModified = this.loader.lastModified(CONFIG_FILE.toURI()); assertTrue(lastModified.isPresent()); assertEquals(CONFIG_FILE.lastModified(), lastModified.get().longValue()); } @Test public void testAccessible() throws Exception { assertTrue(CONFIG_FILE.toURI().toString(), loader.isAccessible(CONFIG_FILE.toURI())); assertFalse(loader.isAccessible(new URI(CONFIG_FILE.toURI() + "xzy"))); } @Test public void testAccessible_RelativePath() throws Exception { final URI fileURI = new URI("file://relativePath/config.yaml"); assertFalse(loader.isAccessible(fileURI)); } @Test public void testLoadFile() throws Exception { byte[] loaded = this.loader.loadFile(CONFIG_FILE.toURI()); assertArrayEquals(Files.toByteArray(CONFIG_FILE), loaded); } @Test(expected = NoSuchElementException.class) public void testLoadFileMissingFile() throws Exception { this.loader.loadFile(new URI("file:/c:/doesnotexist")); } @Test(expected = NoSuchElementException.class) public void testLastModifiedMissingFile() throws Exception { this.loader.lastModified(new URI("file:/c:/doesnotexist")); } @Test public void testAccessibleChildResource() throws Exception { final URI configFileUri = CONFIG_FILE.toURI(); final String resourceFileName = "resourceFile.txt"; 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())); assertFileAccessException(configFileUri, getFile(FileConfigFileLoader.class, "/test-http-request-factory-application-context.xml") .getAbsolutePath()); assertFileAccessException(configFileUri, getFile(FileConfigFileLoader.class, "../../../../../test-http-request-factory-application-context.xml").getAbsolutePath()); } @Test public void testLoadFileChildResource() throws Exception { final URI configFileUri = CONFIG_FILE.toURI(); 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())); } @Test(expected = IllegalFileAccessException.class) public void testLoadFileChildResource_NotInConfigDir() throws Exception { final URI configFileUri = CONFIG_FILE.toURI(); this.loader.loadFile(configFileUri, getFile(FileConfigFileLoader.class, "/test-http-request-factory-application-context.xml") .getAbsolutePath()); } @Test(expected = NoSuchElementException.class) public void testLoadFileChildResource_DoesNotExist() throws Exception { final URI configFileUri = CONFIG_FILE.toURI(); this.loader.loadFile(configFileUri, "doesNotExist"); } }