public void ResumeBigFile(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 + ".BigFile";
string localDirectory2 = Path.Combine(CMISSYNCDIR, canonical_name2);
CleanDirectory(localDirectory);
CleanDirectory(localDirectory2);
Console.WriteLine("Synced to clean state.");
string filename = "ResumeBigFile.File";
int fileSizeInMB = 10;
string file = Path.Combine(localDirectory, filename);
string file2 = Path.Combine(localDirectory2, filename);
// 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.ChunkSize = 1024 * 1024;
RepoInfo repoInfo2 = new RepoInfo(
canonical_name2,
CMISSYNCDIR,
remoteFolderPath,
url,
user,
password,
repositoryId,
5000,
false,
DateTime.MinValue,
true);
repoInfo2.ChunkSize = 1024 * 1024;
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.");
}
// create file
byte[] data = new byte[1024 * 1024];
new Random().NextBytes(data);
using (FileStream stream = File.OpenWrite(file))
{
for (int i = 0; i < fileSizeInMB; i++)
{
stream.Write(data, 0, data.Length);
}
}
string remoteFilePath = (remoteFolderPath + "/" + filename).Replace("//", "/");
Console.WriteLine(String.Format("Upload big file size: {0}MB", fileSizeInMB));
for (int currentFileSizeInMB = 0, retry = 0; currentFileSizeInMB < fileSizeInMB && retry < 100; ++retry)
{
using (CmisRepo cmis = new CmisRepo(repoInfo, activityListener))
using (CmisRepo.SynchronizedFolder synchronizedFolder =
new CmisRepo.SynchronizedFolder(repoInfo, cmis, activityListener))
{
// disable the chunk upload
//synchronizedFolder.SyncInBackground();
//System.Threading.Thread.Sleep(1000);
synchronizedFolder.Sync();
}
try
{
IDocument doc = (IDocument)CreateSession(repoInfo).GetObjectByPath(remoteFilePath);
long fileSize = doc.ContentStreamLength ?? 0;
Assert.IsTrue(0 == fileSize % (1024 * 1024));
currentFileSizeInMB = (int)(fileSize / 1024 / 1024);
}
catch (Exception)
{
}
Console.WriteLine("Upload big file, current size: {0}MB", currentFileSizeInMB);
}
Console.WriteLine(String.Format("Download big file size: {0}MB", fileSizeInMB));
for (int currentFileSizeInMB = 0, retry = 0; currentFileSizeInMB < fileSizeInMB && retry < 100; ++retry)
{
using (CmisRepo cmis2 = new CmisRepo(repoInfo2, activityListener))
using (CmisRepo.SynchronizedFolder synchronizedFolder2 =
new CmisRepo.SynchronizedFolder(repoInfo2, cmis2, activityListener))
{
synchronizedFolder2.SyncInBackground(true);
System.Threading.Thread.Sleep(1000);
}
string file2Tmp = file2 + ".sync";
FileInfo info = new FileInfo(file2);
FileInfo infoTmp = new FileInfo(file2Tmp);
if (infoTmp.Exists)
{
currentFileSizeInMB = (int)(infoTmp.Length / 1024 / 1024);
}
else if (info.Exists)
{
currentFileSizeInMB = (int)(info.Length / 1024 / 1024);
}
Console.WriteLine("Download big file, current size: {0}MB", currentFileSizeInMB);
}
string checksum1 = Database.Checksum(file);
string checksum2 = Database.Checksum(file2);
Assert.IsTrue(checksum1 == checksum2);
using (CmisRepo cmis2 = new CmisRepo(repoInfo2, activityListener))
using (CmisRepo.SynchronizedFolder synchronizedFolder2 =
new CmisRepo.SynchronizedFolder(repoInfo2, cmis2, activityListener))
{
// Clean.
Console.WriteLine("Clean all.");
Clean(localDirectory2, synchronizedFolder2);
}
}