public void CopyAsyncReportTest() { using var tempRoot = new TemporaryDirectory(); var srcFile = tempRoot.CreateFile().FullName; var dstFile = tempRoot.RandomTxtFileFullPath; using var cts = new CancellationTokenSource(); var collection = new Collection <string>(); var prog = new Progress <Tuple <BackgroundCopyJobState, byte> >(t => collection.Add($"{t.Item2}% : {t.Item1}")); Assert.That(() => BackgroundCopyManager.CopyAsync(srcFile, dstFile, cts.Token, prog), Throws.Nothing); Assert.That(File.Exists(dstFile), Is.True); Assert.That(collection.Count, Is.GreaterThan(0)); TestContext.Write(string.Join("\r\n", collection)); }
public void DownloadJobTest() { using var tempRoot = new TemporaryDirectory(); DirectoryInfo remoteRoot; remoteRoot = tempRoot.CreateSubDirectory(nameof(remoteRoot)); DirectoryInfo localDirectory; localDirectory = tempRoot.CreateSubDirectory(nameof(localDirectory)); var allFileInfos = new[] { tempRoot.CreateSubDirectoryFile(remoteRoot, fileSize: 1 * TemporaryDirectory.OneMebibyte), tempRoot.CreateSubDirectoryFile(remoteRoot, fileSize: 2 * TemporaryDirectory.OneMebibyte), tempRoot.CreateSubDirectoryFile(remoteRoot, fileSize: 3 * TemporaryDirectory.OneMebibyte), tempRoot.CreateSubDirectoryFile(remoteRoot, fileSize: 4 * TemporaryDirectory.OneMebibyte), tempRoot.CreateSubDirectoryFile(remoteRoot, fileSize: 5 * TemporaryDirectory.OneMebibyte) }; var allFilesTotalSize = allFileInfos.Select(fi => fi.Length).Sum(); var allFilesToDownload = allFileInfos.Select(fi => fi.Name).ToArray(); var raiseException = false; AutoResetEvent autoReset; // Local method because of local vars. void OnDownloadCompleted(object s, BackgroundCopyJobEventArgs e) { DownloadCompleted(e, autoReset, allFilesToDownload.Length, allFilesTotalSize); } // Create a download job. using var downloadJob = BackgroundCopyManager.Jobs.Add($"{nameof(remoteRoot)} download"); using (autoReset = new AutoResetEvent(false)) { // Set job properties. downloadJob.Credentials.Add(BackgroundCopyJobCredentialScheme.Digest, BackgroundCopyJobCredentialTarget.Proxy, "user", "mypwd"); downloadJob.CustomHeaders = new WebHeaderCollection() { "A1:Test", "A2:Prova" }; downloadJob.MinimumNotificationInterval = TimeSpan.FromSeconds(1); // Set event handlers for job, these are weak references. downloadJob.Error += OnDownloadError; downloadJob.FileTransferred += OnDownloadFileTransferred; downloadJob.Completed += OnDownloadCompleted; // Add download file information. downloadJob.Files.AddRange(remoteRoot.FullName, localDirectory.FullName, allFilesToDownload); // Start (resume) the job. downloadJob.Resume(); // Block thread and wait. raiseException = !autoReset.WaitOne(TimeSpan.FromSeconds(10)); } // Remove weak references to prevent memory leak. downloadJob.Completed -= OnDownloadCompleted; downloadJob.FileTransferred -= OnDownloadFileTransferred; downloadJob.Error -= OnDownloadError; if (raiseException) throw new InvalidOperationException(); }