From 324523f4b1354b09c4d4f20ac44d8d04277dcb24 Mon Sep 17 00:00:00 2001 From: Brrr Date: Tue, 7 Feb 2017 20:56:45 +0100 Subject: [PATCH] Copy blacklisted files before they are removed --- .../src/main/java/hath/base/CacheHandler.java | 24 ++++++++- .../test/java/hath/base/CacheHandlerTest.java | 51 +++++++++++++++++++ 2 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 hath-base/src/test/java/hath/base/CacheHandlerTest.java diff --git a/hath-base/src/main/java/hath/base/CacheHandler.java b/hath-base/src/main/java/hath/base/CacheHandler.java index 8240b60..bb2e39f 100644 --- a/hath-base/src/main/java/hath/base/CacheHandler.java +++ b/hath-base/src/main/java/hath/base/CacheHandler.java @@ -23,18 +23,19 @@ package hath.base; -import java.lang.Thread; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.nio.file.Files; import java.nio.file.StandardCopyOption; import java.util.Enumeration; -import java.util.List; import java.util.Hashtable; +import hath.base.util.FileTools; + public class CacheHandler { private static final int MEMORY_TABLE_ELEMENTS = 1048576; private Hashtable staticRangeOldest = null; @@ -650,6 +651,7 @@ public synchronized void processBlacklist(long deltatime) { File file = hvFile.getLocalFileRef(); if(file.exists()) { + copyFileFromCacheDir(hvFile); deleteFileFromCache(hvFile); Out.debug("CacheHandler: Removed blacklisted file " + fileid); ++counter; @@ -803,4 +805,22 @@ public void markRecentlyAccessed(HVFile hvFile, boolean skipMetaUpdate) { } } } + + public void copyFileFromCacheDir(HVFile hvFile) { + String blacklistDirectory = "data/blacklist"; + File copySource = hvFile.getLocalFileRef(); + + try { + FileTools.checkAndCreateDir(new File(blacklistDirectory)); + + String filename = copySource.getName(); + + File copyTarget = new File(blacklistDirectory + "/" + filename); + + FileTools.copy(copySource, copyTarget); + Out.info("Successfully copied blacklisted file " + filename + " to blacklist directory"); + } catch (IOException e) { + Out.error("Cachehandler: Failed to copy blacklist file " + copySource + " due to error " + e); + } + } } \ No newline at end of file diff --git a/hath-base/src/test/java/hath/base/CacheHandlerTest.java b/hath-base/src/test/java/hath/base/CacheHandlerTest.java new file mode 100644 index 0000000..51a6c27 --- /dev/null +++ b/hath-base/src/test/java/hath/base/CacheHandlerTest.java @@ -0,0 +1,51 @@ +package hath.base; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + + +public class CacheHandlerTest { + private HentaiAtHomeClient client; + private CacheHandler cut; + + private Path sourceFile; + private HVFile mockHVFile; + private Settings settings; + + @BeforeEach + public void createCacheHandler() throws Exception { + client = mock(HentaiAtHomeClient.class); + mockHVFile = mock(HVFile.class); + settings = new Settings(); + + settings.updateSetting("skip_free_space_check", "true"); + settings.updateSetting("temp_dir", Files.createTempDirectory("CacheHandlerTestTempDir").toString()); + settings.initializeDirectories(); + + cut = new CacheHandler(client); + sourceFile = Files.createTempFile("hath-client-CacheHandlerTest", null); + } + + @AfterEach + public void tearDown() { + cut.terminateCache(); + } + + @Test + public void testCopyFileFromCacheDir() throws Exception { + when(mockHVFile.getLocalFileRef()).thenReturn(sourceFile.toFile()); + cut.copyFileFromCacheDir(mockHVFile); + + assertThat(new File("data/blacklist/" + sourceFile.getFileName().toString()).exists(), is(true)); + } +}