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.
This commit is contained in:
parent
87f0bbb092
commit
08c591c74b
|
|
@ -1,58 +1,47 @@
|
||||||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
// 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.
|
// 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 System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.Http;
|
using Microsoft.AspNet.Http;
|
||||||
using Microsoft.AspNet.RequestContainer;
|
using Microsoft.AspNet.RequestContainer;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
using Microsoft.AspNet.Routing.Logging;
|
using Microsoft.AspNet.Routing.Logging;
|
||||||
using Microsoft.AspNet.Routing.Logging.Internal;
|
using Microsoft.AspNet.Routing.Logging.Internal;
|
||||||
using Microsoft.Framework.DependencyInjection;
|
|
||||||
using Microsoft.Framework.Logging;
|
using Microsoft.Framework.Logging;
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Builder
|
namespace Microsoft.AspNet.Builder
|
||||||
{
|
{
|
||||||
public class RouterMiddleware
|
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;
|
_next = next;
|
||||||
Router = router;
|
_services = services;
|
||||||
Services = services;
|
_router = router;
|
||||||
}
|
|
||||||
|
|
||||||
private IRouter Router
|
_logger = loggerFactory.Create<RouterMiddleware>();
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
|
||||||
|
|
||||||
private RequestDelegate Next
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
|
||||||
|
|
||||||
private IServiceProvider Services
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Invoke(HttpContext httpContext)
|
public async Task Invoke(HttpContext httpContext)
|
||||||
{
|
{
|
||||||
using (RequestServicesContainer.EnsureRequestServices(httpContext, Services))
|
using (RequestServicesContainer.EnsureRequestServices(httpContext, _services))
|
||||||
{
|
{
|
||||||
EnsureLogger(httpContext);
|
|
||||||
using (_logger.BeginScope("RouterMiddleware.Invoke"))
|
using (_logger.BeginScope("RouterMiddleware.Invoke"))
|
||||||
{
|
{
|
||||||
var context = new RouteContext(httpContext);
|
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))
|
if (_logger.IsEnabled(TraceType.Verbose))
|
||||||
{
|
{
|
||||||
|
|
@ -61,19 +50,10 @@ namespace Microsoft.AspNet.Builder
|
||||||
|
|
||||||
if (!context.IsHandled)
|
if (!context.IsHandled)
|
||||||
{
|
{
|
||||||
await Next.Invoke(httpContext);
|
await _next.Invoke(httpContext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void EnsureLogger(HttpContext context)
|
|
||||||
{
|
|
||||||
if (_logger == null)
|
|
||||||
{
|
|
||||||
var factory = context.RequestServices.GetRequiredService<ILoggerFactory>();
|
|
||||||
_logger = factory.Create<RouterMiddleware>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,17 @@
|
||||||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
// 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.
|
// 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 System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.Builder;
|
using Microsoft.AspNet.Builder;
|
||||||
using Microsoft.AspNet.Http;
|
using Microsoft.AspNet.PipelineCore;
|
||||||
using Microsoft.AspNet.Routing.Logging;
|
using Microsoft.AspNet.Routing.Logging;
|
||||||
using Microsoft.Framework.Logging;
|
|
||||||
#if ASPNET50
|
|
||||||
using Moq;
|
|
||||||
#endif
|
|
||||||
using Xunit;
|
using Xunit;
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Routing
|
namespace Microsoft.AspNet.Routing
|
||||||
{
|
{
|
||||||
public class RouterMiddlewareTest
|
public class RouterMiddlewareTest
|
||||||
{
|
{
|
||||||
#if ASPNET50
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async void Invoke_LogsCorrectValuesWhenNotHandled()
|
public async void Invoke_LogsCorrectValuesWhenNotHandled()
|
||||||
{
|
{
|
||||||
|
|
@ -28,11 +23,9 @@ namespace Microsoft.AspNet.Routing
|
||||||
TestSink.EnableWithTypeName<RouterMiddleware>);
|
TestSink.EnableWithTypeName<RouterMiddleware>);
|
||||||
var loggerFactory = new TestLoggerFactory(sink, enabled: true);
|
var loggerFactory = new TestLoggerFactory(sink, enabled: true);
|
||||||
|
|
||||||
var mockContext = new Mock<HttpContext>(MockBehavior.Strict);
|
var httpContext = new DefaultHttpContext();
|
||||||
mockContext.Setup(m => m.RequestServices.GetService(typeof(ILoggerFactory)))
|
httpContext.ApplicationServices = new ServiceProvider();
|
||||||
.Returns(loggerFactory);
|
httpContext.RequestServices = httpContext.ApplicationServices;
|
||||||
|
|
||||||
var mockServiceProvider = new Mock<IServiceProvider>();
|
|
||||||
|
|
||||||
RequestDelegate next = (c) =>
|
RequestDelegate next = (c) =>
|
||||||
{
|
{
|
||||||
|
|
@ -40,10 +33,10 @@ namespace Microsoft.AspNet.Routing
|
||||||
};
|
};
|
||||||
|
|
||||||
var router = new TestRouter(isHandled);
|
var router = new TestRouter(isHandled);
|
||||||
var middleware = new RouterMiddleware(next, mockServiceProvider.Object, router);
|
var middleware = new RouterMiddleware(next, httpContext.ApplicationServices, loggerFactory, router);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await middleware.Invoke(mockContext.Object);
|
await middleware.Invoke(httpContext);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Single(sink.Scopes);
|
Assert.Single(sink.Scopes);
|
||||||
|
|
@ -72,9 +65,9 @@ namespace Microsoft.AspNet.Routing
|
||||||
TestSink.EnableWithTypeName<RouterMiddleware>);
|
TestSink.EnableWithTypeName<RouterMiddleware>);
|
||||||
var loggerFactory = new TestLoggerFactory(sink, enabled: false);
|
var loggerFactory = new TestLoggerFactory(sink, enabled: false);
|
||||||
|
|
||||||
var mockContext = new Mock<HttpContext>(MockBehavior.Strict);
|
var httpContext = new DefaultHttpContext();
|
||||||
mockContext.Setup(m => m.RequestServices.GetService(typeof(ILoggerFactory)))
|
httpContext.ApplicationServices = new ServiceProvider();
|
||||||
.Returns(loggerFactory);
|
httpContext.RequestServices = httpContext.ApplicationServices;
|
||||||
|
|
||||||
RequestDelegate next = (c) =>
|
RequestDelegate next = (c) =>
|
||||||
{
|
{
|
||||||
|
|
@ -82,11 +75,10 @@ namespace Microsoft.AspNet.Routing
|
||||||
};
|
};
|
||||||
|
|
||||||
var router = new TestRouter(isHandled);
|
var router = new TestRouter(isHandled);
|
||||||
var mockServiceProvider = new Mock<IServiceProvider>();
|
var middleware = new RouterMiddleware(next, httpContext.ApplicationServices, loggerFactory, router);
|
||||||
var middleware = new RouterMiddleware(next, mockServiceProvider.Object, router);
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await middleware.Invoke(mockContext.Object);
|
await middleware.Invoke(httpContext);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Single(sink.Scopes);
|
Assert.Single(sink.Scopes);
|
||||||
|
|
@ -108,9 +100,9 @@ namespace Microsoft.AspNet.Routing
|
||||||
TestSink.EnableWithTypeName<RouterMiddleware>);
|
TestSink.EnableWithTypeName<RouterMiddleware>);
|
||||||
var loggerFactory = new TestLoggerFactory(sink, enabled: true);
|
var loggerFactory = new TestLoggerFactory(sink, enabled: true);
|
||||||
|
|
||||||
var mockContext = new Mock<HttpContext>(MockBehavior.Strict);
|
var httpContext = new DefaultHttpContext();
|
||||||
mockContext.Setup(m => m.RequestServices.GetService(typeof(ILoggerFactory)))
|
httpContext.ApplicationServices = new ServiceProvider();
|
||||||
.Returns(loggerFactory);
|
httpContext.RequestServices = httpContext.ApplicationServices;
|
||||||
|
|
||||||
RequestDelegate next = (c) =>
|
RequestDelegate next = (c) =>
|
||||||
{
|
{
|
||||||
|
|
@ -118,11 +110,11 @@ namespace Microsoft.AspNet.Routing
|
||||||
};
|
};
|
||||||
|
|
||||||
var router = new TestRouter(isHandled);
|
var router = new TestRouter(isHandled);
|
||||||
var mockServiceProvider = new Mock<IServiceProvider>();
|
|
||||||
var middleware = new RouterMiddleware(next, mockServiceProvider.Object, router);
|
var middleware = new RouterMiddleware(next, httpContext.ApplicationServices, loggerFactory, router);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await middleware.Invoke(mockContext.Object);
|
await middleware.Invoke(httpContext);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
// exists a BeginScope, verify contents
|
// exists a BeginScope, verify contents
|
||||||
|
|
@ -153,9 +145,9 @@ namespace Microsoft.AspNet.Routing
|
||||||
TestSink.EnableWithTypeName<RouterMiddleware>);
|
TestSink.EnableWithTypeName<RouterMiddleware>);
|
||||||
var loggerFactory = new TestLoggerFactory(sink, enabled: false);
|
var loggerFactory = new TestLoggerFactory(sink, enabled: false);
|
||||||
|
|
||||||
var mockContext = new Mock<HttpContext>(MockBehavior.Strict);
|
var httpContext = new DefaultHttpContext();
|
||||||
mockContext.Setup(m => m.RequestServices.GetService(typeof(ILoggerFactory)))
|
httpContext.ApplicationServices = new ServiceProvider();
|
||||||
.Returns(loggerFactory);
|
httpContext.RequestServices = httpContext.ApplicationServices;
|
||||||
|
|
||||||
RequestDelegate next = (c) =>
|
RequestDelegate next = (c) =>
|
||||||
{
|
{
|
||||||
|
|
@ -163,11 +155,10 @@ namespace Microsoft.AspNet.Routing
|
||||||
};
|
};
|
||||||
|
|
||||||
var router = new TestRouter(isHandled);
|
var router = new TestRouter(isHandled);
|
||||||
var mockServiceProvider = new Mock<IServiceProvider>();
|
var middleware = new RouterMiddleware(next, httpContext.ApplicationServices, loggerFactory, router);
|
||||||
var middleware = new RouterMiddleware(next, mockServiceProvider.Object, router);
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await middleware.Invoke(mockContext.Object);
|
await middleware.Invoke(httpContext);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
// exists a BeginScope, verify contents
|
// exists a BeginScope, verify contents
|
||||||
|
|
@ -178,12 +169,11 @@ namespace Microsoft.AspNet.Routing
|
||||||
|
|
||||||
Assert.Empty(sink.Writes);
|
Assert.Empty(sink.Writes);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
private class TestRouter : IRouter
|
private class TestRouter : IRouter
|
||||||
{
|
{
|
||||||
private bool _isHandled;
|
private bool _isHandled;
|
||||||
|
|
||||||
public TestRouter(bool isHandled)
|
public TestRouter(bool isHandled)
|
||||||
{
|
{
|
||||||
_isHandled = isHandled;
|
_isHandled = isHandled;
|
||||||
|
|
@ -200,5 +190,13 @@ namespace Microsoft.AspNet.Routing
|
||||||
return Task.FromResult<object>(null);
|
return Task.FromResult<object>(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class ServiceProvider : IServiceProvider
|
||||||
|
{
|
||||||
|
public object GetService(Type serviceType)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
"warningsAsErrors": "true"
|
"warningsAsErrors": "true"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"Microsoft.AspNet.PipelineCore": "1.0.0-*",
|
||||||
"Microsoft.AspNet.Routing": "1.0.0-*",
|
"Microsoft.AspNet.Routing": "1.0.0-*",
|
||||||
"Microsoft.AspNet.Testing": "1.0.0-*",
|
"Microsoft.AspNet.Testing": "1.0.0-*",
|
||||||
"Xunit.KRunner": "1.0.0-*"
|
"Xunit.KRunner": "1.0.0-*"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue