AuthorizationMiddlewareBenchmark.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the MIT license.
  3. using BenchmarkDotNet.Attributes;
  4. using Microsoft.AspNetCore.Authorization;
  5. using Microsoft.AspNetCore.Http;
  6. using Microsoft.AspNetCore.Http.Features;
  7. using Microsoft.Extensions.Options;
  8. namespace Microsoft.AspNetCore.Security;
  9. public class AuthorizationMiddlewareBenchmark
  10. {
  11. private AuthorizationMiddleware _authorizationMiddleware;
  12. private DefaultHttpContext _httpContextNoEndpoint;
  13. private DefaultHttpContext _httpContextHasEndpoint;
  14. [GlobalSetup]
  15. public void Setup()
  16. {
  17. var policyProvider = new DefaultAuthorizationPolicyProvider(Options.Create(new AuthorizationOptions()));
  18. _authorizationMiddleware = new AuthorizationMiddleware((context) => Task.CompletedTask, policyProvider);
  19. _httpContextNoEndpoint = new DefaultHttpContext();
  20. var feature = new EndpointFeature
  21. {
  22. Endpoint = new Endpoint((context) => Task.CompletedTask, EndpointMetadataCollection.Empty, "Test endpoint")
  23. };
  24. _httpContextHasEndpoint = new DefaultHttpContext();
  25. _httpContextHasEndpoint.Features.Set<IEndpointFeature>(feature);
  26. }
  27. [Benchmark]
  28. public Task Invoke_NoEndpoint_NoAuthorization()
  29. {
  30. return _authorizationMiddleware.Invoke(_httpContextNoEndpoint);
  31. }
  32. [Benchmark]
  33. public Task Invoke_HasEndpoint_NoAuthorization()
  34. {
  35. return _authorizationMiddleware.Invoke(_httpContextHasEndpoint);
  36. }
  37. private sealed class EndpointFeature : IEndpointFeature
  38. {
  39. public Endpoint Endpoint { get; set; }
  40. }
  41. }