package org.springframework.batch.admin.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertTrue; import java.io.File; import java.util.List; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.Resource; import org.springframework.util.SerializationUtils; public class LocalFileServiceTests { private LocalFileService service = new LocalFileService(); private File trigger = null; @Before public void setUp() throws Exception { service.setFileSender(new FileSender() { public void send(File file) { trigger = file; } }); FileUtils.deleteDirectory(service.getUploadDirectory()); } @Test public void testUpload() throws Exception { FileInfo info = service.createFile("spam/bucket"); Resource file = service.getResource(info.getPath()); assertTrue(file.exists()); assertTrue(file.getFile().getParentFile().exists()); } @Test public void testUploadWithExtension() throws Exception { FileInfo info = service.createFile("spam/bucket.txt"); String path = info.getFileName(); // System.err.println(path); assertEquals("spam/bucket.txt", info.getPath()); assertTrue("Wrong path: " + path, path.matches("spam/bucket\\.[0-9]*\\.[0-9]*\\.txt")); } @Test public void testGetNonExistent() throws Exception { FileInfo info = service.createFile("spam/bucket.txt"); Resource file = service.getResource("spam/bucket.19990505.211145.txt"); assertFalse("File exists: " + file.getFilename() + " when non-existent timestamp supplied", file.exists()); assertNotSame(info.getPath(), "spam/" + file.getFilename()); } @Test public void testUploadAndGetLatest() throws Exception { FileInfo info = service.createFile("spam/bucket.txt"); Resource file = service.getResource("spam/bucket.txt"); assertTrue("File doesn't exist: " + file + " for " + info.getPath(), file.exists()); assertEquals(info.getFileName(), "spam/" + file.getFilename()); String path = file.getFilename(); assertTrue("Wrong path: " + path, path.matches("bucket\\.[0-9]*\\.[0-9]*\\.txt")); } @Test public void testUploadAndGetLatestWithAlternative() throws Exception { service.createFile("spam/bucket.20100423.123000.txt"); FileInfo info = service.createFile("spam/bucket.20100423.123002.txt"); Resource file = service.getResource("spam/bucket.txt"); assertTrue("File doesn't exist: " + file + " for " + info.getPath(), file.exists()); assertEquals(info.getFileName(), "spam/" + file.getFilename()); String path = file.getFilename(); assertTrue("Wrong path: " + path, path.matches("bucket\\.[0-9]*\\.[0-9]*\\.txt")); } @Test public void testUploadNoDirectory() throws Exception { FileInfo info = service.createFile("bucket"); Resource file = service.getResource(info.getPath()); assertTrue(file.exists()); assertTrue(file.getFile().getParentFile().exists()); } @Test(expected = IllegalArgumentException.class) public void testUploadFailsForNoFileName() throws Exception { FileInfo info = service.createFile(""); Resource file = service.getResource(info.getPath()); assertTrue(file.exists()); } @Test public void testPublish() throws Exception { FileInfo info = service.createFile("spam/bucket/crap"); Resource file = service.getResource(info.getPath()); assertTrue(file.exists()); service.publish(info); assertNotNull(trigger); } @Test public void testGetFilesEmpty() throws Exception { service.setResourceLoader(new DefaultResourceLoader()); service.afterPropertiesSet(); List<FileInfo> uploaded = service.getFiles(0, 20); assertEquals(0, uploaded.size()); } @Test public void testGetFilesNotEmpty() throws Exception { service.setResourceLoader(new DefaultResourceLoader()); service.afterPropertiesSet(); service.createFile("foo"); service.createFile("bar"); service.createFile("spam"); List<FileInfo> files = service.getFiles(0, 20); assertEquals(3, files.size()); assertEquals("bar", files.get(0).getPath()); } @Test public void testGetFilesSerializable() throws Exception { service.setResourceLoader(new DefaultResourceLoader()); service.afterPropertiesSet(); service.createFile("foo"); service.createFile("bar"); service.createFile("spam"); @SuppressWarnings("unchecked") List<FileInfo> files = (List<FileInfo>) SerializationUtils.deserialize(SerializationUtils.serialize(service.getFiles(0, 20))); assertEquals(3, files.size()); assertEquals("bar", files.get(0).getPath()); } @Test public void testGetFilesPagination() throws Exception { service.setResourceLoader(new DefaultResourceLoader()); service.afterPropertiesSet(); service.createFile("foo"); service.createFile("bar"); service.createFile("spam"); List<FileInfo> files = service.getFiles(2, 2); assertEquals(1, files.size()); assertEquals("spam", files.get(0).getPath()); } @Test public void testGetFilesShortPath() throws Exception { service.setResourceLoader(new DefaultResourceLoader()); service.afterPropertiesSet(); service.createFile("foo.20100505.123000"); service.createFile("foo.20100505.123001"); service.createFile("foo.20100505.123002"); service.createFile("bar.20100505.123000"); List<FileInfo> files = service.getFiles(0, 20); assertEquals(4, files.size()); assertEquals("bar", files.get(0).getPath()); assertEquals("foo", files.get(1).getPath()); assertEquals("foo.20100505.123001", files.get(2).getPath()); assertEquals("foo.20100505.123000", files.get(3).getPath()); } @Test public void testCount() throws Exception { service.setResourceLoader(new DefaultResourceLoader()); service.afterPropertiesSet(); assertEquals(0, service.countFiles()); } @Test public void testDeleteAll() throws Exception { service.setResourceLoader(new DefaultResourceLoader()); service.createFile("spam"); assertEquals(1, service.getFiles(0, 20).size()); service.afterPropertiesSet(); service.delete("*"); assertEquals(0, service.getFiles(0, 20).size()); } }