mirror of https://github.com/micromata/borgbackup-butler.git

Kai Reinhard
11.09.2018 a19451799f5a65a5b65cfd8f419d3f3e8699ff63
borgbutler-core/src/test/java/de/micromata/borgbutler/cache/ArchiveFilelistCacheTest.java
@@ -8,7 +8,11 @@
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;
@@ -21,15 +25,12 @@
    @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.");
@@ -40,23 +41,53 @@
        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 {
@@ -73,4 +104,17 @@
        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);
    }
}