From 08c591c74bacade224aae3c3a3a72b7a7ca1f952 Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Wed, 29 Oct 2014 14:15:39 -0700 Subject: [PATCH] Fix for #104 - RouterMiddleware should take ILoggerFactory in the constructor Did some cleanup here to make these tests work on CoreCLR. They weren't using Moq for anything important. --- .../RouterMiddleware.cs | 56 +++++----------- .../RouterMiddlewareTest.cs | 66 +++++++++---------- .../project.json | 1 + 3 files changed, 51 insertions(+), 72 deletions(-) diff --git a/src/Microsoft.AspNet.Routing/RouterMiddleware.cs b/src/Microsoft.AspNet.Routing/RouterMiddleware.cs index d515712d25..2e1a4ace79 100644 --- a/src/Microsoft.AspNet.Routing/RouterMiddleware.cs +++ b/src/Microsoft.AspNet.Routing/RouterMiddleware.cs @@ -1,58 +1,47 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; using System.Threading.Tasks; using Microsoft.AspNet.Http; using Microsoft.AspNet.RequestContainer; using Microsoft.AspNet.Routing; using Microsoft.AspNet.Routing.Logging; using Microsoft.AspNet.Routing.Logging.Internal; -using Microsoft.Framework.DependencyInjection; using Microsoft.Framework.Logging; -using System; namespace Microsoft.AspNet.Builder { public class RouterMiddleware { - private ILogger _logger; + private readonly ILogger _logger; + private readonly RequestDelegate _next; + private readonly IRouter _router; + private readonly IServiceProvider _services; - public RouterMiddleware(RequestDelegate next, IServiceProvider services, IRouter router) + public RouterMiddleware( + RequestDelegate next, + IServiceProvider services, + ILoggerFactory loggerFactory, + IRouter router) { - Next = next; - Router = router; - Services = services; - } + _next = next; + _services = services; + _router = router; - private IRouter Router - { - get; - set; - } - - private RequestDelegate Next - { - get; - set; - } - - private IServiceProvider Services - { - get; - set; + _logger = loggerFactory.Create(); } public async Task Invoke(HttpContext httpContext) { - using (RequestServicesContainer.EnsureRequestServices(httpContext, Services)) + using (RequestServicesContainer.EnsureRequestServices(httpContext, _services)) { - EnsureLogger(httpContext); using (_logger.BeginScope("RouterMiddleware.Invoke")) { var context = new RouteContext(httpContext); - context.RouteData.Routers.Add(Router); + context.RouteData.Routers.Add(_router); - await Router.RouteAsync(context); + await _router.RouteAsync(context); if (_logger.IsEnabled(TraceType.Verbose)) { @@ -61,19 +50,10 @@ namespace Microsoft.AspNet.Builder if (!context.IsHandled) { - await Next.Invoke(httpContext); + await _next.Invoke(httpContext); } } } } - - private void EnsureLogger(HttpContext context) - { - if (_logger == null) - { - var factory = context.RequestServices.GetRequiredService(); - _logger = factory.Create(); - } - } } } diff --git a/test/Microsoft.AspNet.Routing.Tests/RouterMiddlewareTest.cs b/test/Microsoft.AspNet.Routing.Tests/RouterMiddlewareTest.cs index 65c54882ca..efb4e5d45b 100644 --- a/test/Microsoft.AspNet.Routing.Tests/RouterMiddlewareTest.cs +++ b/test/Microsoft.AspNet.Routing.Tests/RouterMiddlewareTest.cs @@ -1,22 +1,17 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; using System.Threading.Tasks; using Microsoft.AspNet.Builder; -using Microsoft.AspNet.Http; +using Microsoft.AspNet.PipelineCore; using Microsoft.AspNet.Routing.Logging; -using Microsoft.Framework.Logging; -#if ASPNET50 -using Moq; -#endif using Xunit; -using System; namespace Microsoft.AspNet.Routing { public class RouterMiddlewareTest { -#if ASPNET50 [Fact] public async void Invoke_LogsCorrectValuesWhenNotHandled() { @@ -28,11 +23,9 @@ namespace Microsoft.AspNet.Routing TestSink.EnableWithTypeName); var loggerFactory = new TestLoggerFactory(sink, enabled: true); - var mockContext = new Mock(MockBehavior.Strict); - mockContext.Setup(m => m.RequestServices.GetService(typeof(ILoggerFactory))) - .Returns(loggerFactory); - - var mockServiceProvider = new Mock(); + var httpContext = new DefaultHttpContext(); + httpContext.ApplicationServices = new ServiceProvider(); + httpContext.RequestServices = httpContext.ApplicationServices; RequestDelegate next = (c) => { @@ -40,10 +33,10 @@ namespace Microsoft.AspNet.Routing }; var router = new TestRouter(isHandled); - var middleware = new RouterMiddleware(next, mockServiceProvider.Object, router); + var middleware = new RouterMiddleware(next, httpContext.ApplicationServices, loggerFactory, router); // Act - await middleware.Invoke(mockContext.Object); + await middleware.Invoke(httpContext); // Assert Assert.Single(sink.Scopes); @@ -72,9 +65,9 @@ namespace Microsoft.AspNet.Routing TestSink.EnableWithTypeName); var loggerFactory = new TestLoggerFactory(sink, enabled: false); - var mockContext = new Mock(MockBehavior.Strict); - mockContext.Setup(m => m.RequestServices.GetService(typeof(ILoggerFactory))) - .Returns(loggerFactory); + var httpContext = new DefaultHttpContext(); + httpContext.ApplicationServices = new ServiceProvider(); + httpContext.RequestServices = httpContext.ApplicationServices; RequestDelegate next = (c) => { @@ -82,11 +75,10 @@ namespace Microsoft.AspNet.Routing }; var router = new TestRouter(isHandled); - var mockServiceProvider = new Mock(); - var middleware = new RouterMiddleware(next, mockServiceProvider.Object, router); + var middleware = new RouterMiddleware(next, httpContext.ApplicationServices, loggerFactory, router); // Act - await middleware.Invoke(mockContext.Object); + await middleware.Invoke(httpContext); // Assert Assert.Single(sink.Scopes); @@ -108,9 +100,9 @@ namespace Microsoft.AspNet.Routing TestSink.EnableWithTypeName); var loggerFactory = new TestLoggerFactory(sink, enabled: true); - var mockContext = new Mock(MockBehavior.Strict); - mockContext.Setup(m => m.RequestServices.GetService(typeof(ILoggerFactory))) - .Returns(loggerFactory); + var httpContext = new DefaultHttpContext(); + httpContext.ApplicationServices = new ServiceProvider(); + httpContext.RequestServices = httpContext.ApplicationServices; RequestDelegate next = (c) => { @@ -118,11 +110,11 @@ namespace Microsoft.AspNet.Routing }; var router = new TestRouter(isHandled); - var mockServiceProvider = new Mock(); - var middleware = new RouterMiddleware(next, mockServiceProvider.Object, router); + + var middleware = new RouterMiddleware(next, httpContext.ApplicationServices, loggerFactory, router); // Act - await middleware.Invoke(mockContext.Object); + await middleware.Invoke(httpContext); // Assert // exists a BeginScope, verify contents @@ -153,9 +145,9 @@ namespace Microsoft.AspNet.Routing TestSink.EnableWithTypeName); var loggerFactory = new TestLoggerFactory(sink, enabled: false); - var mockContext = new Mock(MockBehavior.Strict); - mockContext.Setup(m => m.RequestServices.GetService(typeof(ILoggerFactory))) - .Returns(loggerFactory); + var httpContext = new DefaultHttpContext(); + httpContext.ApplicationServices = new ServiceProvider(); + httpContext.RequestServices = httpContext.ApplicationServices; RequestDelegate next = (c) => { @@ -163,11 +155,10 @@ namespace Microsoft.AspNet.Routing }; var router = new TestRouter(isHandled); - var mockServiceProvider = new Mock(); - var middleware = new RouterMiddleware(next, mockServiceProvider.Object, router); + var middleware = new RouterMiddleware(next, httpContext.ApplicationServices, loggerFactory, router); // Act - await middleware.Invoke(mockContext.Object); + await middleware.Invoke(httpContext); // Assert // exists a BeginScope, verify contents @@ -178,12 +169,11 @@ namespace Microsoft.AspNet.Routing Assert.Empty(sink.Writes); } -#endif private class TestRouter : IRouter { private bool _isHandled; - + public TestRouter(bool isHandled) { _isHandled = isHandled; @@ -200,5 +190,13 @@ namespace Microsoft.AspNet.Routing return Task.FromResult(null); } } + + private class ServiceProvider : IServiceProvider + { + public object GetService(Type serviceType) + { + throw new NotImplementedException(); + } + } } } diff --git a/test/Microsoft.AspNet.Routing.Tests/project.json b/test/Microsoft.AspNet.Routing.Tests/project.json index 151073d254..18c35137bd 100644 --- a/test/Microsoft.AspNet.Routing.Tests/project.json +++ b/test/Microsoft.AspNet.Routing.Tests/project.json @@ -3,6 +3,7 @@ "warningsAsErrors": "true" }, "dependencies": { + "Microsoft.AspNet.PipelineCore": "1.0.0-*", "Microsoft.AspNet.Routing": "1.0.0-*", "Microsoft.AspNet.Testing": "1.0.0-*", "Xunit.KRunner": "1.0.0-*"