/* * Syncany, www.syncany.org * Copyright (C) 2011-2016 Philipp C. Heckel <philipp.heckel@gmail.com> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.syncany.tests.unit.config; import static org.junit.Assert.*; import java.io.File; import org.junit.Test; import org.syncany.config.Cache; import org.syncany.tests.unit.util.TestFileUtil; public class CacheTest { @Test public void testCacheSizeOkay() throws Exception { File testCacheFolder = TestFileUtil.createTempDirectoryInSystemTemp(); Cache cache = new Cache(testCacheFolder); cache.setKeepBytes(50*1024); TestFileUtil.createRandomFilesInDirectory(testCacheFolder, 10*1024, 4); assertEquals(4, testCacheFolder.listFiles().length); cache.clear(); assertEquals(4, testCacheFolder.listFiles().length); TestFileUtil.deleteDirectory(testCacheFolder); } @Test public void testCacheNeedsCleaning5Left() throws Exception { File testCacheFolder = TestFileUtil.createTempDirectoryInSystemTemp(); Cache cache = new Cache(testCacheFolder); cache.setKeepBytes(50*1024); TestFileUtil.createRandomFilesInDirectory(testCacheFolder, 10*1024, 10); assertEquals(10, testCacheFolder.listFiles().length); cache.clear(); assertEquals(5, testCacheFolder.listFiles().length); TestFileUtil.deleteDirectory(testCacheFolder); } @Test public void testCacheNeedsCleaning1Left() throws Exception { File testCacheFolder = TestFileUtil.createTempDirectoryInSystemTemp(); Cache cache = new Cache(testCacheFolder); cache.setKeepBytes(50*1024); TestFileUtil.createRandomFile(new File(testCacheFolder, "10"), 10*1024); Thread.sleep(1001); // Linux/ext3 only has 1s accuracy TestFileUtil.createRandomFile(new File(testCacheFolder, "30"), 30*1024); Thread.sleep(1001); TestFileUtil.createRandomFile(new File(testCacheFolder, "20"), 20*1024); Thread.sleep(1001); TestFileUtil.createRandomFile(new File(testCacheFolder, "40"), 40*1024); assertEquals(4, testCacheFolder.listFiles().length); cache.clear(); assertEquals(1, testCacheFolder.listFiles().length); assertFalse(new File(testCacheFolder, "10").exists()); assertFalse(new File(testCacheFolder, "30").exists()); assertFalse(new File(testCacheFolder, "20").exists()); assertTrue(new File(testCacheFolder, "40").exists()); TestFileUtil.deleteDirectory(testCacheFolder); } @Test public void testCacheNeedsCleaning2Left() throws Exception { File testCacheFolder = TestFileUtil.createTempDirectoryInSystemTemp(); Cache cache = new Cache(testCacheFolder); cache.setKeepBytes(50*1024); TestFileUtil.createRandomFile(new File(testCacheFolder, "40"), 40*1024); Thread.sleep(1001); // Linux/ext3 only has 1s accuracy TestFileUtil.createRandomFile(new File(testCacheFolder, "30"), 30*1024); Thread.sleep(1001); TestFileUtil.createRandomFile(new File(testCacheFolder, "20"), 20*1024); Thread.sleep(1001); TestFileUtil.createRandomFile(new File(testCacheFolder, "10"), 10*1024); assertEquals(4, testCacheFolder.listFiles().length); cache.clear(); assertEquals(2, testCacheFolder.listFiles().length); assertFalse(new File(testCacheFolder, "40").exists()); assertFalse(new File(testCacheFolder, "30").exists()); assertTrue(new File(testCacheFolder, "20").exists()); assertTrue(new File(testCacheFolder, "10").exists()); TestFileUtil.deleteDirectory(testCacheFolder); } }