From a19451799f5a65a5b65cfd8f419d3f3e8699ff63 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Mon, 10 Dec 2018 23:09:03 +0000
Subject: [PATCH] Expiry

---
 borgbutler-core/src/test/java/de/micromata/borgbutler/cache/ArchiveFilelistCacheTest.java |   70 ++++++++++++++++++++++++++++------
 1 files changed, 57 insertions(+), 13 deletions(-)

diff --git a/borgbutler-core/src/test/java/de/micromata/borgbutler/cache/ArchiveFilelistCacheTest.java b/borgbutler-core/src/test/java/de/micromata/borgbutler/cache/ArchiveFilelistCacheTest.java
index 9a85eec..129a0d2 100644
--- a/borgbutler-core/src/test/java/de/micromata/borgbutler/cache/ArchiveFilelistCacheTest.java
+++ b/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);
+    }
 }

--
Gitblit v1.10.0