public void HonorsReportInterval() { int testInterval = 20; string pw = TestValues.GetPw(5); ulong pwCount = 0; var intervals = new List <int>(); var previousTime = DateTime.Now; var logic = new LogicImplementation(); var cancelSource = new CancellationTokenSource(); var cancelToken = cancelSource.Token; var progress = new Progress <ulong>((count) => { pwCount = count; DateTime t = DateTime.Now; intervals.Add((int)(t - previousTime).TotalMilliseconds); previousTime = t; }); var collisionFound = new Progress <string>((result) => { }); logic.ReportInterval = testInterval; var task = Task.Run(() => { logic.SearchCollisions(Sha1Hash.CalculateFromString(pw), progress, collisionFound, cancelToken); }); var startTime = DateTime.Now; while ((intervals.Count() < 4) && ((DateTime.Now - startTime).TotalMilliseconds < 500)) { Thread.Sleep(5); } Assert.IsFalse((intervals.Count() == 0), $"SearchCollisions - does not report progress through its 'progress' object."); cancelSource.Cancel(); intervals.RemoveAt(0); int interval = (intervals[0] + intervals[1] + intervals[2]) / 3; Assert.IsTrue((Math.Abs(testInterval - interval) < 20), $"SearchCollisions - does not report progress at requested interval of {testInterval}ms, was {interval}ms."); }
public void ReportsProgress() { string pw = TestValues.GetPw(5); ulong pwCount = 0; var logic = new LogicImplementation(); var cancelSource = new CancellationTokenSource(); var cancelToken = cancelSource.Token; var progress = new Progress <ulong>((count) => { pwCount = count; }); var collisionFound = new Progress <string>((result) => { }); var task = Task.Run(() => { logic.SearchCollisions(Sha1Hash.CalculateFromString(pw), progress, collisionFound, cancelToken); }); var startTime = DateTime.Now; while ((pwCount == 0) && ((DateTime.Now - startTime).TotalMilliseconds < 500)) { Thread.Sleep(5); } cancelSource.Cancel(); Assert.IsFalse((pwCount == 0), $"SearchCollisions - does not report progress through its 'progress' object."); }
public void DetectsCollision() { string pw = TestValues.GetPw(2); string foundPw = string.Empty; var logic = new LogicImplementation(); var cancelSource = new CancellationTokenSource(); var cancelToken = cancelSource.Token; var progress = new Progress <ulong>((count) => { }); var collisionFound = new Progress <string>((result) => { foundPw = result; cancelSource.Cancel(); }); var task = Task.Run(() => { logic.SearchCollisions(Sha1Hash.CalculateFromString(pw), progress, collisionFound, cancelToken); }); var startTime = DateTime.Now; while ((foundPw == string.Empty) && ((DateTime.Now - startTime).TotalMilliseconds < 1000)) { Thread.Sleep(5); } Assert.IsFalse((foundPw == string.Empty), $"SearchCollisions - does not return a collision through its 'collisionFound' progress object."); Assert.IsTrue((pw == foundPw), $"SearchCollisions - returns wrong value for a collision: \'{foundPw}\', expected: \'{pw}\'."); cancelSource.Cancel(); }
public void HonorsCancelRequest() { string pw = TestValues.GetPw(5); ulong pwCount = 0; var logic = new LogicImplementation(); var cancelSource = new CancellationTokenSource(); var cancelToken = cancelSource.Token; var progress = new Progress <ulong>((count) => { pwCount = count; }); var collisionFound = new Progress <string>((result) => { }); var task = Task.Run(() => { logic.SearchCollisions(Sha1Hash.CalculateFromString(pw), progress, collisionFound, cancelToken); }); var startTime = DateTime.Now; while ((pwCount == 0) && ((DateTime.Now - startTime).TotalMilliseconds < 500)) { Thread.Sleep(5); } cancelSource.Cancel(); var taskAborted = task.Wait(300); Assert.IsTrue(taskAborted, $"SearchCollisions - does not stop Task after 'Cancel' request."); }