From 7f3ff186868f4d091833c85b0508b9a93170c73c Mon Sep 17 00:00:00 2001
From: ribeaudc <ribeaudc>
Date: Tue, 13 May 2008 09:12:07 +0000
Subject: [PATCH] [LMS-414] add: - More Unit tests for 'WatermarkWatcher' and
 'DirectoryScanningTimerTask'.

SVN: 6001
---
 .../utilities/DirectoryScanningTimerTask.java |  4 +-
 .../DirectoryScanningTimerTaskTest.java       | 97 +++++++++++++------
 .../utilities/WatermarkWatcherTest.java       | 41 +++++++-
 3 files changed, 107 insertions(+), 35 deletions(-)

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 7a4d355208e..2f371ba0d38 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 53df73c9f64..40e4fd0f0ac 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 780921a1085..1fde994686e 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
-- 
GitLab