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));
        }
Exemple #2
0
		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();
		}