Make rate-limiting client whitelist dynamic

* Refactor `RateLimitOptions.ClientWhiteList`
* Fix typo in variable `enbleRateLimiting`
* Fix case in variable `clientIdheader`
author Taiwo Otubamowo <totubamowo@deloitte.co.uk>
This commit is contained in:
totubamowo
2019-10-30 11:56:55 +00:00
parent fbd9c01a42
commit 21be46e680
5 changed files with 45 additions and 37 deletions

View File

@ -49,15 +49,15 @@ namespace Ocelot.UnitTests.RateLimit
[Fact]
public void should_call_middleware_and_ratelimiting()
{
var upstreamTemplate = new UpstreamPathTemplateBuilder().Build();
{
var upstreamTemplate = new UpstreamPathTemplateBuilder().Build();
var downstreamReRoute = new DownstreamReRouteBuilder()
.WithEnableRateLimiting(true)
.WithRateLimitOptions(new RateLimitOptions(true, "ClientId", new List<string>(), false, "", "", new RateLimitRule("1s", 100, 3), 429))
.WithRateLimitOptions(new RateLimitOptions(true, "ClientId", () => new List<string>(), false, "", "", new RateLimitRule("1s", 100, 3), 429))
.WithUpstreamHttpMethod(new List<string> { "Get" })
.WithUpstreamPathTemplate(upstreamTemplate)
.Build();
.Build();
var reRoute = new ReRouteBuilder()
.WithDownstreamReRoute(downstreamReRoute)
@ -82,7 +82,7 @@ namespace Ocelot.UnitTests.RateLimit
.WithDownstreamReRoute(new DownstreamReRouteBuilder()
.WithEnableRateLimiting(true)
.WithRateLimitOptions(
new Ocelot.Configuration.RateLimitOptions(true, "ClientId", new List<string>() { "ocelotclient2" }, false, "", "", new RateLimitRule("1s", 100, 3), 429))
new Ocelot.Configuration.RateLimitOptions(true, "ClientId", () => new List<string>() { "ocelotclient2" }, false, "", "", new RateLimitRule("1s", 100, 3), 429))
.WithUpstreamHttpMethod(new List<string> { "Get" })
.Build())
.WithUpstreamHttpMethod(new List<string> { "Get" })
@ -102,8 +102,8 @@ namespace Ocelot.UnitTests.RateLimit
private void WhenICallTheMiddlewareMultipleTime(int times)
{
var clientId = "ocelotclient1";
var clientId = "ocelotclient1";
for (int i = 0; i < times; i++)
{
var request = new HttpRequestMessage(new HttpMethod("GET"), _url);
@ -117,8 +117,8 @@ namespace Ocelot.UnitTests.RateLimit
private void WhenICallTheMiddlewareWithWhiteClient()
{
var clientId = "ocelotclient2";
var clientId = "ocelotclient2";
for (int i = 0; i < 10; i++)
{
var request = new HttpRequestMessage(new HttpMethod("GET"), _url);
@ -127,10 +127,10 @@ namespace Ocelot.UnitTests.RateLimit
_downstreamContext.HttpContext.Request.Headers.TryAdd("ClientId", clientId);
_middleware.Invoke(_downstreamContext).GetAwaiter().GetResult();
_responseStatusCode = (int)_downstreamContext.HttpContext.Response.StatusCode;
}
}
_responseStatusCode = (int)_downstreamContext.HttpContext.Response.StatusCode;
}
}
private void ThenresponseStatusCodeIs429()
{
_responseStatusCode.ShouldBe(429);
@ -145,7 +145,7 @@ namespace Ocelot.UnitTests.RateLimit
internal class FakeStream : Stream
{
public override void Flush()
{
{
//do nothing
//throw new System.NotImplementedException();
}
@ -176,4 +176,4 @@ namespace Ocelot.UnitTests.RateLimit
public override long Length { get; }
public override long Position { get; set; }
}
}
}