mirror of https://github.com/dahall/Vanara.git
250 lines
11 KiB
C#
250 lines
11 KiB
C#
using NUnit.Framework;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Security.Cryptography.X509Certificates;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Vanara.IO.Tests
|
|
{
|
|
[TestFixture()]
|
|
public class BackgroundCopyTests
|
|
{
|
|
const string jname = "TestJob";
|
|
const string src = @"file:///C:/Temp/Holes.mp4";
|
|
const string dest = @"D:\dest.bin";
|
|
|
|
[Test]
|
|
public void EnumJobTest()
|
|
{
|
|
var cnt = 0;
|
|
Assert.That(() => BackgroundCopyManager.Jobs.Count, Throws.Nothing);
|
|
Assert.That(cnt = BackgroundCopyManager.Jobs.Count, Is.GreaterThanOrEqualTo(0));
|
|
Assert.That(BackgroundCopyManager.Jobs.Count(), Is.EqualTo(cnt));
|
|
}
|
|
|
|
[Test]
|
|
public void VerTest()
|
|
{
|
|
Assert.That(BackgroundCopyManager.Version, Is.GreaterThanOrEqualTo(new Version(10, 0)));
|
|
}
|
|
|
|
[Test]
|
|
public void JobCollTest()
|
|
{
|
|
var guid = Guid.Empty;
|
|
BackgroundCopyJob job = null;
|
|
|
|
Assert.That(() => { var j = BackgroundCopyManager.Jobs.Add(jname); guid = j.ID; }, Throws.Nothing);
|
|
Assert.That(BackgroundCopyManager.Jobs.Count, Is.GreaterThanOrEqualTo(1));
|
|
Assert.That(BackgroundCopyManager.Jobs.Contains(guid), Is.True);
|
|
Assert.That(() => job = BackgroundCopyManager.Jobs[guid], Throws.Nothing);
|
|
Assert.That(job, Is.Not.Null);
|
|
Assert.That(BackgroundCopyManager.Jobs.Count(j => j.ID == guid), Is.EqualTo(1));
|
|
var array = new BackgroundCopyJob[BackgroundCopyManager.Jobs.Count];
|
|
Assert.That(() => ((ICollection<BackgroundCopyJob>)BackgroundCopyManager.Jobs).CopyTo(array, 0), Throws.Nothing);
|
|
Assert.That(array[0], Is.Not.Null);
|
|
Assert.That(() => BackgroundCopyManager.Jobs.Remove(job), Throws.Nothing);
|
|
Assert.That(BackgroundCopyManager.Jobs.Contains(guid), Is.False);
|
|
}
|
|
|
|
[Test]
|
|
public void FileCollTest()
|
|
{
|
|
var job = BackgroundCopyManager.Jobs.Add(jname);
|
|
System.IO.File.Delete(dest);
|
|
Assert.That(() => job.Files.Add(src, dest), Throws.Nothing);
|
|
Assert.That(job.Files.Count, Is.EqualTo(1));
|
|
Assert.That(job.Files.Count(), Is.EqualTo(1));
|
|
Assert.That(job.Files.First().LocalFilePath, Is.EqualTo(dest));
|
|
Assert.That(() => job.Cancel(), Throws.Nothing);
|
|
}
|
|
|
|
[Test]
|
|
public void CopyTest()
|
|
{
|
|
System.IO.File.Delete(dest);
|
|
Assert.That(() => BackgroundCopyManager.Copy(src, dest), Throws.Nothing);
|
|
Assert.That(System.IO.File.Exists(dest));
|
|
System.IO.File.Delete(dest);
|
|
}
|
|
|
|
[Test]
|
|
public void CopyAsyncCancelReportTest()
|
|
{
|
|
System.IO.File.Delete(dest);
|
|
var cts = new CancellationTokenSource();
|
|
var l = new List<string>();
|
|
var prog = new Progress<Tuple<BackgroundCopyJobState, byte>>(t => l.Add($"{t.Item2}% : {t.Item1}"));
|
|
cts.CancelAfter(2000);
|
|
Assert.That(() => BackgroundCopyManager.CopyAsync(src, dest, cts.Token, prog), Throws.TypeOf<OperationCanceledException>());
|
|
Assert.That(System.IO.File.Exists(dest), Is.False);
|
|
Assert.That(l.Count, Is.GreaterThanOrEqualTo(0));
|
|
TestContext.Write(string.Join("\r\n", l));
|
|
}
|
|
|
|
[Test]
|
|
public void CopyAsyncReportTest()
|
|
{
|
|
System.IO.File.Delete(dest);
|
|
var cts = new CancellationTokenSource();
|
|
var l = new List<string>();
|
|
var prog = new Progress<Tuple<BackgroundCopyJobState, byte>>(t => l.Add($"{t.Item2}% : {t.Item1}"));
|
|
Assert.That(() => BackgroundCopyManager.CopyAsync(src, dest, cts.Token, prog), Throws.Nothing);
|
|
Assert.That(System.IO.File.Exists(dest), Is.True);
|
|
Assert.That(l.Count, Is.GreaterThan(0));
|
|
TestContext.Write(string.Join("\r\n", l));
|
|
}
|
|
|
|
[Test]
|
|
public void CopyAsyncTest()
|
|
{
|
|
System.IO.File.Delete(dest);
|
|
var cts = new CancellationTokenSource();
|
|
Assert.That(() => BackgroundCopyManager.CopyAsync(src, dest, cts.Token, null), Throws.Nothing);
|
|
Assert.That(System.IO.File.Exists(dest), Is.True);
|
|
System.IO.File.Delete(dest);
|
|
}
|
|
|
|
[Test]
|
|
public void JobCertTest()
|
|
{
|
|
var job = BackgroundCopyManager.Jobs.Add(jname);
|
|
Assert.That(job.Certificate, Is.Null);
|
|
var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
|
|
store.Open(OpenFlags.ReadOnly);
|
|
var c = store.Certificates.Cast<X509Certificate2>().FirstOrDefault();
|
|
job.SetCertificate(store, c);
|
|
Assert.That(job.Certificate, Is.EqualTo(c));
|
|
store.Close();
|
|
}
|
|
|
|
[Test]
|
|
public void JobPropTest()
|
|
{
|
|
var job = BackgroundCopyManager.Jobs.Add(jname);
|
|
Assert.That(job.DisplayName, Is.EqualTo(jname));
|
|
|
|
Assert.That(() => job.ACLFlags = BackgroundCopyACLFlags.All, Throws.Nothing);
|
|
Assert.That(job.ACLFlags, Is.EqualTo(BackgroundCopyACLFlags.All));
|
|
|
|
Assert.That(job.Credentials.Count, Is.EqualTo(0));
|
|
Assert.That(() => job.Credentials.Add(BackgroundCopyJobCredentialScheme.Digest, BackgroundCopyJobCredentialTarget.Proxy, "user", "mypwd"), Throws.Nothing);
|
|
Assert.That(job.Credentials.Count, Is.EqualTo(1));
|
|
Assert.That(job.Credentials[BackgroundCopyJobCredentialScheme.Digest, BackgroundCopyJobCredentialTarget.Proxy].UserName, Is.EqualTo("user"));
|
|
|
|
var ch = new System.Net.WebHeaderCollection() { "A1:Test", "A2:Prova" };
|
|
Assert.That(() => job.CustomHeaders = ch, Throws.Nothing);
|
|
Assert.That(job.CustomHeaders, Has.Count.EqualTo(2));
|
|
|
|
Assert.That(job.Description, Is.EqualTo(job.GetDefVal<string>(nameof(job.Description))));
|
|
Assert.That(() => job.Description = jname, Throws.Nothing);
|
|
Assert.That(job.Description, Is.EqualTo(jname));
|
|
|
|
Assert.That(job.DisableNotifications, Is.EqualTo(job.GetDefVal<bool>(nameof(job.DisableNotifications))));
|
|
Assert.That(() => job.DisableNotifications = true, Throws.Nothing);
|
|
Assert.That(job.DisableNotifications, Is.EqualTo(true));
|
|
|
|
Assert.That(job.DynamicContent, Is.EqualTo(job.GetDefVal<bool>(nameof(job.DynamicContent))));
|
|
Assert.That(() => job.DynamicContent = true, Throws.Nothing);
|
|
Assert.That(job.DynamicContent, Is.EqualTo(true));
|
|
|
|
Assert.That(job.ErrorCount, Is.EqualTo(job.GetDefVal<int>(nameof(job.ErrorCount))));
|
|
|
|
Assert.That(job.HighPerformance, Is.EqualTo(job.GetDefVal<bool>(nameof(job.HighPerformance))));
|
|
Assert.That(() => job.HighPerformance = true, Throws.Nothing);
|
|
Assert.That(job.HighPerformance, Is.EqualTo(true));
|
|
|
|
Assert.That(job.ID, Is.Not.EqualTo(Guid.Empty));
|
|
|
|
Assert.That(job.JobType, Is.EqualTo(BackgroundCopyJobType.Download));
|
|
|
|
Assert.That(job.LastError, Is.Null);
|
|
|
|
Assert.That(job.MaxDownloadSize, Is.EqualTo(job.GetDefVal<ulong>(nameof(job.MaxDownloadSize))));
|
|
Assert.That(() => job.MaxDownloadSize = 1000, Throws.Nothing);
|
|
Assert.That(job.MaxDownloadSize, Is.EqualTo(1000));
|
|
|
|
Assert.That(job.MaximumDownloadTime, Is.EqualTo(job.GetDefVal<TimeSpan>(nameof(job.MaximumDownloadTime))));
|
|
Assert.That(() => job.MaximumDownloadTime = TimeSpan.FromDays(1), Throws.Nothing);
|
|
Assert.That(job.MaximumDownloadTime, Is.EqualTo(TimeSpan.FromDays(1)));
|
|
|
|
Assert.That(job.MinimumNotificationInterval, Is.EqualTo(job.GetDefVal<TimeSpan>(nameof(job.MinimumNotificationInterval))));
|
|
Assert.That(() => job.MinimumNotificationInterval = TimeSpan.FromSeconds(10), Throws.Nothing);
|
|
Assert.That(job.MinimumNotificationInterval, Is.EqualTo(TimeSpan.FromSeconds(10)));
|
|
|
|
Assert.That(job.MinimumRetryDelay, Is.EqualTo(job.GetDefVal<TimeSpan>(nameof(job.MinimumRetryDelay))));
|
|
Assert.That(() => job.MinimumRetryDelay = TimeSpan.FromSeconds(1000), Throws.Nothing);
|
|
Assert.That(job.MinimumRetryDelay, Is.EqualTo(TimeSpan.FromSeconds(1000)));
|
|
|
|
Assert.That(job.NoProgressTimeout, Is.EqualTo(job.GetDefVal<TimeSpan>(nameof(job.NoProgressTimeout))));
|
|
Assert.That(() => job.NoProgressTimeout = TimeSpan.FromDays(10), Throws.Nothing);
|
|
Assert.That(job.NoProgressTimeout, Is.EqualTo(TimeSpan.FromDays(10)));
|
|
|
|
Assert.That(job.NotificationCLSID, Is.EqualTo(job.GetDefVal<Guid>(nameof(job.NotificationCLSID))));
|
|
var guid = Guid.NewGuid();
|
|
Assert.That(() => job.NotificationCLSID = guid, Throws.Nothing);
|
|
Assert.That(job.NotificationCLSID, Is.EqualTo(guid));
|
|
|
|
Assert.That(job.NotifyProgram, Is.EqualTo(job.GetDefVal<string>(nameof(job.NotifyProgram))).Or.EqualTo(""));
|
|
var str = "\"cmd.exe\" echo Bob";
|
|
Assert.That(() => job.NotifyProgram = str, Throws.Nothing);
|
|
Assert.That(job.NotifyProgram, Is.EqualTo(str));
|
|
|
|
Assert.That(job.OnDemand, Is.EqualTo(job.GetDefVal<bool>(nameof(job.OnDemand))));
|
|
Assert.That(() => job.OnDemand = true, Throws.Nothing);
|
|
Assert.That(job.OnDemand, Is.EqualTo(true));
|
|
|
|
Assert.That(job.Owner, Is.EqualTo(System.Security.Principal.WindowsIdentity.GetCurrent().User));
|
|
|
|
Assert.That(job.OwnerIntegrityLevel, Is.EqualTo(12288));
|
|
|
|
Assert.That(job.OwnerIsElevated, Is.EqualTo(true));
|
|
|
|
Assert.That(job.Priority, Is.EqualTo(job.GetDefVal<BackgroundCopyJobPriority>(nameof(job.Priority))));
|
|
Assert.That(() => job.Priority = BackgroundCopyJobPriority.Low, Throws.Nothing);
|
|
Assert.That(job.Priority, Is.EqualTo(BackgroundCopyJobPriority.Low));
|
|
|
|
Assert.That(job.Progress.BytesTransferred, Is.EqualTo(0));
|
|
|
|
Assert.That(job.Proxy, Is.EqualTo(job.GetDefVal<System.Net.WebProxy>(nameof(job.Proxy))));
|
|
Assert.That(() => job.Proxy = new System.Net.WebProxy("http://1.1.1.1"), Throws.Nothing);
|
|
Assert.That(job.Proxy.Address, Is.EqualTo(new Uri("http://1.1.1.1")));
|
|
|
|
Assert.That(job.State, Is.EqualTo(BackgroundCopyJobState.Suspended));
|
|
|
|
Assert.That(job.SecurityOptions, Is.EqualTo(job.GetDefVal<BackgroundCopyJobSecurity>(nameof(job.SecurityOptions))));
|
|
Assert.That(() => job.SecurityOptions = BackgroundCopyJobSecurity.CheckCRL, Throws.Nothing);
|
|
Assert.That(job.SecurityOptions, Is.EqualTo(BackgroundCopyJobSecurity.CheckCRL));
|
|
|
|
Assert.That(job.TransferBehavior, Is.EqualTo(job.GetDefVal<BackgroundCopyCost>(nameof(job.TransferBehavior))));
|
|
Assert.That(() => job.TransferBehavior = BackgroundCopyCost.Unrestricted, Throws.Nothing);
|
|
Assert.That(job.TransferBehavior, Is.EqualTo(BackgroundCopyCost.Unrestricted));
|
|
|
|
Assert.That(job.UseStoredCredentials, Is.EqualTo(job.GetDefVal<BackgroundCopyJobCredentialTarget>(nameof(job.UseStoredCredentials))));
|
|
Assert.That(() => job.UseStoredCredentials = BackgroundCopyJobCredentialTarget.Proxy, Throws.Nothing);
|
|
Assert.That(job.UseStoredCredentials, Is.EqualTo(BackgroundCopyJobCredentialTarget.Proxy));
|
|
|
|
Assert.That(job.Credentials.Remove(BackgroundCopyJobCredentialScheme.Digest, BackgroundCopyJobCredentialTarget.Proxy), Is.True);
|
|
Assert.That(job.Credentials.Count, Is.EqualTo(0));
|
|
|
|
Assert.That(job.CreationTime, Is.LessThan(DateTime.Now));
|
|
Assert.That(job.ModificationTime, Is.LessThan(DateTime.Now));
|
|
Assert.That(job.TransferCompletionTime, Has.Property("Year").EqualTo(1600));
|
|
}
|
|
}
|
|
|
|
public static class Ext
|
|
{
|
|
public static T GetDefVal<T>(this object obj, string prop)
|
|
{
|
|
var pi = obj.GetType().GetProperty(prop, typeof(T));
|
|
var attr = (System.ComponentModel.DefaultValueAttribute)pi.GetCustomAttributes(typeof(System.ComponentModel.DefaultValueAttribute), false).FirstOrDefault();
|
|
if (attr?.Value == null) return default;
|
|
if (attr.Value is T) return (T)attr.Value;
|
|
var cval = (attr.Value as IConvertible)?.ToType(typeof(T), null);
|
|
return cval != null ? (T)cval : throw new InvalidCastException();
|
|
}
|
|
}
|
|
} |