Example #1
0
        public void GetNextAllowedCallTime_WhenNoPreviousCallsHaveBeenTracked_ShouldReturnZero()
        {
            var callTracker       = new CallTracker();
            var standardRateLimit = new StandardRateLimit(1, TimeSpan.FromSeconds(1));

            var nextAllowedCallTime = standardRateLimit.GetNextAllowedCallTime(callTracker);

            Assert.Equal(0, nextAllowedCallTime);
        }
Example #2
0
        public void GetNextAllowedCallTime_WhenOnePreviousCallWasMadeMoreThanTimespanAgo_ReturnsZero(int lastCallMillisecondsAgo)
        {
            var currentDate = new DateTime(2018, 01, 01);

            ReferenceTime.FreezeAtUtc(currentDate);

            var callTracker = new CallTracker();

            callTracker.CallWillHappenIn(-lastCallMillisecondsAgo);

            var standardRateLimit = new StandardRateLimit(1, TimeSpan.FromMilliseconds(lastCallMillisecondsAgo - 100));

            var nextAllowedCallTime = standardRateLimit.GetNextAllowedCallTime(callTracker);

            Assert.Equal(0, nextAllowedCallTime);

            ReferenceTime.Unfreeze();
        }
Example #3
0
        public void GetNextAllowedCallTime_WhenOnePreviousCallTrackedForCurrentTime_ShouldBeNowPlusTimespanRange(int millisecondsTimespan)
        {
            var currentDate = new DateTime(2018, 01, 01);

            ReferenceTime.FreezeAtUtc(currentDate);

            var callTracker = new CallTracker();

            callTracker.CallWillHappenIn(0);

            var standardRateLimit = new StandardRateLimit(1, TimeSpan.FromMilliseconds(millisecondsTimespan));

            var nextAllowedCallTime = standardRateLimit.GetNextAllowedCallTime(callTracker);

            Assert.Equal(millisecondsTimespan, nextAllowedCallTime);

            ReferenceTime.Unfreeze();
        }
Example #4
0
        public void GetNextAllowedCallTime_ForTwoPreviousCalls_ReturnsCorrectTimespan()
        {
            var currentDate = new DateTime(2018, 01, 01);

            ReferenceTime.FreezeAtUtc(currentDate);

            var callTracker = new CallTracker();

            callTracker.CallWillHappenIn(10);
            callTracker.CallWillHappenIn(30);

            var standardRateLimit   = new StandardRateLimit(2, TimeSpan.FromMilliseconds(100));
            var nextAllowedCallTime = standardRateLimit.GetNextAllowedCallTime(callTracker);

            // 2 calls allowed every 100 milliseconds, so next call should be allowed in 110 milliseconds
            Assert.Equal(110, nextAllowedCallTime);

            ReferenceTime.Unfreeze();
        }