public void UploadJobTest() { using var tempRoot = new TemporaryDirectory(); DirectoryInfo remoteRoot; remoteRoot = tempRoot.CreateSubDirectory(nameof(remoteRoot)); DirectoryInfo localDirectory; localDirectory = tempRoot.CreateSubDirectory(nameof(localDirectory)); var allFileInfos = new[] { tempRoot.CreateSubDirectoryFile(localDirectory, fileSize: 5 * TemporaryDirectory.OneMebibyte) }; var allFilesTotalSize = allFileInfos.Select(fi => fi.Length).Sum(); var allFilesToUpload = allFileInfos.Select(fi => fi.Name).ToArray(); var raiseException = false; AutoResetEvent autoReset; // Local method because of local vars. void OnUploadCompleted(object s, BackgroundCopyJobEventArgs e) { UploadCompleted(e, autoReset, allFilesToUpload.Length, allFilesTotalSize); } // Create an upload job. using var uploadJob = BackgroundCopyManager.Jobs.Add($"{nameof(remoteRoot)} upload", jobType: BackgroundCopyJobType.Upload); using (autoReset = new AutoResetEvent(false)) { // Set event handlers for job, these are weak references. uploadJob.Error += OnUploadError; uploadJob.FileTransferred += OnUploadFileTransferred; uploadJob.Completed += OnUploadCompleted; // Add upload file information. var fileToUpload = Path.Combine(remoteRoot.FullName, allFileInfos[0].Name); uploadJob.Files.Add(fileToUpload, allFileInfos[0].FullName); // Start (resume) the job. uploadJob.Resume(); // Block thread and wait. raiseException = !autoReset.WaitOne(TimeSpan.FromSeconds(10)); } // Remove weak references to prevent memory leak. uploadJob.Completed -= OnUploadCompleted; uploadJob.FileTransferred -= OnUploadFileTransferred; uploadJob.Error -= OnUploadError; if (raiseException) { throw new InvalidOperationException(); } }
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(); }