예제 #1
0
        public void CanThrottle(
            int maxElem, int timeWindowSeconds, int delayBetweenInMs,
            int in1, int in2, int in3, int in4, int in5,
            int out1, int out2, int out3, int out4, int out5)
        {
            var countingResource = new Moq.Mock <IResource <int> >();

            countingResource.SetupSequence(_ => _.GetResource())
            .Returns(() =>
            {
                Thread.Sleep(delayBetweenInMs);
                return(in1);
            })
            .Returns(() =>
            {
                Thread.Sleep(delayBetweenInMs);
                return(in2);
            })
            .Returns(() =>
            {
                Thread.Sleep(delayBetweenInMs);
                return(in3);
            })
            .Returns(() =>
            {
                Thread.Sleep(delayBetweenInMs);
                return(in4);
            })
            .Returns(() =>
            {
                Thread.Sleep(delayBetweenInMs);
                return(in5);
            });

            CachingThrottler throttler = new CachingThrottler();
            var throttled = throttler.Throttle(countingResource.Object, maxElem, TimeSpan.FromSeconds(timeWindowSeconds));

            Assert.Equal(out1, throttled.GetResource());
            Assert.Equal(out2, throttled.GetResource());
            Assert.Equal(out3, throttled.GetResource());
            Assert.Equal(out4, throttled.GetResource());
            Assert.Equal(out5, throttled.GetResource());
        }
예제 #2
0
        public void ReturnsQuestionWithUniqueNumbers()
        {
            var generator = new Moq.Mock <INumberGenerator>();

            //setup mock generator to return same number multiple times!!
            generator.SetupSequence(x => x.Generate())
            .Returns(10)
            .Returns(10)
            .Returns(10)
            .Returns(10)
            .Returns(10)
            .Returns(10)
            .Returns(10)
            .Returns(10)
            .Returns(12)
            .Returns(15);

            Exercise exercise = new Exercise(generator.Object);
            //generate new user ID Everytime!!
            var userId1  = Guid.NewGuid().ToString();
            var question = exercise.getQuestionForUser(userId1);

            Assert.IsNotNull(question);
            Assert.IsTrue(question.a == 10);
            Assert.IsTrue(question.b == 10);
            Assert.IsTrue(question.secondsRemaining == 20);

            //Assert that the second question had new/unique numbers
            // but 20 seconds time remaining as its different user!

            //generate new user ID Everytime!!
            var userId2   = Guid.NewGuid().ToString();;
            var question2 = exercise.getQuestionForUser(userId2);

            Assert.IsNotNull(question2);
            Assert.IsTrue(question2.a == 12);
            Assert.IsTrue(question2.b == 15);
            Assert.IsTrue(question2.secondsRemaining == 20);
        }
예제 #3
0
        public void CanThrottleMultipleResources()
        {
            var countingResource = new Moq.Mock <IResource <int> >();

            countingResource.SetupSequence(_ => _.GetResource())
            .Returns(0)
            .Returns(1)
            .Returns(2)
            .Returns(3)
            .Returns(4);

            var stringResource = new Moq.Mock <IResource <string> >();

            stringResource.SetupSequence(_ => _.GetResource())
            .Returns("zero")
            .Returns("one")
            .Returns("two")
            .Returns("three")
            .Returns("four");

            CachingThrottler throttler = new CachingThrottler();
            var throttledCount         = throttler.Throttle(countingResource.Object, 1, TimeSpan.FromSeconds(0));
            var throttledString        = throttler.Throttle(stringResource.Object, 1, TimeSpan.FromSeconds(0));

            Assert.Equal(0, throttledCount.GetResource());
            Assert.Equal(1, throttledCount.GetResource());
            Assert.Equal(2, throttledCount.GetResource());
            Assert.Equal(3, throttledCount.GetResource());
            Assert.Equal(4, throttledCount.GetResource());

            Assert.Equal("zero", throttledString.GetResource());
            Assert.Equal("one", throttledString.GetResource());
            Assert.Equal("two", throttledString.GetResource());
            Assert.Equal("three", throttledString.GetResource());
            Assert.Equal("four", throttledString.GetResource());
        }