Skip to content
Snippets Groups Projects
Commit 7f3ff186 authored by ribeaudc's avatar ribeaudc
Browse files

[LMS-414]

add: - More Unit tests for 'WatermarkWatcher' and 'DirectoryScanningTimerTask'.

SVN: 6001
parent 2c1f4f38
No related branches found
No related tags found
No related merge requests found
......@@ -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();
}
......
......@@ -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());
}
}
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment