/**
* Licensed to JumpMind Inc under one or more contributor
* license agreements. See the NOTICE file distributed
* with this work for additional information regarding
* copyright ownership. JumpMind Inc licenses this file
* to you under the GNU General Public License, version 3.0 (GPLv3)
* (the "License"); you may not use this file except in compliance
* with the License.
*
* You should have received a copy of the GNU General Public License,
* version 3.0 (GPLv3) along with this library; if not, see
* <http://www.gnu.org/licenses/>.
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jumpmind.symmetric.file;
import java.io.File;
import static org.junit.Assert.*;
import org.apache.commons.io.FileUtils;
import org.jumpmind.symmetric.model.FileSnapshot;
import org.jumpmind.symmetric.model.FileSnapshot.LastEventType;
import org.jumpmind.symmetric.model.FileTrigger;
import org.jumpmind.symmetric.model.FileTriggerRouter;
import org.jumpmind.symmetric.model.Router;
import org.junit.Before;
import org.junit.Test;
public class FileTriggerTrackerTest {
File snapshotDirectory = new File("target/snapshots");
File directory = new File("target/test");
File subdirectory = new File (directory, "a");
File fileInDirectory1 = new File(directory, "1.txt");
File fileInDirectory2 = new File(directory, "2.csv");
File fileInSubDirectory = new File(subdirectory, "3.doc");
@Before
public void setupTest() throws Exception {
recreateDirectorySpecAndFiles();
}
@Test
public void testTakeFullSnapshotRecursive() throws Exception {
FileTrigger fileTrigger = new FileTrigger(directory.getAbsolutePath(), true, null, null);
Router router = new Router();
FileTriggerRouter fileTriggerRouter = new FileTriggerRouter(fileTrigger, router);
FileTriggerTracker tracker = new FileTriggerTracker(fileTriggerRouter, null);
DirectorySnapshot snapshot = new DirectorySnapshot(fileTriggerRouter);
tracker.takeFullSnapshot(snapshot);
assertEquals(4, snapshot.size());
}
@Test
public void testTakeFullSnapshotNonRecursive() throws Exception {
FileTrigger fileTrigger = new FileTrigger(directory.getAbsolutePath(), false, null, null);
Router router = new Router();
FileTriggerRouter fileTriggerRouter = new FileTriggerRouter(fileTrigger, router);
FileTriggerTracker tracker = new FileTriggerTracker(fileTriggerRouter, null);
DirectorySnapshot snapshot = new DirectorySnapshot(fileTriggerRouter);
tracker.takeFullSnapshot(snapshot);
assertEquals(2, snapshot.size());
}
@Test
public void testTakeFullSnapshotIncludes() throws Exception {
FileTrigger fileTrigger = new FileTrigger(directory.getAbsolutePath(), false, "*.txt", null);
Router router = new Router();
FileTriggerRouter fileTriggerRouter = new FileTriggerRouter(fileTrigger, router);
FileTriggerTracker tracker = new FileTriggerTracker(fileTriggerRouter, null);
DirectorySnapshot snapshot = new DirectorySnapshot(fileTriggerRouter);
tracker.takeFullSnapshot(snapshot);
assertEquals(1, snapshot.size());
assertEquals(snapshot.get(0).getFileName(), FileSyncUtils.getRelativePath(fileInDirectory1, directory));
}
@Test
public void testTakeFullSnapshotExcludes() throws Exception {
FileTrigger fileTrigger = new FileTrigger(directory.getAbsolutePath(), false, null, "*.txt");
Router router = new Router();
FileTriggerRouter fileTriggerRouter = new FileTriggerRouter(fileTrigger, router);
FileTriggerTracker tracker = new FileTriggerTracker(fileTriggerRouter, null);
DirectorySnapshot snapshot = new DirectorySnapshot(fileTriggerRouter);
tracker.takeFullSnapshot(snapshot);
assertEquals(1, snapshot.size());
assertEquals(snapshot.get(0).getFileName(), FileSyncUtils.getRelativePath(fileInDirectory2, directory));
}
@Test
public void testTakeSnapshotRecursiveTestDelete() throws Exception {
FileTrigger fileTrigger = new FileTrigger(directory.getAbsolutePath(), true, null, null);
Router router = new Router();
FileTriggerRouter fileTriggerRouter = new FileTriggerRouter(fileTrigger, router);
FileTriggerTracker tracker = new FileTriggerTracker(fileTriggerRouter, null);
tracker.trackChanges();
FileUtils.deleteQuietly(fileInDirectory1);
DirectorySnapshot snapshot = tracker.trackChanges();
assertEquals(1, snapshot.size());
FileSnapshot change = snapshot.get(0);
assertEquals(change.getFileName(), FileSyncUtils.getRelativePath(fileInDirectory1, directory));
assertEquals(change.getLastEventType(), LastEventType.DELETE);
}
@Test
public void testTakeSnapshotAfterRestart() throws Exception {
}
protected void recreateDirectorySpecAndFiles() throws Exception {
FileUtils.deleteQuietly(snapshotDirectory);
FileUtils.deleteQuietly(directory);
directory.mkdirs();
subdirectory.mkdirs();
FileUtils.write(fileInDirectory1, "abc");
FileUtils.write(fileInDirectory2, "1,2,3");
FileUtils.write(fileInSubDirectory, "abc");
}
}