| | |
| | | import org.slf4j.LoggerFactory; |
| | | |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | import java.lang.reflect.Field; |
| | | import java.nio.file.Files; |
| | | import java.nio.file.Path; |
| | | import java.nio.file.attribute.FileTime; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | |
| | | |
| | | @Test |
| | | void readWriteTest() throws Exception { |
| | | List<FilesystemItem> list = new ArrayList<>(); |
| | | for (int i = 0; i < 1000000; i++) { |
| | | list.add(create(i)); |
| | | } |
| | | ArchiveFilelistCache cache = new ArchiveFilelistCache(new File("out")); |
| | | List<FilesystemItem> list = createList(1000000); |
| | | ArchiveFilelistCache cache = new ArchiveFilelistCache(new File("out"), 100); |
| | | cache.removeAllCacheFiles(); |
| | | BorgRepoConfig repoConfig = new BorgRepoConfig(); |
| | | repoConfig.setRepo("repo"); |
| | | Archive archive = new Archive(); |
| | | set(archive, "archive", "archive-2018-12-10"); |
| | | Archive archive = createArchive("2018-12-10"); |
| | | log.info("Saving " + list.size() + " items to out dir."); |
| | | cache.save(repoConfig, archive, list); |
| | | log.info("Saving done."); |
| | |
| | | for (int i = 0; i < filesystemItems.length; i++) { |
| | | assertEquals(list.get(i).getPath(), filesystemItems[i].getPath()); |
| | | } |
| | | cache.removeAllCacheFiles(); |
| | | } |
| | | |
| | | @Test |
| | | void readWriteEmptyTest() throws Exception { |
| | | List<FilesystemItem> list = new ArrayList<>(); |
| | | ArchiveFilelistCache cache = new ArchiveFilelistCache(new File("out")); |
| | | ArchiveFilelistCache cache = new ArchiveFilelistCache(new File("out"), 100); |
| | | cache.removeAllCacheFiles(); |
| | | BorgRepoConfig repoConfig = new BorgRepoConfig(); |
| | | repoConfig.setRepo("repo"); |
| | | Archive archive = new Archive(); |
| | | set(archive, "archive", "archive-2018-12-09"); |
| | | if (cache.getFile(repoConfig, archive).exists()) { |
| | | cache.getFile(repoConfig, archive).delete(); |
| | | } |
| | | Archive archive = createArchive("2018-12-09"); |
| | | assertNull(cache.load(repoConfig, archive)); |
| | | cache.save(repoConfig, archive, list); |
| | | FilesystemItem[] filesystemItems = cache.load(repoConfig, archive); |
| | | assertNull(cache.load(repoConfig, archive)); |
| | | cache.removeAllCacheFiles(); |
| | | } |
| | | |
| | | @Test |
| | | void cleanUpTest() throws Exception { |
| | | List<FilesystemItem> list = createList(1000000); |
| | | ArchiveFilelistCache cache = new ArchiveFilelistCache(new File("out"), 5); |
| | | cache.removeAllCacheFiles(); |
| | | BorgRepoConfig repoConfig = new BorgRepoConfig(); |
| | | repoConfig.setRepo("repo"); |
| | | |
| | | long millis = System.currentTimeMillis(); |
| | | |
| | | Archive archive = createArchive("2018-11-20"); |
| | | cache.save(repoConfig, archive, list); |
| | | setLastAccessTime(cache.getFile(repoConfig, archive), millis - 10 * 3600000); // Fake lastAccessTime - 10 h |
| | | |
| | | archive = createArchive("2018-11-21"); |
| | | cache.save(repoConfig, archive, list); |
| | | setLastAccessTime(cache.getFile(repoConfig, archive), millis - 60000); // Fake lastAccessTime - 1min |
| | | |
| | | cache.save(repoConfig, archive, list); |
| | | cache.cleanUp(); |
| | | cache.removeAllCacheFiles(); |
| | | } |
| | | |
| | | private List<FilesystemItem> createList(int number) throws Exception { |
| | | List<FilesystemItem> list = new ArrayList<>(); |
| | | for (int i = 0; i < 1000000; i++) { |
| | | list.add(create(i)); |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | private FilesystemItem create(int i) throws Exception { |
| | |
| | | f1.set(obj, value); |
| | | return this; |
| | | } |
| | | |
| | | private Archive createArchive(String time) throws Exception { |
| | | Archive archive = new Archive(); |
| | | set(archive, "archive", "archive-" + time); |
| | | set(archive, "time", time); |
| | | return archive; |
| | | } |
| | | |
| | | private void setLastAccessTime(File file, long accessTime) throws IOException { |
| | | Path path = file.toPath(); |
| | | FileTime fileTime = FileTime.fromMillis(accessTime); |
| | | Files.setAttribute(path, "lastAccessTime", fileTime); |
| | | } |
| | | } |