From ce9a6bc932cad8f3a38939b93f0179ea58de6f77 Mon Sep 17 00:00:00 2001 From: Markus Ewald Date: Mon, 22 Jun 2009 18:54:12 +0000 Subject: [PATCH] Added a unit tests that reproduces the bug fixed in the previous commit git-svn-id: file:///srv/devel/repo-conversion/nusu@153 d2e56fa2-650e-0410-a79f-9358c0239efd --- Source/Scheduling/Scheduler.Test.cs | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/Source/Scheduling/Scheduler.Test.cs b/Source/Scheduling/Scheduler.Test.cs index e84c967..3d58533 100644 --- a/Source/Scheduling/Scheduler.Test.cs +++ b/Source/Scheduling/Scheduler.Test.cs @@ -207,8 +207,7 @@ namespace Nuclex.Support.Scheduling { ITimeSource timeSource = Scheduler.CreateTimeSource(true); try { Assert.That(timeSource is WindowsTimeSource); - } - finally { + } finally { IDisposable disposableTimeSource = timeSource as IDisposable; if(disposableTimeSource != null) { disposableTimeSource.Dispose(); @@ -224,8 +223,7 @@ namespace Nuclex.Support.Scheduling { ITimeSource timeSource = Scheduler.CreateTimeSource(false); try { Assert.That(timeSource is GenericTimeSource); - } - finally { + } finally { IDisposable disposableTimeSource = timeSource as IDisposable; if(disposableTimeSource != null) { disposableTimeSource.Dispose(); @@ -241,8 +239,7 @@ namespace Nuclex.Support.Scheduling { ITimeSource timeSource = Scheduler.CreateDefaultTimeSource(); try { Assert.IsNotNull(timeSource); - } - finally { + } finally { IDisposable disposableTimeSource = timeSource as IDisposable; if(disposableTimeSource != null) { disposableTimeSource.Dispose(); @@ -439,6 +436,25 @@ namespace Nuclex.Support.Scheduling { } } + /// + /// Reproduction case for a bug that occurred when the final notification in + /// the scheduler was cancelled (call to PriorityQueue.Peek() on empty queue) + /// + [Test] + public void TestCancelFinalNotification() { + MockTimeSource mockTimeSource = new MockTimeSource(new DateTime(2010, 1, 1)); + using(TestSubscriber subscriber = new TestSubscriber()) { + using(Scheduler scheduler = new Scheduler(mockTimeSource)) { + scheduler.Cancel( + scheduler.NotifyIn(TimeSpan.FromHours(12), subscriber.Callback) + ); + + mockTimeSource.AdvanceTime(TimeSpan.FromHours(14)); + Thread.Sleep(1); + } + } + } + /// Returns the provided date/time value as a utc time value /// Date/time value that will be returned as UTC /// The provided date/time value as UTC