public void should_create_downstream_route_with_rate_limit_options() { var rateLimitOptions = new RateLimitOptionsBuilder() .WithEnableRateLimiting(true) .WithClientIdHeader("test") .Build(); var downstreamReRoute = new DownstreamReRouteBuilder() .WithServiceName("auth") .WithRateLimitOptions(rateLimitOptions) .Build(); var reRoute = new ReRouteBuilder() .WithDownstreamReRoute(downstreamReRoute) .Build(); var reRoutes = new List <ReRoute> { reRoute }; var configuration = new InternalConfiguration(reRoutes, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions); this.Given(_ => GivenTheConfiguration(configuration)) .When(_ => WhenICreate()) .Then(_ => ThenTheDownstreamRouteIsCreated()) .And(_ => WithRateLimitOptions(rateLimitOptions)) .BDDfy(); }
public void should_create_rate_limit_options() { var fileReRoute = new FileReRoute { RateLimitOptions = new FileRateLimitRule { ClientWhitelist = new List <string>(), Period = "Period", Limit = 1, PeriodTimespan = 1, EnableRateLimiting = true } }; var fileGlobalConfig = new FileGlobalConfiguration { RateLimitOptions = new FileRateLimitOptions { ClientIdHeader = "ClientIdHeader", DisableRateLimitHeaders = true, QuotaExceededMessage = "QuotaExceededMessage", RateLimitCounterPrefix = "RateLimitCounterPrefix", HttpStatusCode = 200 } }; var expected = new RateLimitOptionsBuilder() .WithClientIdHeader("ClientIdHeader") .WithClientWhiteList(fileReRoute.RateLimitOptions.ClientWhitelist) .WithDisableRateLimitHeaders(true) .WithEnableRateLimiting(true) .WithHttpStatusCode(200) .WithQuotaExceededMessage("QuotaExceededMessage") .WithRateLimitCounterPrefix("RateLimitCounterPrefix") .WithRateLimitRule(new RateLimitRule(fileReRoute.RateLimitOptions.Period, fileReRoute.RateLimitOptions.PeriodTimespan, fileReRoute.RateLimitOptions.Limit)) .Build(); this.Given(x => x.GivenTheFollowingFileReRoute(fileReRoute)) .And(x => x.GivenTheFollowingFileGlobalConfig(fileGlobalConfig)) .And(x => x.GivenRateLimitingIsEnabled()) .When(x => x.WhenICreate()) .Then(x => x.ThenTheFollowingIsReturned(expected)) .BDDfy(); }
public RateLimitOptions Create(FileReRoute fileReRoute, FileGlobalConfiguration globalConfiguration, bool enableRateLimiting) { RateLimitOptions rateLimitOption = null; if (enableRateLimiting) { rateLimitOption = new RateLimitOptionsBuilder() .WithClientIdHeader(globalConfiguration.RateLimitOptions.ClientIdHeader) .WithClientWhiteList(fileReRoute.RateLimitOptions.ClientWhitelist) .WithDisableRateLimitHeaders(globalConfiguration.RateLimitOptions.DisableRateLimitHeaders) .WithEnableRateLimiting(fileReRoute.RateLimitOptions.EnableRateLimiting) .WithHttpStatusCode(globalConfiguration.RateLimitOptions.HttpStatusCode) .WithQuotaExceededMessage(globalConfiguration.RateLimitOptions.QuotaExceededMessage) .WithRateLimitCounterPrefix(globalConfiguration.RateLimitOptions.RateLimitCounterPrefix) .WithRateLimitRule(new RateLimitRule(fileReRoute.RateLimitOptions.Period, TimeSpan.FromSeconds(fileReRoute.RateLimitOptions.PeriodTimespan), fileReRoute.RateLimitOptions.Limit)) .Build(); } return(rateLimitOption); }