diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTask.java b/common/source/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTask.java index 7a4d355208e8e71ca28a1993f47fd3a4e80ccc19..2f371ba0d386aa07cd88fdd0c8ec8415d1635fb9 100644 --- a/common/source/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTask.java +++ b/common/source/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTask.java @@ -311,7 +311,7 @@ public final class DirectoryScanningTimerTask extends TimerTask } /** Removes given <var>storeItems</var> from the set of faulty ones. */ - public final void removeFaultyPaths(final StoreItem[] storeItems) + public final void removeFaultyPaths(final StoreItem... storeItems) { assert storeItems != null : "Unspecified store items."; final int size = storeItems.length; @@ -328,7 +328,7 @@ public final class DirectoryScanningTimerTask extends TimerTask if (operationLog.isDebugEnabled()) { operationLog.debug(String.format( - "Following paths %s have been removed from the from the faulty ones.", paths)); + "Following paths %s have been removed from the the faulty ones.", paths)); } refreshFaultyPathsFile(); } diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTaskTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTaskTest.java index 53df73c9f64dddf0b44ab32eecc5f34fc5f548af..40e4fd0f0acbff284770832fead1532d3401d4e0 100644 --- a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTaskTest.java +++ b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTaskTest.java @@ -76,13 +76,20 @@ public class DirectoryScanningTimerTaskTest private static class MockPathHandler implements IPathHandler { - final List<File> handledPaths = new ArrayList<File>(); + private final List<File> handledPaths = new ArrayList<File>(); + + private boolean mayHandle = true; public void clear() { handledPaths.clear(); } + public final void setMayHandle(final boolean mayHandle) + { + this.mayHandle = mayHandle; + } + // // IPathHandler // @@ -95,7 +102,7 @@ public class DirectoryScanningTimerTaskTest public final boolean mayHandle(final File path) { - return true; + return mayHandle; } } @@ -117,11 +124,24 @@ public class DirectoryScanningTimerTaskTest mockPathHandler.clear(); } - @Test - public void testFaultyPathsDeletion() + private final File getFaultyPathFile() { final File faultyPaths = new File(workingDirectory, DirectoryScanningTimerTask.FAULTY_PATH_FILENAME); + return faultyPaths; + } + + private final static void createNewFile(final File someFile) throws IOException + { + someFile.createNewFile(); + assert someFile.exists() && someFile.isFile(); + someFile.deleteOnExit(); + } + + @Test + public void testFaultyPathsDeletion() + { + final File faultyPaths = getFaultyPathFile(); CollectionIO.writeIterable(faultyPaths, Collections.singleton("some_path")); new DirectoryScanningTimerTask(workingDirectory, ACCEPT_ALL_FILTER, mockPathHandler); assertEquals(0, faultyPaths.length()); @@ -131,8 +151,7 @@ public class DirectoryScanningTimerTaskTest public void testProcessOK() throws IOException { final File someFile = new File(workingDirectory, "some_file"); - someFile.createNewFile(); - someFile.deleteOnExit(); + createNewFile(someFile); final DirectoryScanningTimerTask scanner = new DirectoryScanningTimerTask(workingDirectory, ACCEPT_ALL_FILTER, mockPathHandler); assertEquals(0, mockPathHandler.handledPaths.size()); @@ -145,8 +164,7 @@ public class DirectoryScanningTimerTaskTest public void testFileFilterUsed() throws IOException { final File someFile = new File(workingDirectory, "some_file"); - someFile.createNewFile(); - someFile.deleteOnExit(); + createNewFile(someFile); final DirectoryScanningTimerTask scanner = new DirectoryScanningTimerTask(workingDirectory, ALWAYS_FALSE_FILE_FILTER, mockPathHandler); @@ -158,12 +176,9 @@ public class DirectoryScanningTimerTaskTest @Test public void testManipulateFaultyPaths() throws IOException { - final File faultyPaths = - new File(workingDirectory, DirectoryScanningTimerTask.FAULTY_PATH_FILENAME); + final File faultyPaths = getFaultyPathFile(); final File someFile = new File(workingDirectory, "some_file"); - someFile.createNewFile(); - someFile.deleteOnExit(); - assert someFile.exists(); + createNewFile(someFile); final DirectoryScanningTimerTask scanner = new DirectoryScanningTimerTask(workingDirectory, ACCEPT_ALL_FILTER, mockPathHandler); final String fileLocation = someFile.getPath(); @@ -175,8 +190,7 @@ public class DirectoryScanningTimerTaskTest @Test public void testFaultyPaths() throws IOException { - final File faultyPaths = - new File(workingDirectory, DirectoryScanningTimerTask.FAULTY_PATH_FILENAME); + final File faultyPaths = getFaultyPathFile(); final File someFile = new File(workingDirectory, "some_file"); final MockPathHandler myPathHandler = new MockPathHandler() { @@ -193,9 +207,7 @@ public class DirectoryScanningTimerTaskTest super.handle(path); } }; - someFile.createNewFile(); - assert someFile.exists(); - someFile.deleteOnExit(); + createNewFile(someFile); final DirectoryScanningTimerTask scanner = new DirectoryScanningTimerTask(workingDirectory, ACCEPT_ALL_FILTER, myPathHandler); @@ -225,14 +237,10 @@ public class DirectoryScanningTimerTaskTest final long now = System.currentTimeMillis(); dir.mkdir(); dir.deleteOnExit(); - f1.createNewFile(); - f1.deleteOnExit(); - f2.createNewFile(); - f2.deleteOnExit(); - f3.createNewFile(); - f3.deleteOnExit(); - f4.createNewFile(); - f4.deleteOnExit(); + createNewFile(f1); + createNewFile(f2); + createNewFile(f3); + createNewFile(f4); // Order should be: 2, 4, 3, 1 f2.setLastModified(now - 10000); f4.setLastModified(now - 5000); @@ -287,9 +295,7 @@ public class DirectoryScanningTimerTaskTest final DirectoryScanningTimerTask scanner = new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler); dir.delete(); - dir.createNewFile(); - dir.deleteOnExit(); - assert dir.isFile(); + createNewFile(dir); scanner.run(); appender.verifyLogHasHappened(); dir.delete(); @@ -306,8 +312,7 @@ public class DirectoryScanningTimerTaskTest dir.mkdir(); dir.deleteOnExit(); final File file = new File(dir, "some.file"); - file.createNewFile(); - file.deleteOnExit(); + createNewFile(file); final LogMonitoringAppender appender1 = LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "Failed to get listing of directory"); @@ -418,4 +423,34 @@ public class DirectoryScanningTimerTaskTest } } + @Test + public final void testRemoveFaultyPaths() throws IOException + { + final MockPathHandler pathHandler = new MockPathHandler(); + pathHandler.setMayHandle(false); + final DirectoryScanningTimerTask directoryScanning = + new DirectoryScanningTimerTask(workingDirectory, ACCEPT_ALL_FILTER, pathHandler); + testPathOrder(); + // No faulty file at this point. + assertEquals(1, workingDirectory.listFiles().length); + directoryScanning.run(); + // One faulty file found (as mayHandle is set to false). + List<String> faulty = CollectionIO.readList(getFaultyPathFile()); + assertEquals(1, faulty.size()); + final File file = new File(faulty.get(0)); + directoryScanning.removeFaultyPaths(DirectoryScannedStore.asItem(file)); + faulty = CollectionIO.readList(getFaultyPathFile()); + // Faulty file is empty. + assertEquals(0, faulty.size()); + // Two files found (inclusive the faulty file). + assertEquals(2, workingDirectory.listFiles().length); + pathHandler.setMayHandle(true); + directoryScanning.run(); + faulty = CollectionIO.readList(getFaultyPathFile()); + assertEquals(0, faulty.size()); + // Only the faulty file present now. + final File[] files = workingDirectory.listFiles(); + assertEquals(1, files.length); + assertEquals(DirectoryScanningTimerTask.FAULTY_PATH_FILENAME, files[0].getName()); + } } diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/WatermarkWatcherTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/WatermarkWatcherTest.java index 780921a1085ef8dcb2231af2bcfeafebe4c602f0..1fde994686ed03dae56d5682d88a0ddbdf52b278 100644 --- a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/WatermarkWatcherTest.java +++ b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/WatermarkWatcherTest.java @@ -61,7 +61,12 @@ public final class WatermarkWatcherTest context = new Mockery(); logRecorder = new BufferedAppender("%m", Level.INFO); freeSpaceProvider = context.mock(IFreeSpaceProvider.class); - watermarkWatcher = new WatermarkWatcher(DEFAULT_WATERMARK, freeSpaceProvider); + watermarkWatcher = createWatermarkWatcher(DEFAULT_WATERMARK); + } + + private final WatermarkWatcher createWatermarkWatcher(final long watermark) + { + return new WatermarkWatcher(watermark, freeSpaceProvider); } @AfterMethod @@ -92,7 +97,7 @@ public final class WatermarkWatcherTest } @Test - public final void testRunFailed() + public final void testRun() { boolean fail = true; try @@ -103,6 +108,10 @@ public final class WatermarkWatcherTest fail = false; } assertFalse(fail); + final WatermarkWatcher watcher = new WatermarkWatcher(-1); + watcher.setPath(DEFAULT_PATH); + // -1 means infinity, so no call to IFreeSpaceProvider + watcher.run(); } @DataProvider(name = "freeSpaces") @@ -132,6 +141,33 @@ public final class WatermarkWatcherTest context.assertIsSatisfied(); } + @Test + public final void testIsBelowWithNegativeValue() throws IOException + { + final WatermarkWatcher watcher = createWatermarkWatcher(-1); + watcher.setPath(DEFAULT_PATH); + watcher.run(); + assertEquals(false, watermarkWatcher.isBelow()); + context.assertIsSatisfied(); + } + + @Test + public final void testIsBelowWithZero() throws IOException + { + final WatermarkWatcher watcher = createWatermarkWatcher(0); + watcher.setPath(DEFAULT_PATH); + context.checking(new Expectations() + { + { + one(freeSpaceProvider).freeSpaceKb(DEFAULT_PATH); + will(returnValue(0L)); + } + }); + watcher.run(); + assertEquals(false, watermarkWatcher.isBelow()); + context.assertIsSatisfied(); + } + private int i; @Test @@ -199,6 +235,7 @@ public final class WatermarkWatcherTest assertEquals(watermarkState.getFreeSpace(), freeSpace); assertEquals(watermarkState.getPath(), DEFAULT_PATH); assertEquals(watermarkState.getWatermark(), DEFAULT_WATERMARK); + assertFalse(WatermarkWatcher.isBelow(watermarkState)); context.assertIsSatisfied(); } } \ No newline at end of file