public void ConsumesMultipleMinutes() { var timeProvider = new ManualTimeProvider(new DateTime(2000, 01, 01)); var provider = new FakeIsolatorLimitResultProvider(); Action code = () => { // lets give the monitor time to register the initial time Thread.Sleep(50); for (int i = 0; i < 4; i++) { timeProvider.AdvanceSeconds(45); // give the monitoring task time to request more time Thread.Sleep(20); } }; provider.Consume(timeProvider, code, _timeMonitor); Assert.AreEqual(3, provider.Invocations.Count); Assert.IsTrue(provider.Invocations.TrueForAll(invoc => invoc == 1)); // give time to the monitor to register the time consumer ended Thread.Sleep(50); Assert.AreEqual(0, _timeMonitor.Count); }
public void ConsumeRequestsAdditionalTimeAfterOneMinute() { var minuteElapsed = new ManualResetEvent(false); var consumeCompleted = new ManualResetEvent(false); Action code = () => minuteElapsed.WaitOne(); var provider = new FakeIsolatorLimitResultProvider(); var timeProvider = new ManualTimeProvider(new DateTime(2000, 01, 01)); Task.Run(() => { var name = nameof(ConsumeRequestsAdditionalTimeAfterOneMinute); provider.Consume(timeProvider, code); consumeCompleted.Set(); }); Thread.Sleep(15); timeProvider.Advance(TimeSpan.FromSeconds(45)); Assert.AreEqual(0, provider.Invocations.Count); timeProvider.Advance(TimeSpan.FromSeconds(15)); Thread.Sleep(15); minuteElapsed.Set(); if (!consumeCompleted.WaitOne(50)) { Assert.Fail("Consume should have returned."); } Assert.AreEqual(1, provider.Invocations.Count); Assert.AreEqual(1, provider.Invocations[0]); }
public void ConsumeRequestsAdditionalTimeAfterOneMinute() { var minuteElapsed = new ManualResetEvent(false); var consumeStarted = new ManualResetEvent(false); Action code = () => { if (!minuteElapsed.WaitOne(10000)) { throw new TimeoutException("minuteElapsed"); } }; var provider = new FakeIsolatorLimitResultProvider(); var timeProvider = new ManualTimeProvider(new DateTime(2000, 01, 01)); var consumeCompleted = Task.Run(() => { consumeStarted.Set(); provider.Consume(timeProvider, code, _timeMonitor); }); if (!consumeStarted.WaitOne(50)) { Assert.Fail("Consume should have started."); } // lets give the monitor time to register the initial time Thread.Sleep(100); timeProvider.Advance(TimeSpan.FromSeconds(45)); Assert.AreEqual(0, provider.Invocations.Count); timeProvider.Advance(TimeSpan.FromSeconds(15)); var count = 100; while (provider.Invocations.Count == 0 && --count > 0) { Thread.Sleep(10); } minuteElapsed.Set(); if (!consumeCompleted.Wait(50)) { Assert.Fail("Consume should have returned."); } Assert.AreEqual(1, provider.Invocations.Count); Assert.AreEqual(1, provider.Invocations[0]); // give time to the monitor to register the time consumer ended Thread.Sleep(50); Assert.AreEqual(0, _timeMonitor.Count); }
public void ConsumeDoesNotRequestAdditionalTimeBeforeOneMinute() { var timeProvider = new ManualTimeProvider(new DateTime(2000, 01, 01)); var provider = new FakeIsolatorLimitResultProvider(); Action code = () => { Thread.Sleep(5); timeProvider.Advance(TimeSpan.FromMinutes(.99)); Thread.Sleep(5); }; provider.Consume(timeProvider, code); Assert.IsEmpty(provider.Invocations); }
public void ConsumeDoesNotRequestAdditionalTimeBeforeOneMinute() { var timeProvider = new ManualTimeProvider(new DateTime(2000, 01, 01)); var provider = new FakeIsolatorLimitResultProvider(); Action code = () => { Thread.Sleep(5); timeProvider.Advance(TimeSpan.FromMinutes(.99)); Thread.Sleep(5); }; provider.Consume(timeProvider, code, _timeMonitor); Assert.IsEmpty(provider.Invocations); // give time to the monitor to register the time consumer ended Thread.Sleep(50); Assert.AreEqual(0, _timeMonitor.Count); }