public void SuccessfullyMakeCallsAfterThrottlingEnds() { var throttle = new ThrottleAttribute() { CallsPerRateLimitSeconds = 1, RateLimitSeconds = 1 }; var authCode = "Key8" + Guid.NewGuid(); var context = CreateHttpContext(authCode); throttle.OnActionExecuting(context); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); var context2 = CreateHttpContext(authCode); throttle.OnActionExecuting(context2); Assert.AreEqual(context2.Response.StatusCode.ToString(), 429.ToString()); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2)); var context3 = CreateHttpContext(authCode); throttle.OnActionExecuting(context3); Assert.AreEqual(context3.Response, null); }
public IHttpActionResult ClearCaching() { _gameStateService.Calculate(); _tilgangsKontroll.Nullstill(); _posisjonsService.Nullstill(); ThrottleAttribute.Reload(); return(Ok()); }
public void DefaultsAreSetForThrottling() { var throttle = new ThrottleAttribute(); var context = CreateHttpContext("Key" + Guid.NewGuid()); throttle.OnActionExecuting(context); throttle.OnActionExecuting(context); Assert.AreEqual(throttle.CallsPerRateLimitSeconds, 10); Assert.AreEqual(throttle.RateLimitSeconds, 30); }
public void CallsDoNotExceedLimit() { var throttle = new ThrottleAttribute { CallsPerRateLimitSeconds = 3, RateLimitSeconds = 1 }; var authCode = "Key2" + Guid.NewGuid(); var context = CreateHttpContext(authCode); throttle.OnActionExecuting(context); var context2 = CreateHttpContext(authCode); throttle.OnActionExecuting(context2); Assert.AreEqual(context2.Response, null); }
/// <summary> /// /// </summary> /// <typeparam name="TBuilder"></typeparam> /// <param name="builder"></param> /// <param name="perSecond"></param> /// <param name="perMinute"></param> /// <param name="perHour"></param> /// <param name="perDay"></param> /// <param name="policyName"></param> /// <returns></returns> public static TBuilder Throttle <TBuilder>(this TBuilder builder, long?perSecond = null, long?perMinute = null, long?perHour = null, long?perDay = null, string policyName = null) where TBuilder : IEndpointConventionBuilder { builder.Add(endpointBuilder => { var throttleAttribute = new ThrottleAttribute { PerSecond = perSecond ?? 0, PerMinute = perMinute ?? 0, PerHour = perHour ?? 0, PerDay = perDay ?? 0, PolicyName = policyName }; endpointBuilder.Metadata.Add(throttleAttribute); }); return(builder); }
public void CallsExceedAllowedCallsInTimeframe() { var throttle = new ThrottleAttribute() { CallsPerRateLimitSeconds = 1, RateLimitSeconds = 1 }; var authCode = "Key1" + Guid.NewGuid(); var context = CreateHttpContext(authCode); throttle.OnActionExecuting(context); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); var context2 = CreateHttpContext(authCode); throttle.OnActionExecuting(context2); Assert.AreEqual(context2.Response.StatusCode.ToString(), 429.ToString()); }
public void MultipleCallsFromDifferentUsersDoNotExceed() { var throttle = new ThrottleAttribute() { CallsPerRateLimitSeconds = 1, RateLimitSeconds = 1 }; var context = CreateHttpContext("Key3" + Guid.NewGuid()); throttle.OnActionExecuting(context); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); var context2 = CreateHttpContext("Key4" + Guid.NewGuid()); throttle.OnActionExecuting(context2); Assert.AreEqual(context2.Response, null); }