Пример #1
0
        public void SendsNothingWhenMaxReqIsZero()
        {
            var sender = new RateLimiterZipkinSender(_underlyingSender.Object, 0);

            sender.Send(_data);

            _underlyingSender.Verify(zipkinSender => zipkinSender.Send(It.Is <byte[]>(bytes => bytes == _data)), Times.Never());
        }
Пример #2
0
        public void ShouldLogAtLeastOnceWhenMaxReqIsZero()
        {
            var duration = TimeSpan.FromMilliseconds(10);
            var sender   = new RateLimiterZipkinSender(_underlyingSender.Object, 0, duration);

            sender.Send(_data);
            Thread.Sleep(TimeSpan.FromMilliseconds(duration.TotalMilliseconds * 10 * 1.05));
            sender.Send(_data);

            _logger.Verify(logger => logger.LogWarning(It.IsAny <string>()), Times.AtLeastOnce());
        }
Пример #3
0
        public void RequestsAreNotThrottledIfMaxReqIsNotReached(int maxReq)
        {
            var sender = new RateLimiterZipkinSender(_underlyingSender.Object, maxReq, TimeSpan.FromSeconds(5));

            for (var i = 0; i < maxReq + 1; i++)
            {
                sender.Send(_data);
            }

            _underlyingSender.Verify(zipkinSender => zipkinSender.Send(It.Is <byte[]>(bytes => bytes == _data)), Times.Exactly(maxReq));
        }
Пример #4
0
        public void ExcessiveRequestsAreThrottledOnLongTerm(int maxSendRequest, int perSpanMs, int numberOfSpan)
        {
            var perSpan = TimeSpan.FromMilliseconds(perSpanMs);
            var sender  = new RateLimiterZipkinSender(_underlyingSender.Object, maxSendRequest, perSpan);

            var watch = Stopwatch.StartNew();

            while (true)
            {
                if (watch.ElapsedMilliseconds >= perSpan.TotalMilliseconds * numberOfSpan)
                {
                    break;
                }
                sender.Send(_data);
            }

            var tolerance      = 1.5 / numberOfSpan + 1.05;
            var trueSendExpect = numberOfSpan * maxSendRequest;
            var sendExpectationWithBurstTolerance = (int)Math.Ceiling(trueSendExpect * tolerance);

            _underlyingSender.Verify(zipkinSender => zipkinSender.Send(It.Is <byte[]>(bytes => bytes == _data)), Times.AtMost(sendExpectationWithBurstTolerance));
        }