/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Http/Routing/test/UnitTests/RouterMiddlewareTest.cs
154 строки
5 KB
Shreyas Jejurkar
chore : Remove unwanted `using` statement (#39176)
02 янв 2022, 17:39
Не верифицирован
02 янв 2022, 17:39
c85baf8
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Testing; using Moq; namespace Microsoft.AspNetCore.Routing; public class RouterMiddlewareTest { [Fact] public async Task RoutingFeatureSetInIRouter() { // Arrange var services = new ServiceCollection(); services.AddLogging(); var httpContext = new DefaultHttpContext { RequestServices = services.BuildServiceProvider() }; httpContext.Request.Path = "/foo/10"; var routeHandlerExecuted = false; var handler = new RouteHandler(context => { routeHandlerExecuted = true; var routingFeature = context.Features.Get<IRoutingFeature>(); Assert.NotNull(routingFeature); Assert.NotNull(context.Features.Get<IRouteValuesFeature>()); Assert.Single(routingFeature.RouteData.Values); Assert.Single(context.Request.RouteValues); Assert.True(routingFeature.RouteData.Values.ContainsKey("id")); Assert.True(context.Request.RouteValues.ContainsKey("id")); Assert.Equal("10", routingFeature.RouteData.Values["id"]); Assert.Equal("10", context.Request.RouteValues["id"]); Assert.Equal("10", context.GetRouteValue("id")); Assert.Same(routingFeature.RouteData, context.GetRouteData()); return Task.CompletedTask; }); var route = new Route(handler, "/foo/{id}", Mock.Of<IInlineConstraintResolver>()); var middleware = new RouterMiddleware(context => Task.CompletedTask, NullLoggerFactory.Instance, route); // Act await middleware.Invoke(httpContext); // Assert Assert.True(routeHandlerExecuted); } [Fact] public async Task Invoke_LogsCorrectValues_WhenNotHandled() { // Arrange var expectedMessage = "Request did not match any routes"; var isHandled = false; var sink = new TestSink( TestSink.EnableWithTypeName<RouterMiddleware>, TestSink.EnableWithTypeName<RouterMiddleware>); var loggerFactory = new TestLoggerFactory(sink, enabled: true); var httpContext = new DefaultHttpContext(); httpContext.RequestServices = new ServiceProvider(); RequestDelegate next = (c) => { return Task.FromResult<object>(null); }; var router = new TestRouter(isHandled); var middleware = new RouterMiddleware(next, loggerFactory, router); // Act await middleware.Invoke(httpContext); // Assert Assert.Empty(sink.Scopes); var write = Assert.Single(sink.Writes); Assert.Equal(expectedMessage, write.State?.ToString()); } [Fact] public async Task Invoke_DoesNotLog_WhenHandled() { // Arrange var isHandled = true; var sink = new TestSink( TestSink.EnableWithTypeName<RouterMiddleware>, TestSink.EnableWithTypeName<RouterMiddleware>); var loggerFactory = new TestLoggerFactory(sink, enabled: true); var httpContext = new DefaultHttpContext(); httpContext.RequestServices = new ServiceProvider(); RequestDelegate next = (c) => { return Task.FromResult<object>(null); }; var router = new TestRouter(isHandled); var middleware = new RouterMiddleware(next, loggerFactory, router); // Act await middleware.Invoke(httpContext); // Assert Assert.Empty(sink.Scopes); Assert.Empty(sink.Writes); } private class TestRouter : IRouter { private readonly bool _isHandled; public TestRouter(bool isHandled) { _isHandled = isHandled; } public VirtualPathData GetVirtualPath(VirtualPathContext context) { return new VirtualPathData(this, ""); } public Task RouteAsync(RouteContext context) { context.Handler = _isHandled ? (RequestDelegate)((c) => Task.CompletedTask) : null; return Task.FromResult<object>(null); } } private class ServiceProvider : IServiceProvider { public object GetService(Type serviceType) { throw new NotImplementedException(); } } }