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.AbstractMapfishSpringTest; import org.springframework.beans.factory.annotation.Autowired; 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; public class ClasspathConfigFileLoaderTest extends AbstractMapfishSpringTest { @Autowired private ClasspathConfigFileLoader loader; final String configFileUriString = "classpath://" + FileConfigFileLoaderTest.class.getPackage().getName().replace('.', '/') + "/config.yaml"; @Test public void testToFile() throws Exception { assertFalse(loader.toFile(new URI("file://blahblahblah")).isPresent()); assertTrue(loader.toFile(new URI(configFileUriString)).isPresent()); final URI fileUri = new URI("classpath://" + FileConfigFileLoaderTest.class.getPackage().getName().replace('.', '/')); assertTrue(loader.toFile(fileUri).isPresent()); } @Test public void testLastModified() throws Exception { final File file = getFile(FileConfigFileLoaderTest.class, "config.yaml"); Optional<Long> lastModified = this.loader.lastModified(new URI(configFileUriString)); assertTrue(lastModified.isPresent()); assertEquals(file.lastModified(), lastModified.get().longValue()); } @Test public void testAccessible() throws Exception { assertTrue(loader.isAccessible(new URI(configFileUriString))); assertFalse(loader.isAccessible(new URI(configFileUriString + "xzy"))); } @Test public void testLoadFile() throws Exception { final File file = getFile(FileConfigFileLoaderTest.class, "config.yaml"); byte[] loaded = this.loader.loadFile(new URI(configFileUriString)); assertArrayEquals(Files.toByteArray(file), loaded); } @Test public void testAccessibleChildResource() throws Exception { final URI configFileUri = new URI(configFileUriString); final String resourceFileName = "resourceFile.txt"; assertTrue(this.loader.isAccessible(configFileUri, "classpath://org/mapfish/print/servlet/fileloader/" + resourceFileName)); assertTrue(this.loader.isAccessible(configFileUri, resourceFileName)); assertFalse(this.loader.isAccessible(configFileUri, getFile(FileConfigFileLoader.class, resourceFileName).toURI().toString())); assertFalse(this.loader.isAccessible(configFileUri, getFile(FileConfigFileLoader.class, resourceFileName).getAbsolutePath())); assertFalse(this.loader.isAccessible(configFileUri, getFile(FileConfigFileLoader.class, resourceFileName).getPath())); assertFalse(this.loader.isAccessible(configFileUri, getFile(FileConfigFileLoader.class, "/test-http-request-factory-application-context.xml") .getAbsolutePath())); assertFalse(this.loader.isAccessible(configFileUri, "classpath://test-http-request-factory-application-context.xml")); } @Test public void testLoadFileChildResource() throws Exception { final URI configFileUri = new URI(configFileUriString); 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, "classpath://org/mapfish/print/servlet/fileloader/" + resourceFileName)); } @Test(expected = IllegalArgumentException.class) public void testLoadFileChildResource_NotInConfigDir() throws Exception { final URI configFileUri = new URI(configFileUriString); this.loader.loadFile(configFileUri, "classpath://test-http-request-factory-application-context.xml"); } @Test(expected = IllegalArgumentException.class) public void testLoadFileChildResource_NotClasspathURI() throws Exception { final URI configFileUri = new URI(configFileUriString); final String resourceFileName = "resourceFile.txt"; final String uri = getFile(FileConfigFileLoader.class, resourceFileName).toURI().toString(); this.loader.loadFile(configFileUri, uri); } @Test(expected = NoSuchElementException.class) public void testLoadFileChildResource_DoesNotExist() throws Exception { final URI configFileUri = new URI(configFileUriString); final String resourceFileName = "resourceFile.txt"; final File file = new File(getFile(FileConfigFileLoader.class, resourceFileName).getParentFile(), "doesNotExist"); this.loader.loadFile(configFileUri, file.getPath()); } @Test(expected = NoSuchElementException.class) public void testLoadFileChildResource_DoesNotExist2() throws Exception { final URI configFileUri = new URI(configFileUriString); this.loader.loadFile(configFileUri, "doesNotExist"); } @Test(expected = NoSuchElementException.class) public void testLoadFileChildResource_ConfigFileDoesNotExist() throws Exception { final URI configFileUri = new URI("classpath://xyz.yaml"); final String resourceFileName = "resourceFile.txt"; this.loader.loadFile(configFileUri, getFile(FileConfigFileLoader.class, resourceFileName).toURI().toString()); } }