コード例 #1
0
 protected void ShouldPermitNExecutions(IRateLimitPolicy policy, long numberOfExecutions)
 {
     for (int execution = 0; execution < numberOfExecutions; execution++)
     {
         ShouldPermitAnExecution(policy);
     }
 }
コード例 #2
0
        protected void ShouldPermitAnExecution(IRateLimitPolicy policy)
        {
            (bool permitExecution, TimeSpan retryAfter) = TryExecuteThroughPolicy(policy);

            permitExecution.Should().BeTrue();
            retryAfter.Should().Be(TimeSpan.Zero);
        }
コード例 #3
0
 protected override TResult TryExecuteThroughPolicy <TResult>(IRateLimitPolicy <TResult> policy, Context context, TResult resultIfExecutionPermitted)
 {
     if (policy is RateLimitPolicy <TResult> typedPolicy)
     {
         return(typedPolicy.Execute(ctx => resultIfExecutionPermitted, context));
     }
     else
     {
         throw new InvalidOperationException("Unexpected policy type in test construction.");
     }
 }
コード例 #4
0
 protected override TResult TryExecuteThroughPolicy <TResult>(IRateLimitPolicy <TResult> policy, Context context, TResult resultIfExecutionPermitted)
 {
     if (policy is AsyncRateLimitPolicy <TResult> typedPolicy)
     {
         return(typedPolicy.ExecuteAsync(ctx => Task.FromResult(resultIfExecutionPermitted), context).GetAwaiter().GetResult());
     }
     else
     {
         throw new InvalidOperationException("Unexpected policy type in test construction.");
     }
 }
コード例 #5
0
        protected void ShouldNotPermitAnExecution(IRateLimitPolicy policy, TimeSpan?retryAfter = null)
        {
            (bool permitExecution, TimeSpan retryAfter)canExecute = TryExecuteThroughPolicy(policy);

            canExecute.permitExecution.Should().BeFalse();
            if (retryAfter == null)
            {
                canExecute.retryAfter.Should().BeGreaterThan(TimeSpan.Zero);
            }
            else
            {
                canExecute.retryAfter.Should().Be(retryAfter.Value);
            }
        }
コード例 #6
0
 protected override (bool, TimeSpan) TryExecuteThroughPolicy(IRateLimitPolicy policy)
 {
     if (policy is RateLimitPolicy typedPolicy)
     {
         try
         {
             typedPolicy.Execute(() => new ResultClassWithRetryAfter(ResultPrimitive.Good));
             return(true, TimeSpan.Zero);
         }
         catch (RateLimitRejectedException e)
         {
             return(false, e.RetryAfter);
         }
     }
     else
     {
         throw new InvalidOperationException("Unexpected policy type in test construction.");
     }
 }
コード例 #7
0
 public Requester(HttpClient httpClient, IRateLimitPolicy rateLimitPolicy)
 {
     this.httpClient      = httpClient;
     this.rateLimitPolicy = rateLimitPolicy;
 }
コード例 #8
0
 protected abstract TResult TryExecuteThroughPolicy <TResult>(IRateLimitPolicy <TResult> policy, Context context, TResult resultIfExecutionPermitted);
コード例 #9
0
 public RateLimitMiddleware(RequestDelegate next, IRateLimitPolicy rateLimitPolicy)
 {
     _next            = next;
     _rateLimitPolicy = rateLimitPolicy;
 }
コード例 #10
0
 protected abstract (bool, TimeSpan) TryExecuteThroughPolicy(IRateLimitPolicy policy);