Beispiel #1
0
        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]);
        }
Beispiel #3
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);
        }
Beispiel #5
0
        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);
        }