Exemple #1
0
        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);
            }
        }
Exemple #3
0
        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");
        }