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);
}
}