protected AbstractTest() { var kernel = new StandardKernel(); kernel.Bind <ISignUpConfirmationNotifier, TestSignUpConfirmationNotifier>() .To <TestSignUpConfirmationNotifier>() .InSingletonScope(); kernel.Bind <IWelcomeNotifier, TestWelcomeNotifier>() .To <TestWelcomeNotifier>() .InSingletonScope(); kernel.Bind <IResetPasswordNotifier, TestResetPasswordNotifier>() .To <TestResetPasswordNotifier>() .InSingletonScope(); kernel.Bind <ITimeProvider, TestTimeProvider>() .To <TestTimeProvider>() .InSingletonScope(); kernel.Bind <AuthenticationService>() .ToSelf() .InSingletonScope() .WithConstructorArgument("sessionTtlSeconds", SessionTtlSeconds); Service = kernel.Get <RetaskService>(); SignUpConfirmationNotifier = kernel.Get <TestSignUpConfirmationNotifier>(); WelcomeNotifier = kernel.Get <TestWelcomeNotifier>(); ResetPasswordNotifier = kernel.Get <TestResetPasswordNotifier>(); TimeProvider = kernel.Get <TestTimeProvider>(); }
public void ResetCounter() { using (var timeProvider = TestTimeProvider.SetDefault()) { var counter = new ResetCounter(); counter.GetOrAdd(1).Increment(); counter.GetOrAdd(2).Increment(); counter.GetOrAdd(1).Increment(); counter.Update(); Assert.AreEqual(3, counter.Current); Assert.AreEqual(3, counter.Today); Assert.AreEqual(3, counter.Total); counter.Update(); Assert.AreEqual(0, counter.Current); Assert.AreEqual(3, counter.Today); Assert.AreEqual(3, counter.Total); counter.Update(); Assert.AreEqual(0, counter.Current); Assert.AreEqual(3, counter.Today); Assert.AreEqual(3, counter.Total); // New Day timeProvider.Now += TimeSpan.FromDays(1); counter.Update(); Assert.AreEqual(0, counter.Current); Assert.AreEqual(0, counter.Today); Assert.AreEqual(3, counter.Total); counter.GetOrAdd(1).Increment(); counter.Update(); Assert.AreEqual(1, counter.Current); Assert.AreEqual(1, counter.Today); Assert.AreEqual(4, counter.Total); // New counter value created on the fly counter.GetOrAdd(256).Increment(); counter.GetOrAdd(256).Increment(); counter.Update(); Assert.AreEqual(2, counter.Current); Assert.AreEqual(3, counter.Today); Assert.AreEqual(6, counter.Total); } }
public void TestTimeProviderAsDefault() { ITimeProvider previousTimeProvider = TimeProvider.Default; Assert.IsInstanceOfType(previousTimeProvider, typeof(SystemTimeProvider)); var now = new DateTime(2019, 10, 17, 17, 10, 19); using (var timeProvider = TestTimeProvider.SetDefault(now)) { Assert.AreSame(timeProvider, TimeProvider.Default); Assert.AreEqual(now, TimeProvider.Default.Now); timeProvider.Now += TimeSpan.FromSeconds(2); Assert.AreEqual(new DateTime(2019, 10, 17, 17, 10, 21), TimeProvider.Default.Now); } Assert.AreSame(previousTimeProvider, TimeProvider.Default); }
public async Task ThenTheTokensMustDeplete() { var testTimeProvider = new TestTimeProvider(); var bucket = new TokenBucket(1000, 5, testTimeProvider); testTimeProvider.AddMillis(4000); await bucket.WaitTokenAsync(); Assert.Equal(3, bucket.Tokens); await bucket.WaitTokenAsync(); Assert.Equal(2, bucket.Tokens); await bucket.WaitTokenAsync(); Assert.Equal(1, bucket.Tokens); }
public async Task ThenAnEmptyBucketMustCauseADelay() { var testTimeProvider = new TestTimeProvider(); var bucket = new TokenBucket(1000, 5, testTimeProvider); testTimeProvider.AddMillis(1600); await bucket.WaitTokenAsync(); Assert.Null(testTimeProvider.LastDelay); await bucket.WaitTokenAsync(); Assert.Equal(400, testTimeProvider.LastDelay); testTimeProvider.AddMillis(testTimeProvider.LastDelay.Value); await bucket.WaitTokenAsync(); Assert.Null(testTimeProvider.LastDelay); }
public void SubscribeInterval() { using var timeProvider = TestTimeProvider.SetDefault(new DateTime(2020, 03, 15, 17, 0, 0)); var timerService = new TimerService(); int intervalsCalled = 0; ITimerInterval timerInterval = timerService.SubscribeInterval(TimeSpan.FromHours(1), (ITimerService sender, ITimerInterval interval) => { Assert.AreEqual(timerService, sender); intervalsCalled++; if (intervalsCalled > 1) { interval.Unsubscribe(); } }); timerService.Check(); Assert.AreEqual(0, intervalsCalled); timeProvider.Now += TimeSpan.FromMinutes(31); timerService.Check(); Assert.AreEqual(0, intervalsCalled, "1 hour interval should not have been called after 31 minutes"); timeProvider.Now += TimeSpan.FromMinutes(31); timerService.Check(); Assert.AreEqual(1, intervalsCalled, "1 hour interval should have been called after 62 minutes"); timeProvider.Now += TimeSpan.FromMinutes(60); timerService.Check(); Assert.AreEqual(2, intervalsCalled, "should have been called again after 60 minutes"); timeProvider.Now += TimeSpan.FromMinutes(60); timerService.Check(); Assert.AreEqual(2, intervalsCalled, "should not have been called after unsubscribe"); }