public void SyncEquality(string canonical_name, string localPath, string remoteFolderPath, string url, string user, string password, string repositoryId) { // Prepare checkout directory. string localDirectory = Path.Combine(CMISSYNCDIR, canonical_name); string canonical_name2 = canonical_name + ".equality"; string localDirectory2 = Path.Combine(CMISSYNCDIR, canonical_name2); CleanDirectory(localDirectory); CleanDirectory(localDirectory2); Console.WriteLine("Synced to clean state."); // Mock. IActivityListener activityListener = new Mock<IActivityListener>().Object; // Sync. RepoInfo repoInfo = new RepoInfo( canonical_name, CMISSYNCDIR, remoteFolderPath, url, user, password, repositoryId, 5000, false, DateTime.MinValue, true); RepoInfo repoInfo2 = new RepoInfo( canonical_name2, CMISSYNCDIR, remoteFolderPath, url, user, password, repositoryId, 5000, false, DateTime.MinValue, true); using (CmisRepo cmis = new CmisRepo(repoInfo, activityListener)) using (CmisRepo.SynchronizedFolder synchronizedFolder = new CmisRepo.SynchronizedFolder(repoInfo, cmis, activityListener)) using (CmisRepo cmis2 = new CmisRepo(repoInfo2, activityListener)) using (CmisRepo.SynchronizedFolder synchronizedFolder2 = new CmisRepo.SynchronizedFolder(repoInfo2, cmis2, activityListener)) using (Watcher watcher = new Watcher(localDirectory)) using (Watcher watcher2 = new Watcher(localDirectory2)) { synchronizedFolder.resetFailedOperationsCounter(); synchronizedFolder2.resetFailedOperationsCounter(); synchronizedFolder.Sync(); synchronizedFolder2.Sync(); CleanAll(localDirectory); CleanAll(localDirectory2); WatcherTest.WaitWatcher(); synchronizedFolder.Sync(); synchronizedFolder2.Sync(); Console.WriteLine("Synced to clean state."); // create file // remote filename = /SyncEquality.File Console.WriteLine("create file test."); string filename = "SyncEquality.File"; string file = Path.Combine(localDirectory, filename); string file2 = Path.Combine(localDirectory2, filename); Assert.IsFalse(File.Exists(file)); Assert.IsFalse(File.Exists(file2)); watcher.EnableRaisingEvents = true; int length = 1024; using (Stream stream = File.OpenWrite(file)) { byte[] content = new byte[length]; stream.Write(content, 0, content.Length); } Assert.IsTrue(File.Exists(file)); Assert.IsFalse(File.Exists(file2)); WatcherTest.WaitWatcher((int)repoInfo2.PollInterval, watcher, 1); watcher.EnableRaisingEvents = false; watcher.RemoveAll(); synchronizedFolder.Sync(); Assert.IsTrue(File.Exists(file)); Assert.IsFalse(File.Exists(file2)); Assert.IsTrue(WaitUntilSyncIsDone(synchronizedFolder2, delegate { FileInfo info = new FileInfo(file2); return info.Exists && info.Length == length; })); Assert.IsTrue(File.Exists(file)); Assert.IsTrue(File.Exists(file2)); // create folder // remote folder name = /SyncEquality.Folder Console.WriteLine("create folder test."); string foldername = "SyncEquality.Folder"; string folder = Path.Combine(localDirectory, foldername); string folder2 = Path.Combine(localDirectory2, foldername); Assert.IsFalse(Directory.Exists(folder)); Assert.IsFalse(Directory.Exists(folder2)); watcher.EnableRaisingEvents = true; Directory.CreateDirectory(folder); Assert.IsTrue(Directory.Exists(folder)); Assert.IsFalse(Directory.Exists(folder2)); WatcherTest.WaitWatcher((int)repoInfo2.PollInterval, watcher, 1); watcher.EnableRaisingEvents = false; watcher.RemoveAll(); synchronizedFolder.Sync(); Assert.IsTrue(Directory.Exists(folder)); Assert.IsFalse(Directory.Exists(folder2)); Assert.IsTrue(WaitUntilSyncIsDone(synchronizedFolder2, delegate { return Directory.Exists(folder2); })); Assert.IsTrue(Directory.Exists(folder)); Assert.IsTrue(Directory.Exists(folder2)); // move file // /SyncEquality.File -> /SyncEquality.Folder/SyncEquality.File Console.WriteLine("move file test."); string source = file; file = Path.Combine(folder, filename); file2 = Path.Combine(folder2, filename); Assert.IsFalse(File.Exists(file)); Assert.IsFalse(File.Exists(file2)); watcher.EnableRaisingEvents = true; File.Move(source, file); Assert.IsTrue(File.Exists(file)); Assert.IsFalse(File.Exists(file2)); WatcherTest.WaitWatcher((int)repoInfo2.PollInterval, watcher, 1); watcher.EnableRaisingEvents = false; watcher.RemoveAll(); synchronizedFolder.Sync(); Assert.IsTrue(File.Exists(file)); Assert.IsFalse(File.Exists(file2)); Assert.IsTrue(WaitUntilSyncIsDone(synchronizedFolder2, delegate { return File.Exists(file2); })); Assert.IsTrue(File.Exists(file)); Assert.IsTrue(File.Exists(file2)); // move folder // create a folder as move target = /SyncEquality.Folder.2/ Console.WriteLine("move folder test."); string foldername2 = "SyncEquality.Folder.2"; folder = Path.Combine(localDirectory, foldername2); folder2 = Path.Combine(localDirectory2, foldername2); Assert.IsFalse(Directory.Exists(folder)); Assert.IsFalse(Directory.Exists(folder2)); watcher.EnableRaisingEvents = true; Directory.CreateDirectory(folder); Assert.IsTrue(Directory.Exists(folder)); Assert.IsFalse(Directory.Exists(folder2)); WatcherTest.WaitWatcher((int)repoInfo2.PollInterval, watcher, 1); watcher.EnableRaisingEvents = false; watcher.RemoveAll(); synchronizedFolder.Sync(); Assert.IsTrue(Directory.Exists(folder)); Assert.IsFalse(Directory.Exists(folder2)); Assert.IsTrue(WaitUntilSyncIsDone(synchronizedFolder2, delegate { return Directory.Exists(folder2); })); Assert.IsTrue(Directory.Exists(folder)); Assert.IsTrue(Directory.Exists(folder2)); //move to the created folder // moved folder = /SyncEquality.Folder/ // target folder = /SyncEquality.Folder.2/ // result = /SyncEquality.Folder.2/SyncEquality.Folder/ file = Path.Combine(folder, foldername, filename); file2 = Path.Combine(folder2, foldername, filename); Assert.IsFalse(File.Exists(file)); Assert.IsFalse(File.Exists(file2)); watcher.EnableRaisingEvents = true; Directory.Move( Path.Combine(localDirectory, foldername), Path.Combine(folder, foldername)); Assert.IsTrue(File.Exists(file)); Assert.IsFalse(File.Exists(file2)); WatcherTest.WaitWatcher((int)repoInfo2.PollInterval, watcher, 1); watcher.EnableRaisingEvents = false; watcher.RemoveAll(); synchronizedFolder.Sync(); Assert.IsTrue(File.Exists(file)); Assert.IsFalse(File.Exists(file2)); Assert.IsTrue(WaitUntilSyncIsDone(synchronizedFolder2, delegate { return File.Exists(file2); })); Assert.IsTrue(File.Exists(file)); Assert.IsTrue(File.Exists(file2)); //change filecontent // remote file path = /SyncEquality.Folder.2/SyncEquality.Folder/SyncEquality.File Console.WriteLine("update file test."); int filecount = Directory.GetFiles(Path.Combine(folder, foldername)).Count(); int filecount2 = Directory.GetFiles(Path.Combine(folder2, foldername)).Count(); length = 2048; Assert.IsTrue(filecount == filecount2); Assert.IsTrue(filecount == 1); Console.WriteLine(" filecontent size = "+ length.ToString()); watcher.EnableRaisingEvents = true; using (Stream stream = File.OpenWrite(file)) { byte[] content = new byte[length]; stream.Write(content, 0, content.Length); } WatcherTest.WaitWatcher((int)repoInfo2.PollInterval, watcher, 1); watcher.EnableRaisingEvents = false; watcher.RemoveAll(); synchronizedFolder.Sync(); Assert.IsTrue(WaitUntilSyncIsDone(synchronizedFolder2, delegate { if(filecount2 == Directory.GetFiles(Path.Combine(folder2, foldername)).Count()) { FileInfo info = new FileInfo(file2); return info.Exists && info.Length == length; } else { return false; } }, 20)); Assert.AreEqual(filecount, Directory.GetFiles(Path.Combine(folder, foldername)).Count()); Assert.AreEqual(filecount2, Directory.GetFiles(Path.Combine(folder2, foldername)).Count()); Console.WriteLine(" checking file content equality"); using (Stream stream = File.OpenRead(file)) using (Stream stream2 = File.OpenRead(file2)) { Assert.IsTrue(stream.Length == stream2.Length && stream2.Length == length); byte[] content = new byte[length]; byte[] content2 = new byte[length]; stream.Read(content,0,length); stream.Read(content2,0,length); for(int i = 0; i < length; i++) Assert.AreEqual(content[i], content2[i]); } // delete file // remote file path = /SyncEquality.Folder.2/SyncEquality.Folder/SyncEquality.File Console.WriteLine("delete file test."); Assert.IsTrue(File.Exists(file)); Assert.IsTrue(File.Exists(file2)); watcher.EnableRaisingEvents = true; File.Delete(file); Assert.IsFalse(File.Exists(file)); Assert.IsTrue(File.Exists(file2)); WatcherTest.WaitWatcher((int)repoInfo2.PollInterval, watcher, 1); watcher.EnableRaisingEvents = false; watcher.RemoveAll(); Assert.IsTrue(WaitUntilSyncIsDone(synchronizedFolder, delegate { return WaitUntilSyncIsDone(synchronizedFolder2, delegate{ return !File.Exists(file) && !File.Exists(file2); }, 1); }, 20)); Assert.IsFalse(File.Exists(file)); Assert.IsFalse(File.Exists(file2)); // delete folder tree // delete remote folder = /SyncEquality.Folder.2/ Console.WriteLine("delete folder tree test."); Assert.IsTrue(Directory.Exists(folder)); Assert.IsTrue(Directory.Exists(folder2)); watcher.EnableRaisingEvents = true; Directory.Delete(folder, true); Assert.IsFalse(Directory.Exists(folder)); Assert.IsTrue(Directory.Exists(folder2)); WatcherTest.WaitWatcher((int)repoInfo2.PollInterval, watcher, 1); watcher.EnableRaisingEvents = false; watcher.RemoveAll(); synchronizedFolder.Sync(); Assert.IsFalse(Directory.Exists(folder)); Assert.IsTrue(Directory.Exists(folder2)); Assert.IsTrue(WaitUntilSyncIsDone(synchronizedFolder2, delegate { return !Directory.Exists(folder2); }, 20)); Assert.IsFalse(Directory.Exists(folder)); Assert.IsFalse(Directory.Exists(folder2)); // Clean. Console.WriteLine("Clean all."); Clean(localDirectory, synchronizedFolder); Clean(localDirectory2, synchronizedFolder2); } }
public void TestRemove() { using (Watcher watcher = new Watcher(TestFolder)) { watcher.EnableRaisingEvents = true; List<string> names = new List<string>(); for (int i = 0; i < NormalNumber; ++i) { CreateTestFile(); names.Add(GetPathname()); } WaitWatcher(40000,watcher,NormalNumber); Assert.AreEqual(NormalNumber, watcher.GetChangeList().Count); for (int i = 0; i < NormalNumber; ++i) { Assert.AreEqual(NormalNumber - i, watcher.GetChangeList().Count); if (i % 2 == 0) { watcher.RemoveChange(names[i]); } else { watcher.RemoveChange(names[i],Watcher.ChangeTypes.Created); } } names.Clear(); for (int i = 0; i < NormalNumber; ++i) { CreateTestFile(); } WaitWatcher(40000,watcher,NormalNumber); Assert.AreEqual(NormalNumber, watcher.GetChangeList().Count); watcher.RemoveAll(); Assert.AreEqual(0, watcher.GetChangeList().Count); } }
public void SyncRenamedFiles(string canonical_name, string localPath, string remoteFolderPath, string url, string user, string password, string repositoryId) { // Prepare checkout directory. string localDirectory = Path.Combine(CMISSYNCDIR, canonical_name); string canonical_name2 = canonical_name + ".equality"; string localDirectory2 = Path.Combine(CMISSYNCDIR, canonical_name2); CleanDirectory(localDirectory); CleanDirectory(localDirectory2); Console.WriteLine("Synced to clean state."); // Mock. IActivityListener activityListener = new Mock<IActivityListener>().Object; // Sync. RepoInfo repoInfo = new RepoInfo( canonical_name, CMISSYNCDIR, remoteFolderPath, url, user, password, repositoryId, 5000, false, DateTime.MinValue, true); RepoInfo repoInfo2 = new RepoInfo( canonical_name2, CMISSYNCDIR, remoteFolderPath, url, user, password, repositoryId, 5000, false, DateTime.MinValue, true); using (CmisRepo cmis = new CmisRepo(repoInfo, activityListener)) using (CmisRepo.SynchronizedFolder synchronizedFolder = new CmisRepo.SynchronizedFolder(repoInfo, cmis, activityListener)) using (CmisRepo cmis2 = new CmisRepo(repoInfo2, activityListener)) using (CmisRepo.SynchronizedFolder synchronizedFolder2 = new CmisRepo.SynchronizedFolder(repoInfo2, cmis2, activityListener)) using (Watcher watcher = new Watcher(localDirectory)) using (Watcher watcher2 = new Watcher(localDirectory2)) { synchronizedFolder.resetFailedOperationsCounter(); synchronizedFolder2.resetFailedOperationsCounter(); synchronizedFolder.Sync(); synchronizedFolder2.Sync(); CleanAll(localDirectory); CleanAll(localDirectory2); WatcherTest.WaitWatcher(); synchronizedFolder.Sync(); synchronizedFolder2.Sync(); Console.WriteLine("Synced to clean state."); // create file // remote filename = /SyncEquality.File Console.WriteLine("create file test."); string filename = "SyncRename.File"; string file = Path.Combine(localDirectory, filename); string file2 = Path.Combine(localDirectory2, filename); int localFilesCount = 0; int localFilesCount2 = 0; Assert.IsFalse(File.Exists(file)); Assert.IsFalse(File.Exists(file2)); watcher.EnableRaisingEvents = true; int length = 1024; using (Stream stream = File.OpenWrite(file)) { byte[] content = new byte[length]; stream.Write(content, 0, content.Length); } Assert.IsTrue(File.Exists(file)); Assert.IsFalse(File.Exists(file2)); WatcherTest.WaitWatcher((int)repoInfo2.PollInterval, watcher, 1); watcher.EnableRaisingEvents = false; watcher.RemoveAll(); Assert.IsTrue(File.Exists(file)); Assert.IsFalse(File.Exists(file2)); Assert.IsTrue(WaitUntilSyncIsDone(synchronizedFolder2, delegate { synchronizedFolder.Sync(); FileInfo info = new FileInfo(file2); return info.Exists && info.Length == length; }), String.Format("The new file \"{0}\"should exist and it should have got the length \"{1}\"", file2, length)); Assert.IsTrue(File.Exists(file)); Assert.IsTrue(File.Exists(file2)); localFilesCount = Directory.GetFiles(localDirectory).Length; localFilesCount2 = Directory.GetFiles(localDirectory2).Length; Assert.AreEqual(localFilesCount, localFilesCount2, String.Format("Both local folder should contain one file before renaming a file, but there are {0} and {1} files", localFilesCount, localFilesCount2)); // Only one file should exist Assert.AreEqual(1, localFilesCount2, String.Format("There should exist only one file in the local folder before renaming, but there are {0}", localFilesCount2)); string renamedfilename = "SyncRenameTarget.File"; string renamedfile = Path.Combine(localDirectory, renamedfilename); string renamedfile2 = Path.Combine(localDirectory2, renamedfilename); watcher.EnableRaisingEvents = true; File.Move(file, renamedfile); WatcherTest.WaitWatcher((int) repoInfo2.PollInterval, watcher, 1); watcher.EnableRaisingEvents = false; watcher.RemoveAll(); Assert.IsTrue(File.Exists(renamedfile)); Assert.IsTrue(!File.Exists(renamedfile2)); Assert.IsTrue(WaitUntilSyncIsDone(synchronizedFolder2, delegate { synchronizedFolder.Sync(); FileInfo info = new FileInfo(renamedfile2); return info.Exists && info.Length == length; })); localFilesCount = Directory.GetFiles(localDirectory).Length; localFilesCount2 = Directory.GetFiles(localDirectory2).Length; Assert.AreEqual(localFilesCount, localFilesCount2, String.Format("Both local folder should contain one file, but there are {0} and {1} files", localFilesCount, localFilesCount2)); // Only one file should exist Assert.AreEqual(1, localFilesCount2, String.Format("There should exist only one file in the local folder, but there are {0}", localFilesCount2)); } }