public void SyncConcurrentHeavyFolder(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); CleanDirectory(localDirectory); 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, 100, false, DateTime.MinValue, true); using (CmisRepo cmis = new CmisRepo(repoInfo, activityListener)) using (CmisRepo.SynchronizedFolder synchronizedFolder = new CmisRepo.SynchronizedFolder(repoInfo, cmis, activityListener)) { synchronizedFolder.resetFailedOperationsCounter(); synchronizedFolder.Sync(); CleanAll(localDirectory); WatcherTest.WaitWatcher(); synchronizedFolder.Sync(); Console.WriteLine("Synced to clean state."); // Invoke the backend synchronize for concurrent cmis.Initialize(); ISession session = CreateSession(repoInfo); IFolder folder = (IFolder)session.GetObjectByPath(remoteFolderPath); string name1 = "SyncConcurrent.1"; string path1 = Path.Combine(localDirectory, name1); string name2 = "SyncConcurrent.2"; string path2 = Path.Combine(localDirectory, name2); // create heavy folder in concurrent Console.WriteLine(" Concurrent create heavy folder"); Assert.IsFalse(Directory.Exists(path1)); IFolder folder1 = CreateFolder(folder, name1); Assert.IsTrue(WaitUntilDone(delegate { return Directory.Exists(path1); })); Assert.IsTrue(Directory.Exists(path1)); CreateHeavyFolderRemote(folder1); Assert.IsTrue(WaitUntilSyncIsDone(synchronizedFolder, delegate { return CheckHeavyFolder(path1); })); Assert.IsTrue(CheckHeavyFolder(path1)); // rename heavy folder in concurrent Console.WriteLine(" Concurrent rename heavy folder"); IFolder folder2 = RenameFolder(folder1, name2); Assert.IsTrue(WaitUntilDone(delegate { return CheckHeavyFolder(path2); })); Assert.IsTrue(CheckHeavyFolder(path2)); // move heavy folder in concurrent Console.WriteLine(" Concurrent move heavy folder"); folder1 = CreateFolder(folder, name1); folder2.Move(folder, folder1); Assert.IsTrue(WaitUntilDone(delegate { return CheckHeavyFolder(Path.Combine(path1, name2)); })); Assert.IsTrue(CheckHeavyFolder(Path.Combine(path1, name2))); // delete heavy folder in concurrent Console.WriteLine(" Remote delete heavy folder"); folder1.DeleteTree(true, null, true); Assert.IsTrue(WaitUntilDone(delegate { return !Directory.Exists(path1); })); Assert.IsFalse(Directory.Exists(path1)); // create and delete heavy folder in concurrent Console.WriteLine(" Remote create and delete heavy folder"); cmis.Disable(); folder1 = CreateFolder(folder, name1); CreateHeavyFolderRemote(folder1); cmis.Enable(); folder1.DeleteTree(true, null, true); Assert.IsTrue(WaitUntilDone(delegate { return !Directory.Exists(path1); })); Assert.IsFalse(Directory.Exists(path1)); // Clean. Console.WriteLine("Clean all."); Clean(localDirectory, synchronizedFolder); } }