[Middleware] Move to GenericHost (#23626)

This commit is contained in:
Brennan 2020-07-07 17:32:35 -07:00 committed by GitHub
parent 921d2c6124
commit f1dd68f1bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
67 changed files with 6328 additions and 3965 deletions

View File

@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Moq; using Moq;
@ -27,7 +28,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
public async Task CorsRequest_MatchesPolicy_OnCaseInsensitiveAccessControlRequestMethod(string accessControlRequestMethod) public async Task CorsRequest_MatchesPolicy_OnCaseInsensitiveAccessControlRequestMethod(string accessControlRequestMethod)
{ {
// Arrange // Arrange
var hostBuilder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseCors(builder => app.UseCors(builder =>
@ -39,8 +44,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
}); });
}) })
.ConfigureServices(services => services.AddCors()); .ConfigureServices(services => services.AddCors());
}).Build();
using (var server = new TestServer(hostBuilder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
// Act // Act
// Actual request. // Actual request.
@ -60,7 +68,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
public async Task CorsRequest_MatchPolicy_SetsResponseHeaders() public async Task CorsRequest_MatchPolicy_SetsResponseHeaders()
{ {
// Arrange // Arrange
var hostBuilder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseCors(builder => app.UseCors(builder =>
@ -74,8 +86,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
}); });
}) })
.ConfigureServices(services => services.AddCors()); .ConfigureServices(services => services.AddCors());
}).Build();
using (var server = new TestServer(hostBuilder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
// Act // Act
// Actual request. // Actual request.
@ -102,7 +117,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
policy.Origins.Add(OriginUrl); policy.Origins.Add(OriginUrl);
policy.Methods.Add("PUT"); policy.Methods.Add("PUT");
var hostBuilder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseCors("customPolicy"); app.UseCors("customPolicy");
@ -118,8 +137,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
options.AddPolicy("customPolicy", policy); options.AddPolicy("customPolicy", policy);
}); });
}); });
}).Build();
using (var server = new TestServer(hostBuilder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
// Act // Act
// Preflight request. // Preflight request.
@ -144,7 +166,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
policy.Headers.Add("Header1"); policy.Headers.Add("Header1");
policy.ExposedHeaders.Add("AllowedHeader"); policy.ExposedHeaders.Add("AllowedHeader");
var hostBuilder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseCors("customPolicy"); app.UseCors("customPolicy");
@ -160,8 +186,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
options.AddPolicy("customPolicy", policy); options.AddPolicy("customPolicy", policy);
}); });
}); });
}).Build();
using (var server = new TestServer(hostBuilder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
// Act // Act
// Preflight request. // Preflight request.
@ -202,7 +231,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
.AllowCredentials() .AllowCredentials()
.Build(); .Build();
var hostBuilder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseCors("customPolicy"); app.UseCors("customPolicy");
@ -218,8 +251,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
options.AddPolicy("customPolicy", policy); options.AddPolicy("customPolicy", policy);
}); });
}); });
}).Build();
using (var server = new TestServer(hostBuilder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
// Act // Act
// Preflight request. // Preflight request.
@ -260,7 +296,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
public async Task PreFlightRequest_DoesNotMatchPolicy_SetsResponseHeadersAndReturnsNoContent() public async Task PreFlightRequest_DoesNotMatchPolicy_SetsResponseHeadersAndReturnsNoContent()
{ {
// Arrange // Arrange
var hostBuilder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseCors(builder => app.UseCors(builder =>
@ -274,8 +314,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
}); });
}) })
.ConfigureServices(services => services.AddCors()); .ConfigureServices(services => services.AddCors());
}).Build();
using (var server = new TestServer(hostBuilder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
// Act // Act
// Preflight request. // Preflight request.
@ -288,13 +331,19 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
Assert.Empty(response.Headers); Assert.Empty(response.Headers);
} }
await host.StartAsync();
} }
[Fact] [Fact]
public async Task CorsRequest_DoesNotMatchPolicy_DoesNotSetHeaders() public async Task CorsRequest_DoesNotMatchPolicy_DoesNotSetHeaders()
{ {
// Arrange // Arrange
var hostBuilder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseCors(builder => app.UseCors(builder =>
@ -308,8 +357,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
}); });
}) })
.ConfigureServices(services => services.AddCors()); .ConfigureServices(services => services.AddCors());
}).Build();
using (var server = new TestServer(hostBuilder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
// Act // Act
// Actual request. // Actual request.
@ -387,7 +439,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
public async Task PreFlight_MatchesDefaultPolicy_SetsResponseHeaders() public async Task PreFlight_MatchesDefaultPolicy_SetsResponseHeaders()
{ {
// Arrange // Arrange
var hostBuilder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseCors(); app.UseCors();
@ -417,8 +473,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
}); });
}); });
}); });
}).Build();
using (var server = new TestServer(hostBuilder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
// Act // Act
// Preflight request. // Preflight request.
@ -453,7 +512,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
public async Task CorsRequest_SetsResponseHeaders() public async Task CorsRequest_SetsResponseHeaders()
{ {
// Arrange // Arrange
var hostBuilder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseCors(builder => app.UseCors(builder =>
@ -468,8 +531,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
}); });
}) })
.ConfigureServices(services => services.AddCors()); .ConfigureServices(services => services.AddCors());
}).Build();
using (var server = new TestServer(hostBuilder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
// Act // Act
// Actual request. // Actual request.
@ -506,7 +572,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
{ {
// Arrange // Arrange
var exceptionSeen = true; var exceptionSeen = true;
var hostBuilder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
// Simulate ExceptionHandler middleware // Simulate ExceptionHandler middleware
@ -537,8 +607,11 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
}); });
}) })
.ConfigureServices(services => services.AddCors()); .ConfigureServices(services => services.AddCors());
}).Build();
using (var server = new TestServer(hostBuilder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
// Act // Act
// Actual request. // Actual request.

View File

@ -1,9 +1,11 @@
// Copyright (c) .NET Foundation. All rights reserved. // Copyright (c) .NET Foundation. 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.Threading.Tasks;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace CorsMiddlewareWebSite namespace CorsMiddlewareWebSite
{ {
@ -19,15 +21,19 @@ namespace CorsMiddlewareWebSite
app.UseCors(policy => policy.WithOrigins("http://example.com")); app.UseCors(policy => policy.WithOrigins("http://example.com"));
app.UseMiddleware<EchoMiddleware>(); app.UseMiddleware<EchoMiddleware>();
} }
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseKestrel() .UseKestrel()
.UseIISIntegration() .UseIISIntegration()
.UseStartup<Startup>() .UseStartup<Startup>();
})
.Build(); .Build();
host.Run(); return host.RunAsync();
} }
} }
} }

View File

@ -33,13 +33,17 @@ namespace ConcurrencyLimiterSample
}); });
} }
public static void Main(string[] args) public static Task Main(string[] args)
{ {
new WebHostBuilder() return new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseKestrel() .UseKestrel()
.UseStartup<Startup>() .UseStartup<Startup>();
})
.Build() .Build()
.Run(); .RunAsync();
} }
} }
} }

View File

@ -17,6 +17,7 @@ using Microsoft.AspNetCore.Testing;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Xunit; using Xunit;
@ -27,10 +28,19 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
[Fact] [Fact]
public async Task Successful_requests_pass_thru() public async Task Successful_requests_pass_thru()
{ {
var builder = new WebHostBuilder().Configure(app => app using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => app
.UseDatabaseErrorPage() .UseDatabaseErrorPage()
.UseMiddleware<SuccessMiddleware>()); .UseMiddleware<SuccessMiddleware>());
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
HttpResponseMessage response = await server.CreateClient().GetAsync("http://localhost/"); HttpResponseMessage response = await server.CreateClient().GetAsync("http://localhost/");
@ -53,10 +63,19 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
[Fact] [Fact]
public async Task Non_database_exceptions_pass_thru() public async Task Non_database_exceptions_pass_thru()
{ {
var builder = new WebHostBuilder().Configure(app => app using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => app
.UseDatabaseErrorPage() .UseDatabaseErrorPage()
.UseMiddleware<ExceptionMiddleware>()); .UseMiddleware<ExceptionMiddleware>());
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var ex = await Assert.ThrowsAsync<InvalidOperationException>(async () => var ex = await Assert.ThrowsAsync<InvalidOperationException>(async () =>
await server.CreateClient().GetAsync("http://localhost/")); await server.CreateClient().GetAsync("http://localhost/"));
@ -82,7 +101,8 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
{ {
using (var database = SqlTestStore.CreateScratch()) using (var database = SqlTestStore.CreateScratch())
{ {
TestServer server = SetupTestServer<BloggingContext, DatabaseErrorButNoMigrationsMiddleware>(database); using var host = await SetupServer<BloggingContext, DatabaseErrorButNoMigrationsMiddleware>(database);
using var server = host.GetTestServer();
var ex = await Assert.ThrowsAsync<DbUpdateException>(async () => var ex = await Assert.ThrowsAsync<DbUpdateException>(async () =>
await server.CreateClient().GetAsync("http://localhost/")); await server.CreateClient().GetAsync("http://localhost/"));
@ -114,7 +134,8 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
{ {
using (var database = SqlTestStore.CreateScratch()) using (var database = SqlTestStore.CreateScratch())
{ {
TestServer server = SetupTestServer<BloggingContext, NoMigrationsMiddleware>(database); using var host = await SetupServer<BloggingContext, NoMigrationsMiddleware>(database);
using var server = host.GetTestServer();
HttpResponseMessage response = await server.CreateClient().GetAsync("http://localhost/"); HttpResponseMessage response = await server.CreateClient().GetAsync("http://localhost/");
Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode); Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
@ -142,13 +163,13 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
[ConditionalFact] [ConditionalFact]
[OSSkipCondition(OperatingSystems.Linux)] [OSSkipCondition(OperatingSystems.Linux)]
[OSSkipCondition(OperatingSystems.MacOSX)] [OSSkipCondition(OperatingSystems.MacOSX)]
public void No_exception_on_diagnostic_event_received_when_null_state() public async Task No_exception_on_diagnostic_event_received_when_null_state()
{ {
using (var database = SqlTestStore.CreateScratch()) using (var database = SqlTestStore.CreateScratch())
{ {
using (var server = SetupTestServer<BloggingContext, NoMigrationsMiddleware>(database)) using (var server = await SetupServer<BloggingContext, NoMigrationsMiddleware>(database))
{ {
using (var db = server.Host.Services.GetService<BloggingContext>()) using (var db = server.Services.GetService<BloggingContext>())
{ {
db.Blogs.Add(new Blog()); db.Blogs.Add(new Blog());
@ -172,7 +193,8 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
{ {
using (var database = SqlTestStore.CreateScratch()) using (var database = SqlTestStore.CreateScratch())
{ {
TestServer server = SetupTestServer<BloggingContextWithMigrations, PendingMigrationsMiddleware>(database); using var host = await SetupServer<BloggingContextWithMigrations, PendingMigrationsMiddleware>(database);
using var server = host.GetTestServer();
HttpResponseMessage response = await server.CreateClient().GetAsync("http://localhost/"); HttpResponseMessage response = await server.CreateClient().GetAsync("http://localhost/");
Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode); Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
@ -208,7 +230,8 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
{ {
using (var database = SqlTestStore.CreateScratch()) using (var database = SqlTestStore.CreateScratch())
{ {
TestServer server = SetupTestServer<BloggingContextWithPendingModelChanges, PendingModelChangesMiddleware>(database); using var host = await SetupServer<BloggingContextWithPendingModelChanges, PendingModelChangesMiddleware>(database);
using var server = host.GetTestServer();
HttpResponseMessage response = await server.CreateClient().GetAsync("http://localhost/"); HttpResponseMessage response = await server.CreateClient().GetAsync("http://localhost/");
Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode); Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
@ -245,7 +268,8 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
{ {
using (var database = SqlTestStore.CreateScratch()) using (var database = SqlTestStore.CreateScratch())
{ {
TestServer server = SetupTestServer<BloggingContextWithMigrations, ApplyMigrationsMiddleware>(database); using var host = await SetupServer<BloggingContextWithMigrations, ApplyMigrationsMiddleware>(database);
using var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var expectedMigrationsEndpoint = "/ApplyDatabaseMigrations"; var expectedMigrationsEndpoint = "/ApplyDatabaseMigrations";
@ -302,7 +326,11 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
using (var database = SqlTestStore.CreateScratch()) using (var database = SqlTestStore.CreateScratch())
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseDatabaseErrorPage(new DatabaseErrorPageOptions app.UseDatabaseErrorPage(new DatabaseErrorPageOptions
@ -317,7 +345,11 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
services.AddDbContext<BloggingContextWithMigrations>( services.AddDbContext<BloggingContextWithMigrations>(
optionsBuilder => optionsBuilder.UseSqlite(database.ConnectionString)); optionsBuilder => optionsBuilder.UseSqlite(database.ConnectionString));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
HttpResponseMessage response = await server.CreateClient().GetAsync("http://localhost/"); HttpResponseMessage response = await server.CreateClient().GetAsync("http://localhost/");
@ -335,7 +367,11 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
{ {
var logProvider = new TestLoggerProvider(); var logProvider = new TestLoggerProvider();
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseDatabaseErrorPage(); app.UseDatabaseErrorPage();
@ -344,7 +380,11 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
app.ApplicationServices.GetService<ILoggerFactory>().AddProvider(logProvider); app.ApplicationServices.GetService<ILoggerFactory>().AddProvider(logProvider);
#pragma warning restore CS0618 // Type or member is obsolete #pragma warning restore CS0618 // Type or member is obsolete
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
try try
{ {
@ -391,7 +431,8 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
{ {
var logProvider = new TestLoggerProvider(); var logProvider = new TestLoggerProvider();
var server = SetupTestServer<BloggingContextWithSnapshotThatThrows, ExceptionInLogicMiddleware>(database, logProvider); using var host = await SetupServer<BloggingContextWithSnapshotThatThrows, ExceptionInLogicMiddleware>(database, logProvider);
using var server = host.GetTestServer();
try try
{ {
@ -430,7 +471,8 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
{ {
using (var database = SqlTestStore.CreateScratch()) using (var database = SqlTestStore.CreateScratch())
{ {
TestServer server = SetupTestServer<BloggingContext, WrappedExceptionMiddleware>(database); using var host = await SetupServer<BloggingContext, WrappedExceptionMiddleware>(database);
using var server = host.GetTestServer();
HttpResponseMessage response = await server.CreateClient().GetAsync("http://localhost/"); HttpResponseMessage response = await server.CreateClient().GetAsync("http://localhost/");
Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode); Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
@ -461,10 +503,14 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
} }
} }
private static TestServer SetupTestServer<TContext, TMiddleware>(SqlTestStore database, ILoggerProvider logProvider = null) private static async Task<IHost> SetupServer<TContext, TMiddleware>(SqlTestStore database, ILoggerProvider logProvider = null)
where TContext : DbContext where TContext : DbContext
{ {
var builder = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseDatabaseErrorPage(); app.UseDatabaseErrorPage();
@ -482,8 +528,11 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
{ {
services.AddDbContext<TContext>(optionsBuilder => optionsBuilder.UseSqlite(database.ConnectionString)); services.AddDbContext<TContext>(optionsBuilder => optionsBuilder.UseSqlite(database.ConnectionString));
}); });
}).Build();
return new TestServer(builder); await host.StartAsync();
return host;
} }
private static UrlEncoder _urlEncoder = UrlEncoder.Default; private static UrlEncoder _urlEncoder = UrlEncoder.Default;

View File

@ -18,6 +18,7 @@ using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Xunit; using Xunit;
namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
@ -27,10 +28,19 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
[Fact] [Fact]
public async Task Non_migration_requests_pass_thru() public async Task Non_migration_requests_pass_thru()
{ {
var builder = new WebHostBuilder().Configure(app => app using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => app
.UseMigrationsEndPoint() .UseMigrationsEndPoint()
.UseMiddleware<SuccessMiddleware>()); .UseMiddleware<SuccessMiddleware>());
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
HttpResponseMessage response = await server.CreateClient().GetAsync("http://localhost/"); HttpResponseMessage response = await server.CreateClient().GetAsync("http://localhost/");
@ -75,7 +85,11 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
var path = useCustomPath ? new PathString("/EndPoints/ApplyMyMigrations") : MigrationsEndPointOptions.DefaultPath; var path = useCustomPath ? new PathString("/EndPoints/ApplyMyMigrations") : MigrationsEndPointOptions.DefaultPath;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
if (useCustomPath) if (useCustomPath)
@ -97,7 +111,11 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
options.UseSqlite(database.ConnectionString); options.UseSqlite(database.ConnectionString);
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
using (var db = BloggingContextWithMigrations.CreateWithoutExternalServiceProvider(optionsBuilder.Options)) using (var db = BloggingContextWithMigrations.CreateWithoutExternalServiceProvider(optionsBuilder.Options))
{ {
@ -128,12 +146,20 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
[Fact] [Fact]
public async Task Context_type_not_specified() public async Task Context_type_not_specified()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseMigrationsEndPoint(); app.UseMigrationsEndPoint();
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var formData = new FormUrlEncodedContent(new List<KeyValuePair<string, string>>()); var formData = new FormUrlEncodedContent(new List<KeyValuePair<string, string>>());
@ -148,12 +174,20 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
[Fact] [Fact]
public async Task Invalid_context_type_specified() public async Task Invalid_context_type_specified()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseMigrationsEndPoint(); app.UseMigrationsEndPoint();
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var typeName = "You won't find this type ;)"; var typeName = "You won't find this type ;)";
var formData = new FormUrlEncodedContent(new List<KeyValuePair<string, string>> var formData = new FormUrlEncodedContent(new List<KeyValuePair<string, string>>
@ -172,10 +206,18 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
[Fact] [Fact]
public async Task Context_not_registered_in_services() public async Task Context_not_registered_in_services()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => app.UseMigrationsEndPoint()) .Configure(app => app.UseMigrationsEndPoint())
.ConfigureServices(services => services.AddEntityFrameworkSqlite()); .ConfigureServices(services => services.AddEntityFrameworkSqlite());
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var formData = new FormUrlEncodedContent(new List<KeyValuePair<string, string>> var formData = new FormUrlEncodedContent(new List<KeyValuePair<string, string>>
{ {
@ -197,7 +239,11 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
{ {
using (var database = SqlTestStore.CreateScratch()) using (var database = SqlTestStore.CreateScratch())
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => app.UseMigrationsEndPoint()) .Configure(app => app.UseMigrationsEndPoint())
.ConfigureServices(services => .ConfigureServices(services =>
{ {
@ -206,7 +252,11 @@ namespace Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests
optionsBuilder.UseSqlite(database.ConnectionString); optionsBuilder.UseSqlite(database.ConnectionString);
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var formData = new FormUrlEncodedContent(new List<KeyValuePair<string, string>> var formData = new FormUrlEncodedContent(new List<KeyValuePair<string, string>>
{ {

View File

@ -1,4 +1,4 @@
// Copyright (c) .NET Foundation. All rights reserved. // Copyright (c) .NET Foundation. 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;
@ -6,12 +6,14 @@ using System.Net.Http;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.AspNetCore.Testing; using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.Hosting;
namespace Microsoft.AspNetCore.Diagnostics.FunctionalTests namespace Microsoft.AspNetCore.Diagnostics.FunctionalTests
{ {
public class TestFixture<TStartup> : IDisposable public class TestFixture<TStartup> : IDisposable
{ {
private readonly TestServer _server; private readonly TestServer _server;
private readonly IHost _host;
public TestFixture() public TestFixture()
{ {
@ -20,10 +22,16 @@ namespace Microsoft.AspNetCore.Diagnostics.FunctionalTests
// (DefaultRequestCulture) is consistent regardless of system configuration or personal preferences. // (DefaultRequestCulture) is consistent regardless of system configuration or personal preferences.
using (new CultureReplacer()) using (new CultureReplacer())
{ {
var builder = new WebHostBuilder() _host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.UseStartup(typeof(TStartup)); .UseStartup(typeof(TStartup));
}).Build();
_server = new TestServer(builder); _host.Start();
_server = _host.GetTestServer();
} }
Client = _server.CreateClient(); Client = _server.CreateClient();
@ -36,6 +44,7 @@ namespace Microsoft.AspNetCore.Diagnostics.FunctionalTests
{ {
Client.Dispose(); Client.Dispose();
_server.Dispose(); _server.Dispose();
_host.Dispose();
} }
} }
} }

View File

@ -11,6 +11,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Xunit; using Xunit;
namespace Microsoft.AspNetCore.Diagnostics namespace Microsoft.AspNetCore.Diagnostics
@ -22,7 +23,11 @@ namespace Microsoft.AspNetCore.Diagnostics
{ {
// Arrange // Arrange
DiagnosticListener diagnosticListener = null; DiagnosticListener diagnosticListener = null;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
diagnosticListener = app.ApplicationServices.GetRequiredService<DiagnosticListener>(); diagnosticListener = app.ApplicationServices.GetRequiredService<DiagnosticListener>();
@ -32,7 +37,11 @@ namespace Microsoft.AspNetCore.Diagnostics
throw new Exception("Test exception"); throw new Exception("Test exception");
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var listener = new TestDiagnosticListener(); var listener = new TestDiagnosticListener();
diagnosticListener.SubscribeWithAdapter(listener); diagnosticListener.SubscribeWithAdapter(listener);
@ -50,7 +59,11 @@ namespace Microsoft.AspNetCore.Diagnostics
public async Task ErrorPageWithAcceptHeaderForHtmlReturnsHtml() public async Task ErrorPageWithAcceptHeaderForHtmlReturnsHtml()
{ {
// Arrange // Arrange
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseDeveloperExceptionPage(); app.UseDeveloperExceptionPage();
@ -59,7 +72,11 @@ namespace Microsoft.AspNetCore.Diagnostics
throw new Exception("Test exception"); throw new Exception("Test exception");
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
// Act // Act
var client = server.CreateClient(); var client = server.CreateClient();
@ -77,7 +94,11 @@ namespace Microsoft.AspNetCore.Diagnostics
public async Task ErrorPageWithoutAcceptHeaderForHtmlReturnsPlainText() public async Task ErrorPageWithoutAcceptHeaderForHtmlReturnsPlainText()
{ {
// Arrange // Arrange
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseDeveloperExceptionPage(); app.UseDeveloperExceptionPage();
@ -86,7 +107,11 @@ namespace Microsoft.AspNetCore.Diagnostics
throw new Exception("Test exception"); throw new Exception("Test exception");
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
// Act // Act
var response = await server.CreateClient().GetAsync("/path"); var response = await server.CreateClient().GetAsync("/path");
@ -102,7 +127,11 @@ namespace Microsoft.AspNetCore.Diagnostics
public async Task ExceptionPageFiltersAreApplied() public async Task ExceptionPageFiltersAreApplied()
{ {
// Arrange // Arrange
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<IDeveloperPageExceptionFilter, ExceptionMessageFilter>(); services.AddSingleton<IDeveloperPageExceptionFilter, ExceptionMessageFilter>();
@ -115,7 +144,11 @@ namespace Microsoft.AspNetCore.Diagnostics
throw new Exception("Test exception"); throw new Exception("Test exception");
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
// Act // Act
var response = await server.CreateClient().GetAsync("/path"); var response = await server.CreateClient().GetAsync("/path");
@ -128,7 +161,11 @@ namespace Microsoft.AspNetCore.Diagnostics
public async Task ExceptionFilterCallingNextWorks() public async Task ExceptionFilterCallingNextWorks()
{ {
// Arrange // Arrange
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<IDeveloperPageExceptionFilter, PassThroughExceptionFilter>(); services.AddSingleton<IDeveloperPageExceptionFilter, PassThroughExceptionFilter>();
@ -143,20 +180,30 @@ namespace Microsoft.AspNetCore.Diagnostics
throw new Exception("Test exception"); throw new Exception("Test exception");
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
// Act // Act
var response = await server.CreateClient().GetAsync("/path"); var response = await server.CreateClient().GetAsync("/path");
// Assert // Assert
Assert.Equal("Bad format exception!", await response.Content.ReadAsStringAsync()); Assert.Equal("Bad format exception!", await response.Content.ReadAsStringAsync());
await host.StartAsync();
} }
[Fact] [Fact]
public async Task ExceptionPageFiltersAreAppliedInOrder() public async Task ExceptionPageFiltersAreAppliedInOrder()
{ {
// Arrange // Arrange
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<IDeveloperPageExceptionFilter, AlwaysThrowSameMessageFilter>(); services.AddSingleton<IDeveloperPageExceptionFilter, AlwaysThrowSameMessageFilter>();
@ -171,7 +218,11 @@ namespace Microsoft.AspNetCore.Diagnostics
throw new Exception("Test exception"); throw new Exception("Test exception");
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
// Act // Act
var response = await server.CreateClient().GetAsync("/path"); var response = await server.CreateClient().GetAsync("/path");
@ -241,7 +292,11 @@ namespace Microsoft.AspNetCore.Diagnostics
{ {
// Arrange // Arrange
DiagnosticListener diagnosticListener = null; DiagnosticListener diagnosticListener = null;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
diagnosticListener = app.ApplicationServices.GetRequiredService<DiagnosticListener>(); diagnosticListener = app.ApplicationServices.GetRequiredService<DiagnosticListener>();
@ -251,7 +306,11 @@ namespace Microsoft.AspNetCore.Diagnostics
throw new CustomCompilationException(failures); throw new CustomCompilationException(failures);
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var listener = new TestDiagnosticListener(); var listener = new TestDiagnosticListener();
diagnosticListener.SubscribeWithAdapter(listener); diagnosticListener.SubscribeWithAdapter(listener);

View File

@ -16,6 +16,7 @@ using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Xunit; using Xunit;
namespace Microsoft.AspNetCore.Diagnostics namespace Microsoft.AspNetCore.Diagnostics
@ -28,7 +29,11 @@ namespace Microsoft.AspNetCore.Diagnostics
[InlineData(HttpStatusCode.InternalServerError)] [InlineData(HttpStatusCode.InternalServerError)]
public async Task OnlyHandles_UnhandledExceptions(HttpStatusCode expectedStatusCode) public async Task OnlyHandles_UnhandledExceptions(HttpStatusCode expectedStatusCode)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseExceptionHandler("/handle-errors"); app.UseExceptionHandler("/handle-errors");
@ -48,8 +53,11 @@ namespace Microsoft.AspNetCore.Diagnostics
await context.Response.WriteAsync("An error occurred while adding a product"); await context.Response.WriteAsync("An error occurred while adding a product");
})); }));
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -61,7 +69,11 @@ namespace Microsoft.AspNetCore.Diagnostics
[Fact] [Fact]
public async Task DoesNotHandle_UnhandledExceptions_WhenResponseAlreadyStarted() public async Task DoesNotHandle_UnhandledExceptions_WhenResponseAlreadyStarted()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.Use(async (httpContext, next) => app.Use(async (httpContext, next) =>
@ -96,8 +108,11 @@ namespace Microsoft.AspNetCore.Diagnostics
throw new InvalidOperationException("Something bad happened"); throw new InvalidOperationException("Something bad happened");
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -110,7 +125,11 @@ namespace Microsoft.AspNetCore.Diagnostics
public async Task ClearsResponseBuffer_BeforeRequestIsReexecuted() public async Task ClearsResponseBuffer_BeforeRequestIsReexecuted()
{ {
var expectedResponseBody = "New response body"; var expectedResponseBody = "New response body";
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
// add response buffering // add response buffering
@ -156,8 +175,11 @@ namespace Microsoft.AspNetCore.Diagnostics
throw new InvalidOperationException("Invalid input provided."); throw new InvalidOperationException("Invalid input provided.");
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -181,7 +203,11 @@ namespace Microsoft.AspNetCore.Diagnostics
{ {
var expiresTime = DateTime.UtcNow.AddDays(5).ToString("R"); var expiresTime = DateTime.UtcNow.AddDays(5).ToString("R");
var expectedResponseBody = "Handled error in a custom way."; var expectedResponseBody = "Handled error in a custom way.";
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseExceptionHandler("/handle-errors"); app.UseExceptionHandler("/handle-errors");
@ -205,8 +231,11 @@ namespace Microsoft.AspNetCore.Diagnostics
throw new InvalidOperationException("Invalid input provided."); throw new InvalidOperationException("Invalid input provided.");
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -230,7 +259,11 @@ namespace Microsoft.AspNetCore.Diagnostics
{ {
var expiresTime = DateTime.UtcNow.AddDays(10).ToString("R"); var expiresTime = DateTime.UtcNow.AddDays(10).ToString("R");
var expectedResponseBody = "Hello world!"; var expectedResponseBody = "Hello world!";
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseExceptionHandler("/handle-errors"); app.UseExceptionHandler("/handle-errors");
@ -253,8 +286,11 @@ namespace Microsoft.AspNetCore.Diagnostics
await httpContext.Response.WriteAsync(expectedResponseBody); await httpContext.Response.WriteAsync(expectedResponseBody);
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -280,7 +316,11 @@ namespace Microsoft.AspNetCore.Diagnostics
public async Task DoesNotClearCacheHeaders_WhenResponseHasAlreadyStarted() public async Task DoesNotClearCacheHeaders_WhenResponseHasAlreadyStarted()
{ {
var expiresTime = DateTime.UtcNow.AddDays(10).ToString("R"); var expiresTime = DateTime.UtcNow.AddDays(10).ToString("R");
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.Use(async (httpContext, next) => app.Use(async (httpContext, next) =>
@ -321,8 +361,11 @@ namespace Microsoft.AspNetCore.Diagnostics
throw new InvalidOperationException("Something bad happened"); throw new InvalidOperationException("Something bad happened");
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -350,7 +393,11 @@ namespace Microsoft.AspNetCore.Diagnostics
// Arrange // Arrange
DiagnosticListener diagnosticListener = null; DiagnosticListener diagnosticListener = null;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
diagnosticListener = app.ApplicationServices.GetRequiredService<DiagnosticListener>(); diagnosticListener = app.ApplicationServices.GetRequiredService<DiagnosticListener>();
@ -368,7 +415,11 @@ namespace Microsoft.AspNetCore.Diagnostics
throw new Exception("Test exception"); throw new Exception("Test exception");
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var listener = new TestDiagnosticListener(); var listener = new TestDiagnosticListener();
diagnosticListener.SubscribeWithAdapter(listener); diagnosticListener.SubscribeWithAdapter(listener);
@ -395,15 +446,20 @@ namespace Microsoft.AspNetCore.Diagnostics
// Arrange // Arrange
DiagnosticListener diagnosticListener = null; DiagnosticListener diagnosticListener = null;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
diagnosticListener = app.ApplicationServices.GetRequiredService<DiagnosticListener>(); diagnosticListener = app.ApplicationServices.GetRequiredService<DiagnosticListener>();
app.UseExceptionHandler(); app.UseExceptionHandler();
}); });
}).Build();
// Act // Act
var exception = Assert.Throws<InvalidOperationException>(() => new TestServer(builder)); var exception = Assert.Throws<InvalidOperationException>(() => host.Start());
// Assert // Assert
Assert.Equal("An error occurred when configuring the exception handler middleware. " + Assert.Equal("An error occurred when configuring the exception handler middleware. " +

View File

@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Xunit; using Xunit;
namespace Microsoft.AspNetCore.Diagnostics namespace Microsoft.AspNetCore.Diagnostics
@ -21,7 +22,11 @@ namespace Microsoft.AspNetCore.Diagnostics
{ {
var expectedStatusCode = 432; var expectedStatusCode = 432;
var destination = "/location"; var destination = "/location";
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseStatusCodePagesWithRedirects("/errorPage?id={0}"); app.UseStatusCodePagesWithRedirects("/errorPage?id={0}");
@ -48,9 +53,13 @@ namespace Microsoft.AspNetCore.Diagnostics
throw new InvalidOperationException($"Invalid input provided. {context.Request.Path}"); throw new InvalidOperationException($"Invalid input provided. {context.Request.Path}");
}); });
}); });
}).Build();
await host.StartAsync();
var expectedQueryString = $"?id={expectedStatusCode}"; var expectedQueryString = $"?id={expectedStatusCode}";
var expectedUri = $"/errorPage{expectedQueryString}"; var expectedUri = $"/errorPage{expectedQueryString}";
using var server = new TestServer(builder); using var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(destination); var response = await client.GetAsync(destination);
Assert.Equal(HttpStatusCode.Found, response.StatusCode); Assert.Equal(HttpStatusCode.Found, response.StatusCode);
@ -67,7 +76,11 @@ namespace Microsoft.AspNetCore.Diagnostics
{ {
var expectedStatusCode = 432; var expectedStatusCode = 432;
var destination = "/location"; var destination = "/location";
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.Use(async (context, next) => app.Use(async (context, next) =>
@ -108,8 +121,11 @@ namespace Microsoft.AspNetCore.Diagnostics
throw new InvalidOperationException("Invalid input provided."); throw new InvalidOperationException("Invalid input provided.");
}); });
}); });
}).Build();
using var server = new TestServer(builder); await host.StartAsync();
using var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(destination + "?name=James"); var response = await client.GetAsync(destination + "?name=James");
var content = await response.Content.ReadAsStringAsync(); var content = await response.Content.ReadAsStringAsync();
@ -121,7 +137,11 @@ namespace Microsoft.AspNetCore.Diagnostics
{ {
var expectedStatusCode = 432; var expectedStatusCode = 432;
var destination = "/location"; var destination = "/location";
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseStatusCodePagesWithReExecute(pathFormat: "/errorPage", queryFormat: "?id={0}"); app.UseStatusCodePagesWithReExecute(pathFormat: "/errorPage", queryFormat: "?id={0}");
@ -163,8 +183,11 @@ namespace Microsoft.AspNetCore.Diagnostics
throw new InvalidOperationException("Invalid input provided."); throw new InvalidOperationException("Invalid input provided.");
}); });
}); });
}).Build();
using var server = new TestServer(builder); await host.StartAsync();
using var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(destination + "?name=James"); var response = await client.GetAsync(destination + "?name=James");
var content = await response.Content.ReadAsStringAsync(); var content = await response.Content.ReadAsStringAsync();

View File

@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace DatabaseErrorPageSample namespace DatabaseErrorPageSample
{ {
@ -26,15 +27,19 @@ namespace DatabaseErrorPageSample
}); });
} }
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseKestrel() .UseKestrel()
.UseIISIntegration() .UseIISIntegration()
.UseStartup<Startup>() .UseStartup<Startup>();
})
.Build(); .Build();
host.Run(); return host.RunAsync();
} }
} }

View File

@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.Routing;
using Microsoft.AspNetCore.Routing.Patterns; using Microsoft.AspNetCore.Routing.Patterns;
using Microsoft.Extensions.Hosting;
namespace DeveloperExceptionPageSample namespace DeveloperExceptionPageSample
{ {
@ -44,15 +45,19 @@ namespace DeveloperExceptionPageSample
}); });
} }
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseKestrel() .UseKestrel()
.UseIISIntegration() .UseIISIntegration()
.UseStartup<Startup>() .UseStartup<Startup>();
})
.Build(); .Build();
host.Run(); return host.RunAsync();
} }
} }
} }

View File

@ -1,10 +1,12 @@
using System; using System;
using System.Text.Encodings.Web; using System.Text.Encodings.Web;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Diagnostics;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Http.Features;
using Microsoft.Extensions.Hosting;
namespace ExceptionHandlerSample namespace ExceptionHandlerSample
{ {
@ -56,15 +58,19 @@ namespace ExceptionHandlerSample
}); });
} }
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseKestrel() .UseKestrel()
.UseIISIntegration() .UseIISIntegration()
.UseStartup<Startup>() .UseStartup<Startup>();
})
.Build(); .Build();
host.Run(); return host.RunAsync();
} }
} }
} }

View File

@ -11,6 +11,7 @@ using Microsoft.AspNetCore.Diagnostics;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Http.Features;
using Microsoft.Extensions.Hosting;
namespace StatusCodePagesSample namespace StatusCodePagesSample
{ {
@ -102,15 +103,18 @@ namespace StatusCodePagesSample
}); });
} }
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseKestrel() .UseKestrel()
.UseIISIntegration() .UseIISIntegration()
.UseStartup<Startup>() .UseStartup<Startup>();
.Build(); }).Build();
host.Run(); return host.RunAsync();
} }
} }
} }

View File

@ -1,5 +1,7 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
namespace WelcomePageSample namespace WelcomePageSample
{ {
@ -10,15 +12,18 @@ namespace WelcomePageSample
app.UseWelcomePage(); app.UseWelcomePage();
} }
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseKestrel() .UseKestrel()
.UseIISIntegration() .UseIISIntegration()
.UseStartup<Startup>() .UseStartup<Startup>();
.Build(); }).Build();
host.Run(); return host.RunAsync();
} }
} }
} }

View File

@ -12,6 +12,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Xunit; using Xunit;
namespace Microsoft.AspNetCore.HeaderPropagation.Tests namespace Microsoft.AspNetCore.HeaderPropagation.Tests
@ -24,7 +25,11 @@ namespace Microsoft.AspNetCore.HeaderPropagation.Tests
// Arrange // Arrange
Exception captured = null; Exception captured = null;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddHttpClient("test").AddHeaderPropagation(); services.AddHttpClient("test").AddHeaderPropagation();
@ -50,8 +55,11 @@ namespace Microsoft.AspNetCore.HeaderPropagation.Tests
} }
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(); var request = new HttpRequestMessage();
@ -96,10 +104,10 @@ namespace Microsoft.AspNetCore.HeaderPropagation.Tests
{ {
// Arrange // Arrange
var handler = new SimpleHandler(); var handler = new SimpleHandler();
var builder = CreateBuilder(c => using var host = await CreateHost(c =>
c.Headers.Add("in", "out"), c.Headers.Add("in", "out"),
handler); handler);
var server = new TestServer(builder); var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(); var request = new HttpRequestMessage();
@ -119,13 +127,13 @@ namespace Microsoft.AspNetCore.HeaderPropagation.Tests
{ {
// Arrange // Arrange
var handler = new SimpleHandler(); var handler = new SimpleHandler();
var builder = CreateBuilder(c => using var host = await CreateHost(c =>
{ {
c.Headers.Add("first"); c.Headers.Add("first");
c.Headers.Add("second"); c.Headers.Add("second");
}, },
handler); handler);
var server = new TestServer(builder); var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(); var request = new HttpRequestMessage();
@ -144,15 +152,20 @@ namespace Microsoft.AspNetCore.HeaderPropagation.Tests
} }
[Fact] [Fact]
public void Builder_UseHeaderPropagation_Without_AddHeaderPropagation_Throws() public async Task Builder_UseHeaderPropagation_Without_AddHeaderPropagation_Throws()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHeaderPropagation(); app.UseHeaderPropagation();
}); });
}).Build();
var exception = Assert.Throws<InvalidOperationException>(() => new TestServer(builder)); var exception = await Assert.ThrowsAsync<InvalidOperationException>(() => host.StartAsync());
Assert.Equal( Assert.Equal(
"Unable to find the required services. Please add all the required services by calling 'IServiceCollection.AddHeaderPropagation' inside the call to 'ConfigureServices(...)' in the application startup code.", "Unable to find the required services. Please add all the required services by calling 'IServiceCollection.AddHeaderPropagation' inside the call to 'ConfigureServices(...)' in the application startup code.",
exception.Message); exception.Message);
@ -163,11 +176,11 @@ namespace Microsoft.AspNetCore.HeaderPropagation.Tests
{ {
// Arrange // Arrange
var handler = new SimpleHandler(); var handler = new SimpleHandler();
var builder = CreateBuilder( using var host = await CreateHost(
c => c.Headers.Add("in", "out"), c => c.Headers.Add("in", "out"),
handler, handler,
c => c.Headers.Add("out", "different")); c => c.Headers.Add("out", "different"));
var server = new TestServer(builder); var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(); var request = new HttpRequestMessage();
@ -182,9 +195,13 @@ namespace Microsoft.AspNetCore.HeaderPropagation.Tests
Assert.Equal(new[] { "test" }, handler.Headers.GetValues("different")); Assert.Equal(new[] { "test" }, handler.Headers.GetValues("different"));
} }
private IWebHostBuilder CreateBuilder(Action<HeaderPropagationOptions> configure, HttpMessageHandler primaryHandler, Action<HeaderPropagationMessageHandlerOptions> configureClient = null) private async Task<IHost> CreateHost(Action<HeaderPropagationOptions> configure, HttpMessageHandler primaryHandler, Action<HeaderPropagationMessageHandlerOptions> configureClient = null)
{ {
return new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHeaderPropagation(); app.UseHeaderPropagation();
@ -208,6 +225,11 @@ namespace Microsoft.AspNetCore.HeaderPropagation.Tests
client.AddHeaderPropagation(); client.AddHeaderPropagation();
} }
}); });
}).Build();
await host.StartAsync();
return host;
} }
private class SimpleHandler : DelegatingHandler private class SimpleHandler : DelegatingHandler

View File

@ -13,6 +13,7 @@ using Moq;
using Xunit; using Xunit;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Hosting;
namespace Microsoft.AspNetCore.Diagnostics.HealthChecks namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
@ -21,7 +22,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public void ThrowFriendlyErrorWhenServicesNotRegistered() public void ThrowFriendlyErrorWhenServicesNotRegistered()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRouting(); app.UseRouting();
@ -34,8 +39,9 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddRouting(); services.AddRouting();
}); });
}).Build();
var ex = Assert.Throws<InvalidOperationException>(() => new TestServer(builder)); var ex = Assert.Throws<InvalidOperationException>(() => host.Start());
Assert.Equal( Assert.Equal(
"Unable to find the required services. Please add all the required services by calling " + "Unable to find the required services. Please add all the required services by calling " +
@ -48,7 +54,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
public async Task MapHealthChecks_ReturnsOk() public async Task MapHealthChecks_ReturnsOk()
{ {
// Arrange // Arrange
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRouting(); app.UseRouting();
@ -62,7 +72,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
services.AddRouting(); services.AddRouting();
services.AddHealthChecks(); services.AddHealthChecks();
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
// Act // Act
@ -78,7 +92,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
public async Task MapHealthChecks_WithOptions_ReturnsOk() public async Task MapHealthChecks_WithOptions_ReturnsOk()
{ {
// Arrange // Arrange
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRouting(); app.UseRouting();
@ -99,7 +117,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
services.AddRouting(); services.AddRouting();
services.AddHealthChecks(); services.AddHealthChecks();
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
// Act // Act

View File

@ -1,10 +1,11 @@
// Copyright (c) .NET Foundation. All rights reserved. // Copyright (c) .NET Foundation. 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.Net; using System.Net;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Hosting;
using Xunit; using Xunit;
namespace Microsoft.AspNetCore.Diagnostics.HealthChecks namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
@ -14,10 +15,17 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task BasicStartup() public async Task BasicStartup()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.UseStartup<HealthChecksSample.BasicStartup>(); .UseStartup<HealthChecksSample.BasicStartup>();
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/health"); var response = await client.GetAsync("/health");
@ -29,10 +37,17 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task CustomWriterStartup() public async Task CustomWriterStartup()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.UseStartup<HealthChecksSample.CustomWriterStartup>(); .UseStartup<HealthChecksSample.CustomWriterStartup>();
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/health"); var response = await client.GetAsync("/health");
@ -45,10 +60,17 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task LivenessProbeStartup_Liveness() public async Task LivenessProbeStartup_Liveness()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.UseStartup<HealthChecksSample.LivenessProbeStartup>(); .UseStartup<HealthChecksSample.LivenessProbeStartup>();
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/health/live"); var response = await client.GetAsync("/health/live");
@ -60,10 +82,17 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task LivenessProbeStartup_Readiness() public async Task LivenessProbeStartup_Readiness()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.UseStartup<HealthChecksSample.LivenessProbeStartup>(); .UseStartup<HealthChecksSample.LivenessProbeStartup>();
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/health/ready"); var response = await client.GetAsync("/health/ready");

View File

@ -14,6 +14,7 @@ using Newtonsoft.Json;
using System.Net; using System.Net;
using System.Threading.Tasks; using System.Threading.Tasks;
using Xunit; using Xunit;
using Microsoft.Extensions.Hosting;
namespace Microsoft.AspNetCore.Diagnostics.HealthChecks namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
@ -22,13 +23,18 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public void ThrowFriendlyErrorWhenServicesNotRegistered() public void ThrowFriendlyErrorWhenServicesNotRegistered()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health"); app.UseHealthChecks("/health");
}); });
}).Build();
var ex = Assert.Throws<InvalidOperationException>(() => new TestServer(builder)); var ex = Assert.Throws<InvalidOperationException>(() => host.Start());
Assert.Equal( Assert.Equal(
"Unable to find the required services. Please add all the required services by calling " + "Unable to find the required services. Please add all the required services by calling " +
@ -40,7 +46,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] // Matches based on '.Map' [Fact] // Matches based on '.Map'
public async Task IgnoresRequestThatDoesNotMatchPath() public async Task IgnoresRequestThatDoesNotMatchPath()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health"); app.UseHealthChecks("/health");
@ -49,7 +59,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/frob"); var response = await client.GetAsync("/frob");
@ -59,7 +73,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] // Matches based on '.Map' [Fact] // Matches based on '.Map'
public async Task MatchIsCaseInsensitive() public async Task MatchIsCaseInsensitive()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health"); app.UseHealthChecks("/health");
@ -68,7 +86,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/HEALTH"); var response = await client.GetAsync("/HEALTH");
@ -78,7 +100,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task ReturnsPlainTextStatus() public async Task ReturnsPlainTextStatus()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health"); app.UseHealthChecks("/health");
@ -87,7 +113,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/health"); var response = await client.GetAsync("/health");
@ -100,7 +130,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task StatusCodeIs200IfNoChecks() public async Task StatusCodeIs200IfNoChecks()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health"); app.UseHealthChecks("/health");
@ -109,7 +143,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/health"); var response = await client.GetAsync("/health");
@ -122,7 +160,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task StatusCodeIs200IfAllChecksHealthy() public async Task StatusCodeIs200IfAllChecksHealthy()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health"); app.UseHealthChecks("/health");
@ -134,7 +176,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
.AddCheck("Bar", () => HealthCheckResult.Healthy("A-ok!")) .AddCheck("Bar", () => HealthCheckResult.Healthy("A-ok!"))
.AddCheck("Baz", () => HealthCheckResult.Healthy("A-ok!")); .AddCheck("Baz", () => HealthCheckResult.Healthy("A-ok!"));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/health"); var response = await client.GetAsync("/health");
@ -147,7 +193,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task StatusCodeIs200IfCheckIsDegraded() public async Task StatusCodeIs200IfCheckIsDegraded()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health"); app.UseHealthChecks("/health");
@ -159,7 +209,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
.AddCheck("Bar", () => HealthCheckResult.Degraded("Not so great.")) .AddCheck("Bar", () => HealthCheckResult.Degraded("Not so great."))
.AddCheck("Baz", () => HealthCheckResult.Healthy("A-ok!")); .AddCheck("Baz", () => HealthCheckResult.Healthy("A-ok!"));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/health"); var response = await client.GetAsync("/health");
@ -172,7 +226,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task StatusCodeIs503IfCheckIsUnhealthy() public async Task StatusCodeIs503IfCheckIsUnhealthy()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health"); app.UseHealthChecks("/health");
@ -184,7 +242,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
.AddAsyncCheck("Bar", () => Task.FromResult(HealthCheckResult.Unhealthy("Pretty bad."))) .AddAsyncCheck("Bar", () => Task.FromResult(HealthCheckResult.Unhealthy("Pretty bad.")))
.AddAsyncCheck("Baz", () => Task.FromResult(HealthCheckResult.Healthy("A-ok!"))); .AddAsyncCheck("Baz", () => Task.FromResult(HealthCheckResult.Healthy("A-ok!")));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/health"); var response = await client.GetAsync("/health");
@ -197,7 +259,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task StatusCodeIs503IfCheckHasUnhandledException() public async Task StatusCodeIs503IfCheckHasUnhandledException()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health"); app.UseHealthChecks("/health");
@ -209,7 +275,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
.AddAsyncCheck("Bar", () => throw null) .AddAsyncCheck("Bar", () => throw null)
.AddAsyncCheck("Baz", () => Task.FromResult(HealthCheckResult.Healthy("A-ok!"))); .AddAsyncCheck("Baz", () => Task.FromResult(HealthCheckResult.Healthy("A-ok!")));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/health"); var response = await client.GetAsync("/health");
@ -227,7 +297,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
status = "Unhealthy", status = "Unhealthy",
}); });
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health", new HealthCheckOptions() app.UseHealthChecks("/health", new HealthCheckOptions()
@ -247,7 +321,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
.AddAsyncCheck("Bar", () => Task.FromResult(HealthCheckResult.Unhealthy("Pretty bad."))) .AddAsyncCheck("Bar", () => Task.FromResult(HealthCheckResult.Unhealthy("Pretty bad.")))
.AddAsyncCheck("Baz", () => Task.FromResult(HealthCheckResult.Healthy("A-ok!"))); .AddAsyncCheck("Baz", () => Task.FromResult(HealthCheckResult.Healthy("A-ok!")));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/health"); var response = await client.GetAsync("/health");
@ -261,7 +339,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task NoResponseWriterReturnsEmptyBody() public async Task NoResponseWriterReturnsEmptyBody()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health", new HealthCheckOptions() app.UseHealthChecks("/health", new HealthCheckOptions()
@ -276,7 +358,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
.AddAsyncCheck("Bar", () => Task.FromResult(HealthCheckResult.Unhealthy("Pretty bad."))) .AddAsyncCheck("Bar", () => Task.FromResult(HealthCheckResult.Unhealthy("Pretty bad.")))
.AddAsyncCheck("Baz", () => Task.FromResult(HealthCheckResult.Healthy("A-ok!"))); .AddAsyncCheck("Baz", () => Task.FromResult(HealthCheckResult.Healthy("A-ok!")));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/health"); var response = await client.GetAsync("/health");
@ -288,7 +374,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task CanSetCustomStatusCodes() public async Task CanSetCustomStatusCodes()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health", new HealthCheckOptions() app.UseHealthChecks("/health", new HealthCheckOptions()
@ -303,7 +393,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/health"); var response = await client.GetAsync("/health");
@ -315,7 +409,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task SetsCacheHeaders() public async Task SetsCacheHeaders()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health"); app.UseHealthChecks("/health");
@ -324,7 +422,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/health"); var response = await client.GetAsync("/health");
@ -339,7 +441,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task CanSuppressCacheHeaders() public async Task CanSuppressCacheHeaders()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health", new HealthCheckOptions() app.UseHealthChecks("/health", new HealthCheckOptions()
@ -351,7 +457,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/health"); var response = await client.GetAsync("/health");
@ -366,7 +476,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task CanFilterChecks() public async Task CanFilterChecks()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health", new HealthCheckOptions() app.UseHealthChecks("/health", new HealthCheckOptions()
@ -382,7 +496,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
.AddAsyncCheck("Bar", () => Task.FromResult(HealthCheckResult.Unhealthy("A-ok!"))) .AddAsyncCheck("Bar", () => Task.FromResult(HealthCheckResult.Unhealthy("A-ok!")))
.AddAsyncCheck("Baz", () => Task.FromResult(HealthCheckResult.Healthy("A-ok!"))); .AddAsyncCheck("Baz", () => Task.FromResult(HealthCheckResult.Healthy("A-ok!")));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/health"); var response = await client.GetAsync("/health");
@ -395,7 +513,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task CanListenWithoutPath_AcceptsRequest() public async Task CanListenWithoutPath_AcceptsRequest()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks(default); app.UseHealthChecks(default);
@ -404,8 +526,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("http://localhost:5001/health"); var response = await client.GetAsync("http://localhost:5001/health");
@ -418,7 +543,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task CanListenWithPath_AcceptsRequestWithExtraSlash() public async Task CanListenWithPath_AcceptsRequestWithExtraSlash()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health"); app.UseHealthChecks("/health");
@ -427,8 +556,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("http://localhost:5001/health/"); var response = await client.GetAsync("http://localhost:5001/health/");
@ -439,7 +571,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task CanListenWithPath_AcceptsRequestWithCaseInsensitiveMatch() public async Task CanListenWithPath_AcceptsRequestWithCaseInsensitiveMatch()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health"); app.UseHealthChecks("/health");
@ -448,8 +584,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("http://localhost:5001/HEALTH"); var response = await client.GetAsync("http://localhost:5001/HEALTH");
@ -462,7 +601,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task CanListenWithPath_RejectsRequestWithExtraSegments() public async Task CanListenWithPath_RejectsRequestWithExtraSegments()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health"); app.UseHealthChecks("/health");
@ -471,8 +614,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("http://localhost:5001/health/detailed"); var response = await client.GetAsync("http://localhost:5001/health/detailed");
@ -484,7 +630,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task CanListenWithPath_MultipleMiddleware_LeastSpecificFirst() public async Task CanListenWithPath_MultipleMiddleware_LeastSpecificFirst()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
// Throws if used // Throws if used
@ -499,8 +649,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("http://localhost:5001/health/detailed"); var response = await client.GetAsync("http://localhost:5001/health/detailed");
@ -514,7 +667,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task CanListenWithPath_MultipleMiddleware_MostSpecificFirst() public async Task CanListenWithPath_MultipleMiddleware_MostSpecificFirst()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHealthChecks("/health/detailed"); app.UseHealthChecks("/health/detailed");
@ -529,8 +686,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("http://localhost:5001/health/detailed"); var response = await client.GetAsync("http://localhost:5001/health/detailed");
@ -543,7 +703,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task CanListenOnPort_AcceptsRequest_OnSpecifiedPort() public async Task CanListenOnPort_AcceptsRequest_OnSpecifiedPort()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.Use(next => async (context) => app.Use(next => async (context) =>
@ -560,8 +724,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("http://localhost:5001/health"); var response = await client.GetAsync("http://localhost:5001/health");
@ -574,7 +741,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task CanListenOnPortWithoutPath_AcceptsRequest_OnSpecifiedPort() public async Task CanListenOnPortWithoutPath_AcceptsRequest_OnSpecifiedPort()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.Use(next => async (context) => app.Use(next => async (context) =>
@ -591,8 +762,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("http://localhost:5001/health"); var response = await client.GetAsync("http://localhost:5001/health");
@ -605,7 +779,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task CanListenOnPort_RejectsRequest_OnOtherPort() public async Task CanListenOnPort_RejectsRequest_OnOtherPort()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.Use(next => async (context) => app.Use(next => async (context) =>
@ -622,8 +800,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("http://localhost:5000/health"); var response = await client.GetAsync("http://localhost:5000/health");
@ -634,7 +815,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task CanListenOnPort_MultipleMiddleware() public async Task CanListenOnPort_MultipleMiddleware()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.Use(next => async (context) => app.Use(next => async (context) =>
@ -657,8 +842,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("http://localhost:5001/health/detailed"); var response = await client.GetAsync("http://localhost:5001/health/detailed");
@ -671,7 +859,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
[Fact] [Fact]
public async Task CanListenOnPort_MultipleMiddleware_DifferentPorts() public async Task CanListenOnPort_MultipleMiddleware_DifferentPorts()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.Use(next => async (context) => app.Use(next => async (context) =>
@ -694,8 +886,11 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks
{ {
services.AddHealthChecks(); services.AddHealthChecks();
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("http://localhost:5001/health"); var response = await client.GetAsync("http://localhost:5001/health");

View File

@ -1,8 +1,10 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
namespace HealthChecksSample namespace HealthChecksSample
@ -25,12 +27,12 @@ namespace HealthChecksSample
}; };
} }
public static void Main(string[] args) public static Task Main(string[] args)
{ {
BuildWebHost(args).Run(); return BuildWebHost(args).RunAsync();
} }
public static IWebHost BuildWebHost(string[] args) public static IHost BuildWebHost(string[] args)
{ {
var config = new ConfigurationBuilder() var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory()) .SetBasePath(Directory.GetCurrentDirectory())
@ -45,7 +47,10 @@ namespace HealthChecksSample
startupType = typeof(BasicStartup); startupType = typeof(BasicStartup);
} }
return new WebHostBuilder() return new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseConfiguration(config) .UseConfiguration(config)
.ConfigureLogging(builder => .ConfigureLogging(builder =>
{ {
@ -54,7 +59,8 @@ namespace HealthChecksSample
builder.AddConsole(); builder.AddConsole();
}) })
.UseKestrel() .UseKestrel()
.UseStartup(startupType) .UseStartup(startupType);
})
.Build(); .Build();
} }

View File

@ -1,22 +1,27 @@
// Copyright (c) .NET Foundation. All rights reserved. // Copyright (c) .NET Foundation. 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.Threading.Tasks;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
namespace HostFilteringSample namespace HostFilteringSample
{ {
public class Program public class Program
{ {
public static void Main(string[] args) public static Task Main(string[] args)
{ {
BuildWebHost(args).Run(); return BuildWebHost(args).RunAsync();
} }
public static IWebHost BuildWebHost(string[] args) public static IHost BuildWebHost(string[] args)
{ {
var hostBuilder = new WebHostBuilder() var hostBuilder = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.ConfigureLogging((_, factory) => .ConfigureLogging((_, factory) =>
{ {
factory.SetMinimumLevel(LogLevel.Debug); factory.SetMinimumLevel(LogLevel.Debug);
@ -30,6 +35,7 @@ namespace HostFilteringSample
}) })
.UseKestrel() .UseKestrel()
.UseStartup<Startup>(); .UseStartup<Startup>();
});
return hostBuilder.Build(); return hostBuilder.Build();
} }

View File

@ -1,4 +1,4 @@
// Copyright (c) .NET Foundation. All rights reserved. // Copyright (c) .NET Foundation. 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;
@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives; using Microsoft.Extensions.Primitives;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
@ -21,12 +22,20 @@ namespace Microsoft.AspNetCore.HostFiltering
[Fact] [Fact]
public async Task MissingConfigThrows() public async Task MissingConfigThrows()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHostFiltering(); app.UseHostFiltering();
}); });
await Assert.ThrowsAsync<InvalidOperationException>(() => new TestServer(builder).SendAsync(_ => { })); }).Build();
await host.StartAsync();
await Assert.ThrowsAsync<InvalidOperationException>(() => host.GetTestServer().SendAsync(_ => { }));
} }
[Theory] [Theory]
@ -34,7 +43,11 @@ namespace Microsoft.AspNetCore.HostFiltering
[InlineData(false, 400)] [InlineData(false, 400)]
public async Task AllowsMissingHost(bool allowed, int status) public async Task AllowsMissingHost(bool allowed, int status)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddHostFiltering(options => services.AddHostFiltering(options =>
@ -57,7 +70,11 @@ namespace Microsoft.AspNetCore.HostFiltering
return Task.CompletedTask; return Task.CompletedTask;
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("/"); var response = await server.CreateClient().GetAsync("/");
Assert.Equal(status, (int)response.StatusCode); Assert.Equal(status, (int)response.StatusCode);
} }
@ -67,7 +84,11 @@ namespace Microsoft.AspNetCore.HostFiltering
[InlineData(false, 400)] [InlineData(false, 400)]
public async Task AllowsEmptyHost(bool allowed, int status) public async Task AllowsEmptyHost(bool allowed, int status)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddHostFiltering(options => services.AddHostFiltering(options =>
@ -92,7 +113,11 @@ namespace Microsoft.AspNetCore.HostFiltering
}); });
app.Run(c => Task.CompletedTask); app.Run(c => Task.CompletedTask);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("/"); var response = await server.CreateClient().GetAsync("/");
Assert.Equal(status, (int)response.StatusCode); Assert.Equal(status, (int)response.StatusCode);
} }
@ -113,9 +138,13 @@ namespace Microsoft.AspNetCore.HostFiltering
[InlineData("xn--c1yn36f:443", "點看")] [InlineData("xn--c1yn36f:443", "點看")]
[InlineData("[::ABC]", "[::aBc]")] [InlineData("[::ABC]", "[::aBc]")]
[InlineData("[::1]:80", "[::1]")] [InlineData("[::1]:80", "[::1]")]
public async Task AllowsSpecifiedHost(string host, string allowedHost) public async Task AllowsSpecifiedHost(string hosturl, string allowedHost)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddHostFiltering(options => services.AddHostFiltering(options =>
@ -129,13 +158,17 @@ namespace Microsoft.AspNetCore.HostFiltering
{ {
// TestHost's ClientHandler doesn't let you set the host header, only the host in the URI // TestHost's ClientHandler doesn't let you set the host header, only the host in the URI
// and that would over-normalize some of our test conditions like casing. // and that would over-normalize some of our test conditions like casing.
ctx.Request.Headers[HeaderNames.Host] = host; ctx.Request.Headers[HeaderNames.Host] = hosturl;
return next(); return next();
}); });
app.UseHostFiltering(); app.UseHostFiltering();
app.Run(c => Task.CompletedTask); app.Run(c => Task.CompletedTask);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateRequest("/").GetAsync(); var response = await server.CreateRequest("/").GetAsync();
Assert.Equal(200, (int)response.StatusCode); Assert.Equal(200, (int)response.StatusCode);
} }
@ -157,9 +190,13 @@ namespace Microsoft.AspNetCore.HostFiltering
[InlineData("點看", "點看")] [InlineData("點看", "點看")]
[InlineData("[::1", "[::1]")] [InlineData("[::1", "[::1]")]
[InlineData("[::1:80", "[::1]")] [InlineData("[::1:80", "[::1]")]
public async Task RejectsMismatchedHosts(string host, string allowedHost) public async Task RejectsMismatchedHosts(string hosturl, string allowedHost)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddHostFiltering(options => services.AddHostFiltering(options =>
@ -173,13 +210,17 @@ namespace Microsoft.AspNetCore.HostFiltering
{ {
// TestHost's ClientHandler doesn't let you set the host header, only the host in the URI // TestHost's ClientHandler doesn't let you set the host header, only the host in the URI
// and that would reject some of our test conditions. // and that would reject some of our test conditions.
ctx.Request.Headers[HeaderNames.Host] = host; ctx.Request.Headers[HeaderNames.Host] = hosturl;
return next(); return next();
}); });
app.UseHostFiltering(); app.UseHostFiltering();
app.Run(c => throw new NotImplementedException("App")); app.Run(c => throw new NotImplementedException("App"));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateRequest("/").GetAsync(); var response = await server.CreateRequest("/").GetAsync();
Assert.Equal(400, (int)response.StatusCode); Assert.Equal(400, (int)response.StatusCode);
} }
@ -191,7 +232,11 @@ namespace Microsoft.AspNetCore.HostFiltering
config["AllowedHosts"] = "localhost"; config["AllowedHosts"] = "localhost";
var currentHost = "otherHost"; var currentHost = "otherHost";
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddHostFiltering(options => services.AddHostFiltering(options =>
@ -210,7 +255,11 @@ namespace Microsoft.AspNetCore.HostFiltering
app.UseHostFiltering(); app.UseHostFiltering();
app.Run(c => Task.CompletedTask); app.Run(c => Task.CompletedTask);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateRequest("/").GetAsync(); var response = await server.CreateRequest("/").GetAsync();
Assert.Equal(400, (int)response.StatusCode); Assert.Equal(400, (int)response.StatusCode);

View File

@ -1,7 +1,9 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.HttpOverrides; using Microsoft.AspNetCore.HttpOverrides;
using Microsoft.Extensions.Hosting;
namespace HttpOverridesSample namespace HttpOverridesSample
{ {
@ -30,15 +32,19 @@ namespace HttpOverridesSample
} }
// Entry point for the application. // Entry point for the application.
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseKestrel() .UseKestrel()
// .UseIIS() // This repo can no longer reference IIS because IISIntegration depends on it. // .UseIIS() // This repo can no longer reference IIS because IISIntegration depends on it.
.UseStartup<Startup>() .UseStartup<Startup>();
})
.Build(); .Build();
host.Run(); return host.RunAsync();
} }
} }
} }

View File

@ -11,6 +11,7 @@ using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
using Xunit; using Xunit;
@ -42,7 +43,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[Fact] [Fact]
public async Task VerifyHeaderIsUsedIfNoCertificateAlreadySet() public async Task VerifyHeaderIsUsedIfNoCertificateAlreadySet()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddCertificateForwarding(options => { }); services.AddCertificateForwarding(options => { });
@ -61,7 +66,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
await next(); await next();
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -72,7 +81,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[Fact] [Fact]
public async Task VerifyHeaderOverridesCertificateEvenAlreadySet() public async Task VerifyHeaderOverridesCertificateEvenAlreadySet()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddCertificateForwarding(options => { }); services.AddCertificateForwarding(options => { });
@ -92,7 +105,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
await next(); await next();
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -103,7 +120,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[Fact] [Fact]
public async Task VerifySettingTheAzureHeaderOnTheForwarderOptionsWorks() public async Task VerifySettingTheAzureHeaderOnTheForwarderOptionsWorks()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddCertificateForwarding(options => options.CertificateHeader = "X-ARR-ClientCert"); services.AddCertificateForwarding(options => options.CertificateHeader = "X-ARR-ClientCert");
@ -122,7 +143,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
await next(); await next();
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -133,7 +158,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[Fact] [Fact]
public async Task VerifyACustomHeaderFailsIfTheHeaderIsNotPresent() public async Task VerifyACustomHeaderFailsIfTheHeaderIsNotPresent()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddCertificateForwarding(options => options.CertificateHeader = "some-random-header"); services.AddCertificateForwarding(options => options.CertificateHeader = "some-random-header");
@ -152,7 +181,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
await next(); await next();
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -163,7 +196,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[Fact] [Fact]
public async Task VerifyArrHeaderEncodedCertFailsOnBadEncoding() public async Task VerifyArrHeaderEncodedCertFailsOnBadEncoding()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddCertificateForwarding(options => { }); services.AddCertificateForwarding(options => { });
@ -182,7 +219,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
await next(); await next();
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {

View File

@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
using Xunit; using Xunit;
@ -19,7 +20,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[Fact] [Fact]
public async Task XForwardedForDefaultSettingsChangeRemoteIpAndPort() public async Task XForwardedForDefaultSettingsChangeRemoteIpAndPort()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -27,7 +32,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
ForwardedHeaders = ForwardedHeaders.XForwardedFor ForwardedHeaders = ForwardedHeaders.XForwardedFor
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -46,7 +55,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[InlineData(1, "11.111.111.11.12345", "10.0.0.1", 99)] // Invalid [InlineData(1, "11.111.111.11.12345", "10.0.0.1", 99)] // Invalid
public async Task XForwardedForFirstValueIsInvalid(int limit, string header, string expectedIp, int expectedPort) public async Task XForwardedForFirstValueIsInvalid(int limit, string header, string expectedIp, int expectedPort)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -55,7 +68,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
ForwardLimit = limit, ForwardLimit = limit,
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -92,7 +109,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[InlineData(3, "13.113.113.13:34567, 12.112.112.12:23456, 11.111.111.11:12345", "13.113.113.13", 34567, "", true)] [InlineData(3, "13.113.113.13:34567, 12.112.112.12:23456, 11.111.111.11:12345", "13.113.113.13", 34567, "", true)]
public async Task XForwardedForForwardLimit(int limit, string header, string expectedIp, int expectedPort, string remainingHeader, bool requireSymmetry) public async Task XForwardedForForwardLimit(int limit, string header, string expectedIp, int expectedPort, string remainingHeader, bool requireSymmetry)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
var options = new ForwardedHeadersOptions var options = new ForwardedHeadersOptions
@ -105,7 +126,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
options.KnownNetworks.Clear(); options.KnownNetworks.Clear();
app.UseForwardedHeaders(options); app.UseForwardedHeaders(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -127,7 +152,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[InlineData("::", false)] [InlineData("::", false)]
public async Task XForwardedForLoopback(string originalIp, bool expectForwarded) public async Task XForwardedForLoopback(string originalIp, bool expectForwarded)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -135,7 +164,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
ForwardedHeaders = ForwardedHeaders.XForwardedFor, ForwardedHeaders = ForwardedHeaders.XForwardedFor,
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -185,7 +218,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[InlineData(3, "13.113.113.13;34567, 12.112.112.12:23456, 11.111.111.11:12345", "10.0.0.1,11.111.111.11,12.112.112.12", "12.112.112.12", 23456, true)] // Invalid 3rd IP [InlineData(3, "13.113.113.13;34567, 12.112.112.12:23456, 11.111.111.11:12345", "10.0.0.1,11.111.111.11,12.112.112.12", "12.112.112.12", 23456, true)] // Invalid 3rd IP
public async Task XForwardedForForwardKnownIps(int limit, string header, string knownIPs, string expectedIp, int expectedPort, bool requireSymmetry) public async Task XForwardedForForwardKnownIps(int limit, string header, string knownIPs, string expectedIp, int expectedPort, bool requireSymmetry)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
var options = new ForwardedHeadersOptions var options = new ForwardedHeadersOptions
@ -200,7 +237,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
} }
app.UseForwardedHeaders(options); app.UseForwardedHeaders(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -216,7 +257,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[Fact] [Fact]
public async Task XForwardedForOverrideBadIpDoesntChangeRemoteIp() public async Task XForwardedForOverrideBadIpDoesntChangeRemoteIp()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -224,7 +269,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
ForwardedHeaders = ForwardedHeaders.XForwardedFor ForwardedHeaders = ForwardedHeaders.XForwardedFor
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -237,7 +286,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[Fact] [Fact]
public async Task XForwardedHostOverrideChangesRequestHost() public async Task XForwardedHostOverrideChangesRequestHost()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -245,7 +298,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
ForwardedHeaders = ForwardedHeaders.XForwardedHost ForwardedHeaders = ForwardedHeaders.XForwardedHost
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -291,11 +348,15 @@ namespace Microsoft.AspNetCore.HttpOverrides
[Theory] [Theory]
[MemberData(nameof(HostHeaderData))] [MemberData(nameof(HostHeaderData))]
public async Task XForwardedHostAllowsValidCharacters(string host) public async Task XForwardedHostAllowsValidCharacters(string hostHeader)
{ {
var assertsExecuted = false; var assertsExecuted = false;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -304,16 +365,20 @@ namespace Microsoft.AspNetCore.HttpOverrides
}); });
app.Run(context => app.Run(context =>
{ {
Assert.Equal(host, context.Request.Host.ToString()); Assert.Equal(hostHeader, context.Request.Host.ToString());
assertsExecuted = true; assertsExecuted = true;
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
await server.SendAsync(c => await server.SendAsync(c =>
{ {
c.Request.Headers["X-Forwarded-Host"] = host; c.Request.Headers["X-Forwarded-Host"] = hostHeader;
}); });
Assert.True(assertsExecuted); Assert.True(assertsExecuted);
} }
@ -368,11 +433,15 @@ namespace Microsoft.AspNetCore.HttpOverrides
[Theory] [Theory]
[MemberData(nameof(HostHeaderInvalidData))] [MemberData(nameof(HostHeaderInvalidData))]
public async Task XForwardedHostFailsForInvalidCharacters(string host) public async Task XForwardedHostFailsForInvalidCharacters(string hostHeader)
{ {
var assertsExecuted = false; var assertsExecuted = false;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -381,16 +450,20 @@ namespace Microsoft.AspNetCore.HttpOverrides
}); });
app.Run(context => app.Run(context =>
{ {
Assert.NotEqual(host, context.Request.Host.Value); Assert.NotEqual(hostHeader, context.Request.Host.Value);
assertsExecuted = true; assertsExecuted = true;
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
await server.SendAsync(c => await server.SendAsync(c =>
{ {
c.Request.Headers["X-Forwarded-Host"] = host; c.Request.Headers["X-Forwarded-Host"] = hostHeader;
}); });
Assert.True(assertsExecuted); Assert.True(assertsExecuted);
} }
@ -411,10 +484,14 @@ namespace Microsoft.AspNetCore.HttpOverrides
[InlineData("xn--c1yn36f:443", "點看")] [InlineData("xn--c1yn36f:443", "點看")]
[InlineData("[::ABC]", "[::aBc]")] [InlineData("[::ABC]", "[::aBc]")]
[InlineData("[::1]:80", "[::1]")] [InlineData("[::1]:80", "[::1]")]
public async Task XForwardedHostAllowsSpecifiedHost(string host, string allowedHost) public async Task XForwardedHostAllowsSpecifiedHost(string hostHeader, string allowedHost)
{ {
bool assertsExecuted = false; bool assertsExecuted = false;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -424,15 +501,19 @@ namespace Microsoft.AspNetCore.HttpOverrides
}); });
app.Run(context => app.Run(context =>
{ {
Assert.Equal(host, context.Request.Headers[HeaderNames.Host]); Assert.Equal(hostHeader, context.Request.Headers[HeaderNames.Host]);
assertsExecuted = true; assertsExecuted = true;
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.SendAsync(ctx => var response = await server.SendAsync(ctx =>
{ {
ctx.Request.Headers["X-forwarded-Host"] = host; ctx.Request.Headers["X-forwarded-Host"] = hostHeader;
}); });
Assert.True(assertsExecuted); Assert.True(assertsExecuted);
} }
@ -454,10 +535,14 @@ namespace Microsoft.AspNetCore.HttpOverrides
[InlineData("點看", "點看")] [InlineData("點看", "點看")]
[InlineData("[::1", "[::1]")] [InlineData("[::1", "[::1]")]
[InlineData("[::1:80", "[::1]")] [InlineData("[::1:80", "[::1]")]
public async Task XForwardedHostFailsMismatchedHosts(string host, string allowedHost) public async Task XForwardedHostFailsMismatchedHosts(string hostHeader, string allowedHost)
{ {
bool assertsExecuted = false; bool assertsExecuted = false;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -467,15 +552,19 @@ namespace Microsoft.AspNetCore.HttpOverrides
}); });
app.Run(context => app.Run(context =>
{ {
Assert.NotEqual<string>(host, context.Request.Headers[HeaderNames.Host]); Assert.NotEqual<string>(hostHeader, context.Request.Headers[HeaderNames.Host]);
assertsExecuted = true; assertsExecuted = true;
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.SendAsync(ctx => var response = await server.SendAsync(ctx =>
{ {
ctx.Request.Headers["X-forwarded-Host"] = host; ctx.Request.Headers["X-forwarded-Host"] = hostHeader;
}); });
Assert.True(assertsExecuted); Assert.True(assertsExecuted);
} }
@ -484,7 +573,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
public async Task XForwardedHostStopsAtFirstUnspecifiedHost() public async Task XForwardedHostStopsAtFirstUnspecifiedHost()
{ {
bool assertsExecuted = false; bool assertsExecuted = false;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -500,7 +593,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.SendAsync(ctx => var response = await server.SendAsync(ctx =>
{ {
ctx.Request.Headers["X-forwarded-Host"] = "stuff:523, bar.foo.com:432, bar.com:80"; ctx.Request.Headers["X-forwarded-Host"] = "stuff:523, bar.foo.com:432, bar.com:80";
@ -518,7 +615,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[InlineData(10, "h3, h2, h1", "h3")] [InlineData(10, "h3, h2, h1", "h3")]
public async Task XForwardedProtoOverrideChangesRequestProtocol(int limit, string header, string expected) public async Task XForwardedProtoOverrideChangesRequestProtocol(int limit, string header, string expected)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -527,7 +628,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
ForwardLimit = limit, ForwardLimit = limit,
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -559,7 +664,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
{ {
var assertsExecuted = false; var assertsExecuted = false;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -573,7 +682,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
await server.SendAsync(c => await server.SendAsync(c =>
{ {
@ -608,7 +721,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
{ {
var assertsExecuted = false; var assertsExecuted = false;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -622,7 +739,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
await server.SendAsync(c => await server.SendAsync(c =>
{ {
@ -642,7 +763,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[InlineData(10, "h3, h2, h1", "::1, badip, ::1", "h1")] [InlineData(10, "h3, h2, h1", "::1, badip, ::1", "h1")]
public async Task XForwardedProtoOverrideLimitedByXForwardedForCount(int limit, string protoHeader, string forHeader, string expected) public async Task XForwardedProtoOverrideLimitedByXForwardedForCount(int limit, string protoHeader, string forHeader, string expected)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -652,7 +777,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
ForwardLimit = limit, ForwardLimit = limit,
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -676,7 +805,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[InlineData(10, "h3, h2, h1", "::1, badip, ::1", "h1")] [InlineData(10, "h3, h2, h1", "::1, badip, ::1", "h1")]
public async Task XForwardedProtoOverrideCanBeIndependentOfXForwardedForCount(int limit, string protoHeader, string forHeader, string expected) public async Task XForwardedProtoOverrideCanBeIndependentOfXForwardedForCount(int limit, string protoHeader, string forHeader, string expected)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -686,7 +819,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
ForwardLimit = limit, ForwardLimit = limit,
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -712,7 +849,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[InlineData("h2, h1", "E::, D::", "F::", true, "http")] [InlineData("h2, h1", "E::, D::", "F::", true, "http")]
public async Task XForwardedProtoOverrideLimitedByLoopback(string protoHeader, string forHeader, string remoteIp, bool loopback, string expected) public async Task XForwardedProtoOverrideLimitedByLoopback(string protoHeader, string forHeader, string remoteIp, bool loopback, string expected)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
var options = new ForwardedHeadersOptions var options = new ForwardedHeadersOptions
@ -728,7 +869,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
} }
app.UseForwardedHeaders(options); app.UseForwardedHeaders(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -753,7 +898,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[Fact] [Fact]
public async Task AllForwardsEnabledChangeRequestRemoteIpHostandProtocol() public async Task AllForwardsEnabledChangeRequestRemoteIpHostandProtocol()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -761,7 +910,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
ForwardedHeaders = ForwardedHeaders.All ForwardedHeaders = ForwardedHeaders.All
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -778,7 +931,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[Fact] [Fact]
public async Task AllOptionsDisabledRequestDoesntChange() public async Task AllOptionsDisabledRequestDoesntChange()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -786,7 +943,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
ForwardedHeaders = ForwardedHeaders.None ForwardedHeaders = ForwardedHeaders.None
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -803,7 +964,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[Fact] [Fact]
public async Task PartiallyEnabledForwardsPartiallyChangesRequest() public async Task PartiallyEnabledForwardsPartiallyChangesRequest()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(new ForwardedHeadersOptions app.UseForwardedHeaders(new ForwardedHeadersOptions
@ -811,7 +976,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -852,12 +1021,20 @@ namespace Microsoft.AspNetCore.HttpOverrides
options.KnownNetworks.Add(new IPNetwork(networkIp, prefixLength)); options.KnownNetworks.Add(new IPNetwork(networkIp, prefixLength));
} }
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseForwardedHeaders(options); app.UseForwardedHeaders(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -872,7 +1049,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[InlineData(2, "httpa, httpb, httpc", "httpb", "httpa")] [InlineData(2, "httpa, httpb, httpc", "httpb", "httpa")]
public async Task ForwardersWithDIOptionsRunsOnce(int limit, string header, string expectedScheme, string remainingHeader) public async Task ForwardersWithDIOptionsRunsOnce(int limit, string header, string expectedScheme, string remainingHeader)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.Configure<ForwardedHeadersOptions>(options => services.Configure<ForwardedHeadersOptions>(options =>
@ -888,7 +1069,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
app.UseForwardedHeaders(); app.UseForwardedHeaders();
app.UseForwardedHeaders(); app.UseForwardedHeaders();
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {
@ -904,7 +1089,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
[InlineData(2, "httpa, httpb, httpc", "httpa", "")] [InlineData(2, "httpa, httpb, httpc", "httpa", "")]
public async Task ForwardersWithDirectOptionsRunsTwice(int limit, string header, string expectedScheme, string remainingHeader) public async Task ForwardersWithDirectOptionsRunsTwice(int limit, string header, string expectedScheme, string remainingHeader)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
var options = new ForwardedHeadersOptions var options = new ForwardedHeadersOptions
@ -917,7 +1106,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
app.UseForwardedHeaders(options); app.UseForwardedHeaders(options);
app.UseForwardedHeaders(options); app.UseForwardedHeaders(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var context = await server.SendAsync(c => var context = await server.SendAsync(c =>
{ {

View File

@ -7,6 +7,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Hosting;
using Xunit; using Xunit;
namespace Microsoft.AspNetCore.HttpOverrides namespace Microsoft.AspNetCore.HttpOverrides
@ -17,7 +18,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
public async Task XHttpMethodOverrideHeaderAvaiableChangesRequestMethod() public async Task XHttpMethodOverrideHeaderAvaiableChangesRequestMethod()
{ {
var assertsExecuted = false; var assertsExecuted = false;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHttpMethodOverride(); app.UseHttpMethodOverride();
@ -28,7 +33,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Post, ""); var req = new HttpRequestMessage(HttpMethod.Post, "");
req.Headers.Add("X-Http-Method-Override", "DELETE"); req.Headers.Add("X-Http-Method-Override", "DELETE");
@ -40,7 +49,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
public async Task XHttpMethodOverrideHeaderUnavaiableDoesntChangeRequestMethod() public async Task XHttpMethodOverrideHeaderUnavaiableDoesntChangeRequestMethod()
{ {
var assertsExecuted = false; var assertsExecuted = false;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHttpMethodOverride(); app.UseHttpMethodOverride();
@ -51,7 +64,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Post, ""); var req = new HttpRequestMessage(HttpMethod.Post, "");
await server.CreateClient().SendAsync(req); await server.CreateClient().SendAsync(req);
@ -62,7 +79,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
public async Task XHttpMethodOverrideFromGetRequestDoesntChangeMethodType() public async Task XHttpMethodOverrideFromGetRequestDoesntChangeMethodType()
{ {
var assertsExecuted = false; var assertsExecuted = false;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHttpMethodOverride(); app.UseHttpMethodOverride();
@ -73,7 +94,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Get, ""); var req = new HttpRequestMessage(HttpMethod.Get, "");
await server.CreateClient().SendAsync(req); await server.CreateClient().SendAsync(req);
@ -85,7 +110,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
public async Task FormFieldAvailableChangesRequestMethod() public async Task FormFieldAvailableChangesRequestMethod()
{ {
var assertsExecuted = false; var assertsExecuted = false;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHttpMethodOverride(new HttpMethodOverrideOptions() app.UseHttpMethodOverride(new HttpMethodOverrideOptions()
@ -99,7 +128,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Post, ""); var req = new HttpRequestMessage(HttpMethod.Post, "");
req.Content = new FormUrlEncodedContent(new Dictionary<string, string>() req.Content = new FormUrlEncodedContent(new Dictionary<string, string>()
@ -116,7 +149,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
public async Task FormFieldUnavailableDoesNotChangeRequestMethod() public async Task FormFieldUnavailableDoesNotChangeRequestMethod()
{ {
var assertsExecuted = false; var assertsExecuted = false;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHttpMethodOverride(new HttpMethodOverrideOptions() app.UseHttpMethodOverride(new HttpMethodOverrideOptions()
@ -130,7 +167,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Post, ""); var req = new HttpRequestMessage(HttpMethod.Post, "");
req.Content = new FormUrlEncodedContent(new Dictionary<string, string>() req.Content = new FormUrlEncodedContent(new Dictionary<string, string>()
@ -146,7 +187,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
public async Task FormFieldEmptyDoesNotChangeRequestMethod() public async Task FormFieldEmptyDoesNotChangeRequestMethod()
{ {
var assertsExecuted = false; var assertsExecuted = false;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseHttpMethodOverride(new HttpMethodOverrideOptions() app.UseHttpMethodOverride(new HttpMethodOverrideOptions()
@ -160,7 +205,11 @@ namespace Microsoft.AspNetCore.HttpOverrides
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Post, ""); var req = new HttpRequestMessage(HttpMethod.Post, "");
req.Content = new FormUrlEncodedContent(new Dictionary<string, string>() req.Content = new FormUrlEncodedContent(new Dictionary<string, string>()

View File

@ -49,9 +49,12 @@ namespace HttpsSample
} }
// Entry point for the application. // Entry point for the application.
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseKestrel( .UseKestrel(
options => options =>
{ {
@ -69,10 +72,11 @@ namespace HttpsSample
factory.SetMinimumLevel(LogLevel.Debug); factory.SetMinimumLevel(LogLevel.Debug);
factory.AddConsole(); factory.AddConsole();
}) })
.UseStartup<Startup>() .UseStartup<Startup>();
})
.Build(); .Build();
host.Run(); return host.RunAsync();
} }
} }
} }

View File

@ -1,4 +1,4 @@
// Copyright (c) .NET Foundation. All rights reserved. // Copyright (c) .NET Foundation. 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;
@ -12,6 +12,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing; using Microsoft.Extensions.Logging.Testing;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
@ -24,7 +25,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
[Fact] [Fact]
public async Task SetOptionsWithDefault_SetsMaxAgeToCorrectValue() public async Task SetOptionsWithDefault_SetsMaxAgeToCorrectValue()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
}) })
@ -36,8 +41,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
return context.Response.WriteAsync("Hello world"); return context.Response.WriteAsync("Hello world");
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
client.BaseAddress = new Uri("https://example.com:5050"); client.BaseAddress = new Uri("https://example.com:5050");
@ -58,10 +66,15 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
[InlineData(50000, true, true, "max-age=50000; includeSubDomains; preload")] [InlineData(50000, true, true, "max-age=50000; includeSubDomains; preload")]
public async Task SetOptionsThroughConfigure_SetsHeaderCorrectly(int maxAge, bool includeSubDomains, bool preload, string expected) public async Task SetOptionsThroughConfigure_SetsHeaderCorrectly(int maxAge, bool includeSubDomains, bool preload, string expected)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.Configure<HstsOptions>(options => { services.Configure<HstsOptions>(options =>
{
options.Preload = preload; options.Preload = preload;
options.IncludeSubDomains = includeSubDomains; options.IncludeSubDomains = includeSubDomains;
options.MaxAge = TimeSpan.FromSeconds(maxAge); options.MaxAge = TimeSpan.FromSeconds(maxAge);
@ -75,8 +88,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
return context.Response.WriteAsync("Hello world"); return context.Response.WriteAsync("Hello world");
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
client.BaseAddress = new Uri("https://example.com:5050"); client.BaseAddress = new Uri("https://example.com:5050");
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -96,10 +112,15 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
[InlineData(50000, true, true, "max-age=50000; includeSubDomains; preload")] [InlineData(50000, true, true, "max-age=50000; includeSubDomains; preload")]
public async Task SetOptionsThroughHelper_SetsHeaderCorrectly(int maxAge, bool includeSubDomains, bool preload, string expected) public async Task SetOptionsThroughHelper_SetsHeaderCorrectly(int maxAge, bool includeSubDomains, bool preload, string expected)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddHsts(options => { services.AddHsts(options =>
{
options.Preload = preload; options.Preload = preload;
options.IncludeSubDomains = includeSubDomains; options.IncludeSubDomains = includeSubDomains;
options.MaxAge = TimeSpan.FromSeconds(maxAge); options.MaxAge = TimeSpan.FromSeconds(maxAge);
@ -113,8 +134,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
return context.Response.WriteAsync("Hello world"); return context.Response.WriteAsync("Hello world");
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
client.BaseAddress = new Uri("https://example.com:5050"); client.BaseAddress = new Uri("https://example.com:5050");
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -131,14 +155,18 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
[InlineData("LOCALHOST")] [InlineData("LOCALHOST")]
[InlineData("127.0.0.1")] [InlineData("127.0.0.1")]
[InlineData("[::1]")] [InlineData("[::1]")]
public async Task DefaultExcludesCommonLocalhostDomains_DoesNotSetHstsHeader(string host) public async Task DefaultExcludesCommonLocalhostDomains_DoesNotSetHstsHeader(string hostUrl)
{ {
var sink = new TestSink( var sink = new TestSink(
TestSink.EnableWithTypeName<HstsMiddleware>, TestSink.EnableWithTypeName<HstsMiddleware>,
TestSink.EnableWithTypeName<HstsMiddleware>); TestSink.EnableWithTypeName<HstsMiddleware>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<ILoggerFactory>(loggerFactory); services.AddSingleton<ILoggerFactory>(loggerFactory);
@ -151,9 +179,13 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
return context.Response.WriteAsync("Hello world"); return context.Response.WriteAsync("Hello world");
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
client.BaseAddress = new Uri($"https://{host}:5050"); client.BaseAddress = new Uri($"https://{hostUrl}:5050");
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
var response = await client.SendAsync(request); var response = await client.SendAsync(request);
@ -166,21 +198,25 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
Assert.Single(logMessages); Assert.Single(logMessages);
var message = logMessages.Single(); var message = logMessages.Single();
Assert.Equal(LogLevel.Debug, message.LogLevel); Assert.Equal(LogLevel.Debug, message.LogLevel);
Assert.Equal($"The host '{host}' is excluded. Skipping HSTS header.", message.State.ToString(), ignoreCase: true); Assert.Equal($"The host '{hostUrl}' is excluded. Skipping HSTS header.", message.State.ToString(), ignoreCase: true);
} }
[Theory] [Theory]
[InlineData("localhost")] [InlineData("localhost")]
[InlineData("127.0.0.1")] [InlineData("127.0.0.1")]
[InlineData("[::1]")] [InlineData("[::1]")]
public async Task AllowLocalhostDomainsIfListIsReset_SetHstsHeader(string host) public async Task AllowLocalhostDomainsIfListIsReset_SetHstsHeader(string hostUrl)
{ {
var sink = new TestSink( var sink = new TestSink(
TestSink.EnableWithTypeName<HstsMiddleware>, TestSink.EnableWithTypeName<HstsMiddleware>,
TestSink.EnableWithTypeName<HstsMiddleware>); TestSink.EnableWithTypeName<HstsMiddleware>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<ILoggerFactory>(loggerFactory); services.AddSingleton<ILoggerFactory>(loggerFactory);
@ -198,9 +234,13 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
return context.Response.WriteAsync("Hello world"); return context.Response.WriteAsync("Hello world");
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
client.BaseAddress = new Uri($"https://{host}:5050"); client.BaseAddress = new Uri($"https://{hostUrl}:5050");
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
var response = await client.SendAsync(request); var response = await client.SendAsync(request);
@ -220,20 +260,25 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
[InlineData("example.com")] [InlineData("example.com")]
[InlineData("Example.com")] [InlineData("Example.com")]
[InlineData("EXAMPLE.COM")] [InlineData("EXAMPLE.COM")]
public async Task AddExcludedDomains_DoesNotAddHstsHeader(string host) public async Task AddExcludedDomains_DoesNotAddHstsHeader(string hostUrl)
{ {
var sink = new TestSink( var sink = new TestSink(
TestSink.EnableWithTypeName<HstsMiddleware>, TestSink.EnableWithTypeName<HstsMiddleware>,
TestSink.EnableWithTypeName<HstsMiddleware>); TestSink.EnableWithTypeName<HstsMiddleware>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<ILoggerFactory>(loggerFactory); services.AddSingleton<ILoggerFactory>(loggerFactory);
services.AddHsts(options => { services.AddHsts(options =>
options.ExcludedHosts.Add(host); {
options.ExcludedHosts.Add(hostUrl);
}); });
}) })
.Configure(app => .Configure(app =>
@ -244,9 +289,13 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
return context.Response.WriteAsync("Hello world"); return context.Response.WriteAsync("Hello world");
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
client.BaseAddress = new Uri($"https://{host}:5050"); client.BaseAddress = new Uri($"https://{hostUrl}:5050");
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
var response = await client.SendAsync(request); var response = await client.SendAsync(request);
@ -259,7 +308,7 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
Assert.Single(logMessages); Assert.Single(logMessages);
var message = logMessages.Single(); var message = logMessages.Single();
Assert.Equal(LogLevel.Debug, message.LogLevel); Assert.Equal(LogLevel.Debug, message.LogLevel);
Assert.Equal($"The host '{host}' is excluded. Skipping HSTS header.", message.State.ToString(), ignoreCase: true); Assert.Equal($"The host '{hostUrl}' is excluded. Skipping HSTS header.", message.State.ToString(), ignoreCase: true);
} }
[Fact] [Fact]
@ -270,7 +319,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
TestSink.EnableWithTypeName<HstsMiddleware>); TestSink.EnableWithTypeName<HstsMiddleware>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<ILoggerFactory>(loggerFactory); services.AddSingleton<ILoggerFactory>(loggerFactory);
@ -283,7 +336,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
return context.Response.WriteAsync("Hello world"); return context.Response.WriteAsync("Hello world");
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
client.BaseAddress = new Uri("http://example.com:5050"); client.BaseAddress = new Uri("http://example.com:5050");
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -309,7 +366,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
TestSink.EnableWithTypeName<HstsMiddleware>); TestSink.EnableWithTypeName<HstsMiddleware>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<ILoggerFactory>(loggerFactory); services.AddSingleton<ILoggerFactory>(loggerFactory);
@ -322,7 +383,10 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
return context.Response.WriteAsync("Hello world"); return context.Response.WriteAsync("Hello world");
}); });
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
client.BaseAddress = new Uri("https://example.com:5050"); client.BaseAddress = new Uri("https://example.com:5050");
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");

View File

@ -1,4 +1,4 @@
// Copyright (c) .NET Foundation. All rights reserved. // Copyright (c) .NET Foundation. 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;
@ -13,6 +13,7 @@ using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
using Xunit; using Xunit;
@ -30,8 +31,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
[InlineData(302, 5050, 2592000, true, true, "max-age=2592000; includeSubDomains; preload", "https://localhost:5050/")] [InlineData(302, 5050, 2592000, true, true, "max-age=2592000; includeSubDomains; preload", "https://localhost:5050/")]
public async Task SetsBothHstsAndHttpsRedirection_RedirectOnFirstRequest_HstsOnSecondRequest(int statusCode, int? tlsPort, int maxAge, bool includeSubDomains, bool preload, string expectedHstsHeader, string expectedUrl) public async Task SetsBothHstsAndHttpsRedirection_RedirectOnFirstRequest_HstsOnSecondRequest(int statusCode, int? tlsPort, int maxAge, bool includeSubDomains, bool preload, string expectedHstsHeader, string expectedUrl)
{ {
using var host = new HostBuilder()
var builder = new WebHostBuilder() .ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.Configure<HttpsRedirectionOptions>(options => services.Configure<HttpsRedirectionOptions>(options =>
@ -56,10 +60,12 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
return context.Response.WriteAsync("Hello world"); return context.Response.WriteAsync("Hello world");
}); });
}); });
}).Build();
var featureCollection = new FeatureCollection(); await host.StartAsync();
featureCollection.Set<IServerAddressesFeature>(new ServerAddressesFeature());
var server = new TestServer(builder, featureCollection); var server = host.GetTestServer();
server.Features.Set<IServerAddressesFeature>(new ServerAddressesFeature());
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");

View File

@ -1,4 +1,4 @@
// Copyright (c) .NET Foundation. All rights reserved. // Copyright (c) .NET Foundation. 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;
@ -8,11 +8,13 @@ using System.Net.Http;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Hosting.Server;
using Microsoft.AspNetCore.Hosting.Server.Features; using Microsoft.AspNetCore.Hosting.Server.Features;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing; using Microsoft.Extensions.Logging.Testing;
using Xunit; using Xunit;
@ -28,7 +30,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>, TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>,
TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>); TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<ILoggerFactory>(loggerFactory); services.AddSingleton<ILoggerFactory>(loggerFactory);
@ -41,8 +47,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
return context.Response.WriteAsync("Hello world"); return context.Response.WriteAsync("Hello world");
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -71,7 +80,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>, TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>,
TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>); TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<ILoggerFactory>(loggerFactory); services.AddSingleton<ILoggerFactory>(loggerFactory);
@ -89,8 +102,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
return context.Response.WriteAsync("Hello world"); return context.Response.WriteAsync("Hello world");
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -120,7 +136,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>, TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>,
TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>); TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<ILoggerFactory>(loggerFactory); services.AddSingleton<ILoggerFactory>(loggerFactory);
@ -138,8 +158,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
return context.Response.WriteAsync("Hello world"); return context.Response.WriteAsync("Hello world");
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -169,7 +192,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
public async Task SetHttpsPortEnvironmentVariableAndServerFeature_ReturnsCorrectStatusCodeOnResponse( public async Task SetHttpsPortEnvironmentVariableAndServerFeature_ReturnsCorrectStatusCodeOnResponse(
int? optionsHttpsPort, string configHttpsPort, string serverAddressFeatureUrl, string expectedUrl) int? optionsHttpsPort, string configHttpsPort, string serverAddressFeatureUrl, string expectedUrl)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddHttpsRedirection(options => services.AddHttpsRedirection(options =>
@ -186,17 +213,18 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
}); });
}); });
builder.UseSetting("HTTPS_PORT", configHttpsPort); webHostBuilder.UseSetting("HTTPS_PORT", configHttpsPort);
}).Build();
var featureCollection = new FeatureCollection(); var server = host.GetTestServer();
featureCollection.Set<IServerAddressesFeature>(new ServerAddressesFeature()); server.Features.Set<IServerAddressesFeature>(new ServerAddressesFeature());
var server = new TestServer(builder, featureCollection);
if (serverAddressFeatureUrl != null) if (serverAddressFeatureUrl != null)
{ {
server.Features.Get<IServerAddressesFeature>().Addresses.Add(serverAddressFeatureUrl); server.Features.Get<IServerAddressesFeature>().Addresses.Add(serverAddressFeatureUrl);
} }
await host.StartAsync();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -213,7 +241,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>, TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>,
TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>); TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<ILoggerFactory>(loggerFactory); services.AddSingleton<ILoggerFactory>(loggerFactory);
@ -226,12 +258,13 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
return context.Response.WriteAsync("Hello world"); return context.Response.WriteAsync("Hello world");
}); });
}); });
}).Build();
var featureCollection = new FeatureCollection(); var server = host.GetTestServer();
featureCollection.Set<IServerAddressesFeature>(new ServerAddressesFeature()); server.Features.Set<IServerAddressesFeature>(new ServerAddressesFeature());
var server = new TestServer(builder, featureCollection);
server.Features.Get<IServerAddressesFeature>().Addresses.Add("https://localhost:5050"); server.Features.Get<IServerAddressesFeature>().Addresses.Add("https://localhost:5050");
await host.StartAsync();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -259,7 +292,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>, TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>,
TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>); TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<ILoggerFactory>(loggerFactory); services.AddSingleton<ILoggerFactory>(loggerFactory);
@ -272,14 +309,16 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
return context.Response.WriteAsync("Hello world"); return context.Response.WriteAsync("Hello world");
}); });
}); });
}).Build();
var featureCollection = new FeatureCollection(); var server = host.GetTestServer();
featureCollection.Set<IServerAddressesFeature>(new ServerAddressesFeature()); server.Features.Set<IServerAddressesFeature>(new ServerAddressesFeature());
var server = new TestServer(builder, featureCollection);
server.Features.Get<IServerAddressesFeature>().Addresses.Add("https://localhost:5050"); server.Features.Get<IServerAddressesFeature>().Addresses.Add("https://localhost:5050");
server.Features.Get<IServerAddressesFeature>().Addresses.Add("https://localhost:5051"); server.Features.Get<IServerAddressesFeature>().Addresses.Add("https://localhost:5051");
await host.StartAsync();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -303,7 +342,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>, TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>,
TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>); TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<ILoggerFactory>(loggerFactory); services.AddSingleton<ILoggerFactory>(loggerFactory);
@ -316,14 +359,15 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
return context.Response.WriteAsync("Hello world"); return context.Response.WriteAsync("Hello world");
}); });
}); });
}).Build();
var featureCollection = new FeatureCollection(); var server = host.GetTestServer();
featureCollection.Set<IServerAddressesFeature>(new ServerAddressesFeature()); server.Features.Set<IServerAddressesFeature>(new ServerAddressesFeature());
var server = new TestServer(builder, featureCollection);
server.Features.Get<IServerAddressesFeature>().Addresses.Add("https://localhost:5050"); server.Features.Get<IServerAddressesFeature>().Addresses.Add("https://localhost:5050");
server.Features.Get<IServerAddressesFeature>().Addresses.Add("https://example.com:5050"); server.Features.Get<IServerAddressesFeature>().Addresses.Add("https://example.com:5050");
await host.StartAsync();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -351,7 +395,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>, TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>,
TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>); TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<ILoggerFactory>(loggerFactory); services.AddSingleton<ILoggerFactory>(loggerFactory);
@ -364,8 +412,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
return context.Response.WriteAsync("Hello world"); return context.Response.WriteAsync("Hello world");
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
var response = await client.SendAsync(request); var response = await client.SendAsync(request);
@ -386,7 +437,11 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>, TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>,
TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>); TestSink.EnableWithTypeName<HttpsRedirectionMiddleware>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<ILoggerFactory>(loggerFactory); services.AddSingleton<ILoggerFactory>(loggerFactory);
@ -399,10 +454,12 @@ namespace Microsoft.AspNetCore.HttpsPolicy.Tests
return context.Response.WriteAsync("Hello world"); return context.Response.WriteAsync("Hello world");
}); });
}); });
}).Build();
var featureCollection = new FeatureCollection(); var server = host.GetTestServer();
featureCollection.Set<IServerAddressesFeature>(null); server.Features.Set<IServerAddressesFeature>(null);
var server = new TestServer(builder, featureCollection);
await host.StartAsync();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");

View File

@ -1,4 +1,4 @@
// Copyright (c) .NET Foundation. All rights reserved. // Copyright (c) .NET Foundation. 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.Collections.Generic; using System.Collections.Generic;
@ -11,6 +11,7 @@ using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.Routing;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Xunit; using Xunit;
namespace Microsoft.AspNetCore.Localization.Routing namespace Microsoft.AspNetCore.Localization.Routing
@ -30,7 +31,11 @@ namespace Microsoft.AspNetCore.Localization.Routing
string expectedCulture, string expectedCulture,
string expectedUICulture) string expectedUICulture)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRouter(routes => app.UseRouter(routes =>
@ -72,8 +77,11 @@ namespace Microsoft.AspNetCore.Localization.Routing
{ {
services.AddRouting(); services.AddRouting();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(requestUrl); var response = await client.GetAsync(requestUrl);
@ -87,7 +95,11 @@ namespace Microsoft.AspNetCore.Localization.Routing
[Fact] [Fact]
public async Task GetDefaultCultureInfo_IfCultureKeysAreMissing() public async Task GetDefaultCultureInfo_IfCultureKeysAreMissing()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions var options = new RequestLocalizationOptions
@ -111,8 +123,11 @@ namespace Microsoft.AspNetCore.Localization.Routing
$"{requestCulture.Culture.Name},{requestCulture.UICulture.Name}"); $"{requestCulture.Culture.Name},{requestCulture.UICulture.Name}");
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/page"); var response = await client.GetAsync("/page");
@ -135,7 +150,11 @@ namespace Microsoft.AspNetCore.Localization.Routing
string expectedCulture, string expectedCulture,
string expectedUICulture) string expectedUICulture)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRouter(routes => app.UseRouter(routes =>
@ -180,8 +199,11 @@ namespace Microsoft.AspNetCore.Localization.Routing
{ {
services.AddRouting(); services.AddRouting();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(requestUrl); var response = await client.GetAsync(requestUrl);

View File

@ -3,12 +3,14 @@
using System; using System;
using System.Globalization; using System.Globalization;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Localization;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@ -134,21 +136,25 @@ $@"<!doctype html>
await context.Response.WriteAsync($" <option value=\"pp-NOTREAL\">Made-up (Not a real anything)</option>"); await context.Response.WriteAsync($" <option value=\"pp-NOTREAL\">Made-up (Not a real anything)</option>");
} }
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var config = new ConfigurationBuilder() var config = new ConfigurationBuilder()
.AddCommandLine(args) .AddCommandLine(args)
.Build(); .Build();
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.ConfigureLogging(factory => factory.AddConsole()) .ConfigureLogging(factory => factory.AddConsole())
.UseKestrel() .UseKestrel()
.UseConfiguration(config) .UseConfiguration(config)
.UseIISIntegration() .UseIISIntegration()
.UseStartup<Startup>() .UseStartup<Startup>();
})
.Build(); .Build();
host.Run(); return host.RunAsync();
} }
} }
} }

View File

@ -9,6 +9,7 @@ using System.Threading.Tasks;
using LocalizationSample; using LocalizationSample;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Hosting;
using Xunit; using Xunit;
namespace Microsoft.AspNetCore.Localization.FunctionalTests namespace Microsoft.AspNetCore.Localization.FunctionalTests
@ -19,8 +20,17 @@ namespace Microsoft.AspNetCore.Localization.FunctionalTests
public async Task LocalizationSampleSmokeTest() public async Task LocalizationSampleSmokeTest()
{ {
// Arrange // Arrange
var webHostBuilder = new WebHostBuilder().UseStartup(typeof(Startup)); using var host = new HostBuilder()
var testHost = new TestServer(webHostBuilder); .ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.UseStartup(typeof(Startup));
}).Build();
await host.StartAsync();
var testHost = host.GetTestServer();
var locale = "fr-FR"; var locale = "fr-FR";
var client = testHost.CreateClient(); var client = testHost.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, "My/Resources"); var request = new HttpRequestMessage(HttpMethod.Get, "My/Resources");

View File

@ -8,6 +8,7 @@ using System.Threading.Tasks;
using LocalizationWebsite; using LocalizationWebsite;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Hosting;
using Xunit; using Xunit;
namespace Microsoft.AspNetCore.Localization.FunctionalTests namespace Microsoft.AspNetCore.Localization.FunctionalTests
@ -97,8 +98,17 @@ namespace Microsoft.AspNetCore.Localization.FunctionalTests
private async Task RunTest(Type startupType, string culture, string expected) private async Task RunTest(Type startupType, string culture, string expected)
{ {
var webHostBuilder = new WebHostBuilder().UseStartup(startupType); using var host = new HostBuilder()
var testHost = new TestServer(webHostBuilder); .ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.UseStartup(startupType);
}).Build();
await host.StartAsync();
var testHost = host.GetTestServer();
var client = testHost.CreateClient(); var client = testHost.CreateClient();
var request = new HttpRequestMessage(); var request = new HttpRequestMessage();

View File

@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Hosting;
using Xunit; using Xunit;
namespace Microsoft.Extensions.Localization namespace Microsoft.Extensions.Localization
@ -17,7 +18,11 @@ namespace Microsoft.Extensions.Localization
[Fact] [Fact]
public async Task GetFallbackLanguage_ReturnsFirstNonNullCultureFromSupportedCultureList() public async Task GetFallbackLanguage_ReturnsFirstNonNullCultureFromSupportedCultureList()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(new RequestLocalizationOptions app.UseRequestLocalization(new RequestLocalizationOptions
@ -37,8 +42,11 @@ namespace Microsoft.Extensions.Localization
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("jp,ar-SA,en-US"); client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("jp,ar-SA,en-US");
@ -51,7 +59,11 @@ namespace Microsoft.Extensions.Localization
[Fact] [Fact]
public async Task GetFallbackLanguage_ReturnsFromSupportedCulture_AcceptLanguageListContainsSupportedCultures() public async Task GetFallbackLanguage_ReturnsFromSupportedCulture_AcceptLanguageListContainsSupportedCultures()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(new RequestLocalizationOptions app.UseRequestLocalization(new RequestLocalizationOptions
@ -71,8 +83,11 @@ namespace Microsoft.Extensions.Localization
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-SA,en-US"); client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-SA,en-US");
@ -84,7 +99,11 @@ namespace Microsoft.Extensions.Localization
[Fact] [Fact]
public async Task GetFallbackLanguage_ReturnsDefault_AcceptLanguageListDoesnotContainSupportedCultures() public async Task GetFallbackLanguage_ReturnsDefault_AcceptLanguageListDoesnotContainSupportedCultures()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(new RequestLocalizationOptions app.UseRequestLocalization(new RequestLocalizationOptions
@ -104,8 +123,11 @@ namespace Microsoft.Extensions.Localization
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-MA,en-US"); client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-MA,en-US");
@ -118,7 +140,11 @@ namespace Microsoft.Extensions.Localization
[Fact] [Fact]
public async Task OmitDefaultRequestCultureShouldNotThrowNullReferenceException_And_ShouldGetTheRightCulture() public async Task OmitDefaultRequestCultureShouldNotThrowNullReferenceException_And_ShouldGetTheRightCulture()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(new RequestLocalizationOptions app.UseRequestLocalization(new RequestLocalizationOptions
@ -143,8 +169,11 @@ namespace Microsoft.Extensions.Localization
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-YE,en-US"); client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-YE,en-US");

View File

@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing; using Microsoft.Extensions.Logging.Testing;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
@ -21,7 +22,11 @@ namespace Microsoft.Extensions.Localization
[Fact] [Fact]
public async Task GetCultureInfoFromPersistentCookie() public async Task GetCultureInfoFromPersistentCookie()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions var options = new RequestLocalizationOptions
@ -51,8 +56,11 @@ namespace Microsoft.Extensions.Localization
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var culture = new CultureInfo("ar-SA"); var culture = new CultureInfo("ar-SA");
@ -67,7 +75,11 @@ namespace Microsoft.Extensions.Localization
[Fact] [Fact]
public async Task GetDefaultCultureInfoIfCultureKeysAreMissingOrInvalid() public async Task GetDefaultCultureInfoIfCultureKeysAreMissingOrInvalid()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions var options = new RequestLocalizationOptions
@ -96,8 +108,11 @@ namespace Microsoft.Extensions.Localization
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
@ -109,7 +124,11 @@ namespace Microsoft.Extensions.Localization
[Fact] [Fact]
public async Task GetDefaultCultureInfoIfCookieDoesNotExist() public async Task GetDefaultCultureInfoIfCookieDoesNotExist()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions var options = new RequestLocalizationOptions
@ -138,8 +157,11 @@ namespace Microsoft.Extensions.Localization
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -153,7 +175,11 @@ namespace Microsoft.Extensions.Localization
TestSink.EnableWithTypeName<RequestLocalizationMiddleware>, TestSink.EnableWithTypeName<RequestLocalizationMiddleware>,
TestSink.EnableWithTypeName<RequestLocalizationMiddleware>); TestSink.EnableWithTypeName<RequestLocalizationMiddleware>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions var options = new RequestLocalizationOptions
@ -180,8 +206,11 @@ namespace Microsoft.Extensions.Localization
{ {
services.AddSingleton(typeof(ILoggerFactory), loggerFactory); services.AddSingleton(typeof(ILoggerFactory), loggerFactory);
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var culture = "??"; var culture = "??";
@ -206,7 +235,11 @@ namespace Microsoft.Extensions.Localization
TestSink.EnableWithTypeName<RequestLocalizationMiddleware>, TestSink.EnableWithTypeName<RequestLocalizationMiddleware>,
TestSink.EnableWithTypeName<RequestLocalizationMiddleware>); TestSink.EnableWithTypeName<RequestLocalizationMiddleware>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions var options = new RequestLocalizationOptions
@ -233,8 +266,11 @@ namespace Microsoft.Extensions.Localization
{ {
services.AddSingleton(typeof(ILoggerFactory), loggerFactory); services.AddSingleton(typeof(ILoggerFactory), loggerFactory);
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var culture = "ar-YE"; var culture = "ar-YE";

View File

@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Hosting;
using Xunit; using Xunit;
namespace Microsoft.Extensions.Localization namespace Microsoft.Extensions.Localization
@ -19,7 +20,11 @@ namespace Microsoft.Extensions.Localization
[Fact] [Fact]
public async Task CustomRequestCultureProviderThatGetsCultureInfoFromUrl() public async Task CustomRequestCultureProviderThatGetsCultureInfoFromUrl()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions var options = new RequestLocalizationOptions
@ -49,8 +54,11 @@ namespace Microsoft.Extensions.Localization
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/ar/page"); var response = await client.GetAsync("/ar/page");

View File

@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Hosting;
using Xunit; using Xunit;
namespace Microsoft.Extensions.Localization namespace Microsoft.Extensions.Localization
@ -17,7 +18,11 @@ namespace Microsoft.Extensions.Localization
[Fact] [Fact]
public async Task GetCultureInfoFromQueryString() public async Task GetCultureInfoFromQueryString()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(new RequestLocalizationOptions app.UseRequestLocalization(new RequestLocalizationOptions
@ -41,8 +46,11 @@ namespace Microsoft.Extensions.Localization
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/page?culture=ar-SA&ui-culture=ar-YE"); var response = await client.GetAsync("/page?culture=ar-SA&ui-culture=ar-YE");
@ -52,7 +60,11 @@ namespace Microsoft.Extensions.Localization
[Fact] [Fact]
public async Task GetDefaultCultureInfoIfCultureKeysAreMissing() public async Task GetDefaultCultureInfoIfCultureKeysAreMissing()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(new RequestLocalizationOptions app.UseRequestLocalization(new RequestLocalizationOptions
@ -68,8 +80,11 @@ namespace Microsoft.Extensions.Localization
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/page"); var response = await client.GetAsync("/page");
@ -79,7 +94,11 @@ namespace Microsoft.Extensions.Localization
[Fact] [Fact]
public async Task GetDefaultCultureInfoIfCultureIsInSupportedCultureList() public async Task GetDefaultCultureInfoIfCultureIsInSupportedCultureList()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(new RequestLocalizationOptions app.UseRequestLocalization(new RequestLocalizationOptions
@ -102,8 +121,11 @@ namespace Microsoft.Extensions.Localization
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/page?culture=ar-XY&ui-culture=ar-SA"); var response = await client.GetAsync("/page?culture=ar-XY&ui-culture=ar-SA");
@ -113,7 +135,11 @@ namespace Microsoft.Extensions.Localization
[Fact] [Fact]
public async Task GetDefaultCultureInfoIfUICultureIsNotInSupportedList() public async Task GetDefaultCultureInfoIfUICultureIsNotInSupportedList()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(new RequestLocalizationOptions app.UseRequestLocalization(new RequestLocalizationOptions
@ -136,8 +162,11 @@ namespace Microsoft.Extensions.Localization
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/page?culture=ar-SA&ui-culture=ar-XY"); var response = await client.GetAsync("/page?culture=ar-SA&ui-culture=ar-XY");
@ -147,7 +176,11 @@ namespace Microsoft.Extensions.Localization
[Fact] [Fact]
public async Task GetSameCultureInfoIfCultureKeyIsMissing() public async Task GetSameCultureInfoIfCultureKeyIsMissing()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(new RequestLocalizationOptions app.UseRequestLocalization(new RequestLocalizationOptions
@ -171,8 +204,11 @@ namespace Microsoft.Extensions.Localization
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/page?ui-culture=ar-SA"); var response = await client.GetAsync("/page?ui-culture=ar-SA");
@ -182,7 +218,11 @@ namespace Microsoft.Extensions.Localization
[Fact] [Fact]
public async Task GetSameCultureInfoIfUICultureKeyIsMissing() public async Task GetSameCultureInfoIfUICultureKeyIsMissing()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(new RequestLocalizationOptions app.UseRequestLocalization(new RequestLocalizationOptions
@ -206,8 +246,11 @@ namespace Microsoft.Extensions.Localization
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/page?culture=ar-SA"); var response = await client.GetAsync("/page?culture=ar-SA");
@ -217,7 +260,11 @@ namespace Microsoft.Extensions.Localization
[Fact] [Fact]
public async Task GetCultureInfoFromQueryStringWithCustomKeys() public async Task GetCultureInfoFromQueryStringWithCustomKeys()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions var options = new RequestLocalizationOptions
@ -246,8 +293,11 @@ namespace Microsoft.Extensions.Localization
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/page?c=ar-SA&uic=ar-YE"); var response = await client.GetAsync("/page?c=ar-SA&uic=ar-YE");
@ -257,7 +307,11 @@ namespace Microsoft.Extensions.Localization
[Fact] [Fact]
public async Task GetTheRightCultureInfoRegardlessOfCultureNameCasing() public async Task GetTheRightCultureInfoRegardlessOfCultureNameCasing()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions var options = new RequestLocalizationOptions
@ -287,8 +341,11 @@ namespace Microsoft.Extensions.Localization
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/page?c=FR&uic=FR"); var response = await client.GetAsync("/page?c=FR&uic=FR");

View File

@ -1,21 +1,26 @@
// Copyright (c) .NET Foundation. All rights reserved. // Copyright (c) .NET Foundation. 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.Threading.Tasks;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
namespace LocalizationWebsite namespace LocalizationWebsite
{ {
public static class Program public static class Program
{ {
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var config = new ConfigurationBuilder() var config = new ConfigurationBuilder()
.AddCommandLine(args) .AddCommandLine(args)
.Build(); .Build();
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.ConfigureLogging((_, factory) => .ConfigureLogging((_, factory) =>
{ {
factory.AddConsole(); factory.AddConsole();
@ -23,10 +28,11 @@ namespace LocalizationWebsite
}) })
.UseKestrel() .UseKestrel()
.UseConfiguration(config) .UseConfiguration(config)
.UseStartup("LocalizationWebsite") .UseStartup("LocalizationWebsite");
})
.Build(); .Build();
host.Run(); return host.RunAsync();
} }
} }
} }

View File

@ -1,10 +1,12 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DiagnosticAdapter; using Microsoft.Extensions.DiagnosticAdapter;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
namespace MiddlewareAnaysisSample namespace MiddlewareAnaysisSample
@ -79,9 +81,12 @@ namespace MiddlewareAnaysisSample
// Note there's always a default 404 middleware at the end of the pipeline. // Note there's always a default 404 middleware at the end of the pipeline.
} }
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.ConfigureLogging((_, factory) => .ConfigureLogging((_, factory) =>
{ {
factory.AddConsole(); factory.AddConsole();
@ -89,10 +94,10 @@ namespace MiddlewareAnaysisSample
}) })
.UseKestrel() .UseKestrel()
.UseIISIntegration() .UseIISIntegration()
.UseStartup<Startup>() .UseStartup<Startup>();
.Build(); }).Build();
host.Run(); return host.RunAsync();
} }
public class TestDiagnosticListener public class TestDiagnosticListener

View File

@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Xunit; using Xunit;
namespace Microsoft.AspNetCore.MiddlewareAnalysis namespace Microsoft.AspNetCore.MiddlewareAnalysis
@ -19,7 +20,11 @@ namespace Microsoft.AspNetCore.MiddlewareAnalysis
{ {
DiagnosticListener diagnosticListener = null; DiagnosticListener diagnosticListener = null;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
diagnosticListener = app.ApplicationServices.GetRequiredService<DiagnosticListener>(); diagnosticListener = app.ApplicationServices.GetRequiredService<DiagnosticListener>();
@ -31,7 +36,11 @@ namespace Microsoft.AspNetCore.MiddlewareAnalysis
}); });
}) })
.ConfigureServices(services => services.AddMiddlewareAnalysis()); .ConfigureServices(services => services.AddMiddlewareAnalysis());
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var listener = new TestDiagnosticListener(); var listener = new TestDiagnosticListener();
diagnosticListener.SubscribeWithAdapter(listener); diagnosticListener.SubscribeWithAdapter(listener);

View File

@ -3,11 +3,13 @@
using System; using System;
using System.IO; using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.NodeServices; using Microsoft.AspNetCore.NodeServices;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
namespace NodeServicesExamples namespace NodeServicesExamples
@ -58,9 +60,12 @@ namespace NodeServicesExamples
} }
#pragma warning restore 0618 #pragma warning restore 0618
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.ConfigureLogging(factory => .ConfigureLogging(factory =>
{ {
factory.AddConsole(); factory.AddConsole();
@ -69,10 +74,10 @@ namespace NodeServicesExamples
.UseContentRoot(Directory.GetCurrentDirectory()) .UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration() .UseIISIntegration()
.UseKestrel() .UseKestrel()
.UseStartup<Startup>() .UseStartup<Startup>();
.Build(); }).Build();
host.Run(); return host.RunAsync();
} }
} }
} }

View File

@ -3,10 +3,12 @@
using System; using System;
using System.IO; using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
namespace ResponseCachingSample namespace ResponseCachingSample
@ -34,16 +36,19 @@ namespace ResponseCachingSample
}); });
} }
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseKestrel() .UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory()) .UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration() .UseIISIntegration()
.UseStartup<Startup>() .UseStartup<Startup>();
.Build(); }).Build();
host.Run(); return host.RunAsync();
} }
} }
} }

View File

@ -22,7 +22,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.SendAsync(TestUtils.CreateRequest(method, "")); var initialResponse = await client.SendAsync(TestUtils.CreateRequest(method, ""));
@ -42,7 +46,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.SendAsync(TestUtils.CreateRequest(method, "")); var initialResponse = await client.SendAsync(TestUtils.CreateRequest(method, ""));
@ -60,7 +68,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.PostAsync("", new StringContent(string.Empty)); var initialResponse = await client.PostAsync("", new StringContent(string.Empty));
@ -78,7 +90,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var subsequentResponse = await client.SendAsync(new HttpRequestMessage(HttpMethod.Head, "")); var subsequentResponse = await client.SendAsync(new HttpRequestMessage(HttpMethod.Head, ""));
@ -96,7 +112,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "")); var initialResponse = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, ""));
@ -116,7 +136,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
@ -145,7 +169,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
@ -174,7 +202,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.SendAsync(TestUtils.CreateRequest(method, "path")); var initialResponse = await client.SendAsync(TestUtils.CreateRequest(method, "path"));
@ -194,7 +226,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.SendAsync(TestUtils.CreateRequest(method, "?Expires=0")); var initialResponse = await client.SendAsync(TestUtils.CreateRequest(method, "?Expires=0"));
@ -214,7 +250,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("abc"); client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("abc");
@ -233,7 +273,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
client.DefaultRequestHeaders.From = "user@example.com"; client.DefaultRequestHeaders.From = "user@example.com";
@ -252,7 +296,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
client.DefaultRequestHeaders.From = "user@example.com"; client.DefaultRequestHeaders.From = "user@example.com";
@ -272,7 +320,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync("?query=value"); var initialResponse = await client.GetAsync("?query=value");
@ -290,7 +342,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync("?querya=valuea&queryb=valueb"); var initialResponse = await client.GetAsync("?querya=valuea&queryb=valueb");
@ -308,7 +364,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync("?querya=valuea&queryb=valueb"); var initialResponse = await client.GetAsync("?querya=valuea&queryb=valueb");
@ -326,7 +386,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync("?QueryA=ValueA&QueryB=ValueB"); var initialResponse = await client.GetAsync("?QueryA=ValueA&QueryB=ValueB");
@ -344,7 +408,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync("?QueryA=ValueA&QueryB=ValueB"); var initialResponse = await client.GetAsync("?QueryA=ValueA&QueryB=ValueB");
@ -362,7 +430,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync("?query=value"); var initialResponse = await client.GetAsync("?query=value");
@ -380,7 +452,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync("?querya=valuea&queryb=valueb"); var initialResponse = await client.GetAsync("?querya=valuea&queryb=valueb");
@ -398,7 +474,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync("?querya=valuea&queryb=valueb"); var initialResponse = await client.GetAsync("?querya=valuea&queryb=valueb");
@ -416,7 +496,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync(""); var initialResponse = await client.GetAsync("");
@ -438,7 +522,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync(""); var initialResponse = await client.GetAsync("");
@ -461,7 +549,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync(""); var initialResponse = await client.GetAsync("");
@ -479,7 +571,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync(""); var initialResponse = await client.GetAsync("");
@ -501,7 +597,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
client.DefaultRequestHeaders.CacheControl = new System.Net.Http.Headers.CacheControlHeaderValue() client.DefaultRequestHeaders.CacheControl = new System.Net.Http.Headers.CacheControlHeaderValue()
@ -523,7 +623,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync(""); var initialResponse = await client.GetAsync("");
@ -546,7 +650,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync("?Expires=90"); var initialResponse = await client.GetAsync("?Expires=90");
@ -567,7 +675,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync(""); var initialResponse = await client.GetAsync("");
@ -591,7 +703,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync("?Expires=90"); var initialResponse = await client.GetAsync("?Expires=90");
@ -612,7 +728,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync(""); var initialResponse = await client.GetAsync("");
@ -634,7 +754,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync(""); var initialResponse = await client.GetAsync("");
@ -655,7 +779,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync(""); var initialResponse = await client.GetAsync("");
@ -676,7 +804,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.GetAsync("/path"); var initialResponse = await client.GetAsync("/path");
@ -694,7 +826,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
client.DefaultRequestHeaders.From = "user@example.com"; client.DefaultRequestHeaders.From = "user@example.com";
@ -716,7 +852,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
client.DefaultRequestHeaders.From = "user@example.com"; client.DefaultRequestHeaders.From = "user@example.com";
@ -747,7 +887,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
client.DefaultRequestHeaders.From = "user@example.com"; client.DefaultRequestHeaders.From = "user@example.com";
@ -778,7 +922,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var builder in builders) foreach (var builder in builders)
{ {
using (var server = new TestServer(builder)) using var host = builder.Build();
await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var initialResponse = await client.SendAsync(TestUtils.CreateRequest("HEAD", "?contentLength=10")); var initialResponse = await client.SendAsync(TestUtils.CreateRequest("HEAD", "?contentLength=10"));

View File

@ -12,7 +12,9 @@ using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Logging.Testing; using Microsoft.Extensions.Logging.Testing;
@ -116,7 +118,7 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
return new ResponseCachingKeyProvider(new DefaultObjectPoolProvider(), Options.Create(options)); return new ResponseCachingKeyProvider(new DefaultObjectPoolProvider(), Options.Create(options));
} }
internal static IEnumerable<IWebHostBuilder> CreateBuildersWithResponseCaching( internal static IEnumerable<IHostBuilder> CreateBuildersWithResponseCaching(
Action<IApplicationBuilder> configureDelegate = null, Action<IApplicationBuilder> configureDelegate = null,
ResponseCachingOptions options = null, ResponseCachingOptions options = null,
Action<HttpContext> contextAction = null) Action<HttpContext> contextAction = null)
@ -141,7 +143,7 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
}); });
} }
private static IEnumerable<IWebHostBuilder> CreateBuildersWithResponseCaching( private static IEnumerable<IHostBuilder> CreateBuildersWithResponseCaching(
Action<IApplicationBuilder> configureDelegate = null, Action<IApplicationBuilder> configureDelegate = null,
ResponseCachingOptions options = null, ResponseCachingOptions options = null,
IEnumerable<RequestDelegate> requestDelegates = null) IEnumerable<RequestDelegate> requestDelegates = null)
@ -162,7 +164,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
foreach (var requestDelegate in requestDelegates) foreach (var requestDelegate in requestDelegates)
{ {
// Test with in memory ResponseCache // Test with in memory ResponseCache
yield return new WebHostBuilder() yield return new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddResponseCaching(responseCachingOptions => services.AddResponseCaching(responseCachingOptions =>
@ -181,6 +187,7 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
app.UseResponseCaching(); app.UseResponseCaching();
app.Run(requestDelegate); app.Run(requestDelegate);
}); });
});
} }
} }

View File

@ -11,6 +11,7 @@ using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.ResponseCompression; using Microsoft.AspNetCore.ResponseCompression;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
namespace ResponseCompressionSample namespace ResponseCompressionSample
@ -71,19 +72,22 @@ namespace ResponseCompressionSample
}); });
} }
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseKestrel() .UseKestrel()
.ConfigureLogging(factory => .ConfigureLogging(factory =>
{ {
factory.AddConsole() factory.AddConsole()
.SetMinimumLevel(LogLevel.Debug); .SetMinimumLevel(LogLevel.Debug);
}) })
.UseStartup<Startup>() .UseStartup<Startup>();
.Build(); }).Build();
host.Run(); return host.RunAsync();
} }
} }
} }

View File

@ -17,6 +17,7 @@ using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.AspNetCore.Testing; using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing; using Microsoft.Extensions.Logging.Testing;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
@ -134,7 +135,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
[Fact] [Fact]
public async Task GZipCompressionProvider_OptionsSetInDI_Compress() public async Task GZipCompressionProvider_OptionsSetInDI_Compress()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.Configure<GzipCompressionProviderOptions>(options => options.Level = CompressionLevel.NoCompression); services.Configure<GzipCompressionProviderOptions>(options => options.Level = CompressionLevel.NoCompression);
@ -150,8 +155,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
return context.Response.WriteAsync(new string('a', 100)); return context.Response.WriteAsync(new string('a', 100));
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -286,7 +294,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
[InlineData("text/plain2")] [InlineData("text/plain2")]
public async Task NoBody_NotCompressed(string contentType) public async Task NoBody_NotCompressed(string contentType)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddResponseCompression(); services.AddResponseCompression();
@ -301,8 +313,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
return Task.FromResult(0); return Task.FromResult(0);
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -413,7 +428,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
TestSink.EnableWithTypeName<ResponseCompressionProvider>); TestSink.EnableWithTypeName<ResponseCompressionProvider>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<ILoggerFactory>(loggerFactory); services.AddSingleton<ILoggerFactory>(loggerFactory);
@ -432,11 +451,12 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
return context.Response.WriteAsync(new string('a', 100)); return context.Response.WriteAsync(new string('a', 100));
}); });
}); });
}).Build();
var server = new TestServer(builder) await host.StartAsync();
{
BaseAddress = new Uri("https://localhost/") var server = host.GetTestServer();
}; server.BaseAddress = new Uri("https://localhost/");
var client = server.CreateClient(); var client = server.CreateClient();
@ -469,7 +489,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
TestSink.EnableWithTypeName<ResponseCompressionProvider>); TestSink.EnableWithTypeName<ResponseCompressionProvider>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<ILoggerFactory>(loggerFactory); services.AddSingleton<ILoggerFactory>(loggerFactory);
@ -490,11 +514,12 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
return context.Response.WriteAsync(new string('a', 100)); return context.Response.WriteAsync(new string('a', 100));
}); });
}); });
}).Build();
var server = new TestServer(builder) await host.StartAsync();
{
BaseAddress = new Uri("https://localhost/") var server = host.GetTestServer();
}; server.BaseAddress = new Uri("https://localhost/");
var client = server.CreateClient(); var client = server.CreateClient();
@ -527,7 +552,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
TestSink.EnableWithTypeName<ResponseCompressionProvider>); TestSink.EnableWithTypeName<ResponseCompressionProvider>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddSingleton<ILoggerFactory>(loggerFactory); services.AddSingleton<ILoggerFactory>(loggerFactory);
@ -548,11 +577,12 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
return context.Response.WriteAsync(new string('a', 100)); return context.Response.WriteAsync(new string('a', 100));
}); });
}); });
}).Build();
var server = new TestServer(builder) await host.StartAsync();
{
BaseAddress = new Uri("https://localhost/") var server = host.GetTestServer();
}; server.BaseAddress = new Uri("https://localhost/");
var client = server.CreateClient(); var client = server.CreateClient();
@ -580,7 +610,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
{ {
var responseReceived = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously); var responseReceived = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddResponseCompression(); services.AddResponseCompression();
@ -597,11 +631,12 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
await context.Response.WriteAsync(new string('a', 100)); await context.Response.WriteAsync(new string('a', 100));
}); });
}); });
}).Build();
var server = new TestServer(builder) await host.StartAsync();
{
AllowSynchronousIO = true // needed for synchronous flush var server = host.GetTestServer();
}; server.AllowSynchronousIO = true; // needed for synchronous flush
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -621,7 +656,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
{ {
var responseReceived = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously); var responseReceived = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddResponseCompression(); services.AddResponseCompression();
@ -638,8 +677,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
await context.Response.WriteAsync(new string('a', 100)); await context.Response.WriteAsync(new string('a', 100));
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -659,7 +701,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
{ {
var responseReceived = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously); var responseReceived = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddResponseCompression(); services.AddResponseCompression();
@ -683,8 +729,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
context.Response.Body.Write(new byte[90], 0, 90); context.Response.Body.Write(new byte[90], 0, 90);
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -711,7 +760,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
{ {
var responseReceived = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously); var responseReceived = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddResponseCompression(); services.AddResponseCompression();
@ -729,8 +782,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
await context.Response.WriteAsync(new string('a', 90)); await context.Response.WriteAsync(new string('a', 90));
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -764,7 +820,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously), new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously),
}; };
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddResponseCompression(); services.AddResponseCompression();
@ -792,8 +852,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
} }
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -827,7 +890,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously), new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously),
}; };
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddResponseCompression(); services.AddResponseCompression();
@ -849,8 +916,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
} }
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -876,7 +946,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
{ {
FakeSendFileFeature fakeSendFile = null; FakeSendFileFeature fakeSendFile = null;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddResponseCompression(); services.AddResponseCompression();
@ -900,8 +974,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
return sendFile.SendFileAsync("testfile1kb.txt", 0, null, CancellationToken.None); return sendFile.SendFileAsync("testfile1kb.txt", 0, null, CancellationToken.None);
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -919,7 +996,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
{ {
FakeSendFileFeature fakeSendFile = null; FakeSendFileFeature fakeSendFile = null;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddResponseCompression(); services.AddResponseCompression();
@ -943,8 +1024,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
return sendFile.SendFileAsync("testfile1kb.txt", 0, null, CancellationToken.None); return sendFile.SendFileAsync("testfile1kb.txt", 0, null, CancellationToken.None);
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -962,7 +1046,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
{ {
FakeSendFileFeature fakeSendFile = null; FakeSendFileFeature fakeSendFile = null;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddResponseCompression(); services.AddResponseCompression();
@ -986,8 +1074,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
await feature.SendFileAsync("testfile1kb.txt", 0, null, CancellationToken.None); await feature.SendFileAsync("testfile1kb.txt", 0, null, CancellationToken.None);
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -1006,7 +1097,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
{ {
var responseReceived = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously); var responseReceived = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddResponseCompression(); services.AddResponseCompression();
@ -1029,8 +1124,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
await context.Response.WriteAsync(new string('a', 90)); await context.Response.WriteAsync(new string('a', 90));
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -1063,7 +1161,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
TestSink.EnableWithTypeName<ResponseCompressionProvider>); TestSink.EnableWithTypeName<ResponseCompressionProvider>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddResponseCompression(configure ?? (_ => { })); services.AddResponseCompression(configure ?? (_ => { }));
@ -1080,8 +1182,11 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
return context.Response.WriteAsync(new string('a', uncompressedBodyLength)); return context.Response.WriteAsync(new string('a', uncompressedBodyLength));
}); });
}); });
}).Build();
var server = new TestServer(builder); await host.StartAsync();
var server = host.GetTestServer();
var client = server.CreateClient(); var client = server.CreateClient();
var request = new HttpRequestMessage(HttpMethod.Get, ""); var request = new HttpRequestMessage(HttpMethod.Get, "");
@ -1090,7 +1195,9 @@ namespace Microsoft.AspNetCore.ResponseCompression.Tests
request.Headers.AcceptEncoding.Add(System.Net.Http.Headers.StringWithQualityHeaderValue.Parse(requestAcceptEncodings[i])); request.Headers.AcceptEncoding.Add(System.Net.Http.Headers.StringWithQualityHeaderValue.Parse(requestAcceptEncodings[i]));
} }
return (await client.SendAsync(request), sink.Writes.ToList()); var response = await client.SendAsync(request);
return (response, sink.Writes.ToList());
} }
private void CheckResponseCompressed(HttpResponseMessage response, int expectedBodyLength, string expectedEncoding) private void CheckResponseCompressed(HttpResponseMessage response, int expectedBodyLength, string expectedEncoding)

View File

@ -3,11 +3,13 @@
using System.IO; using System.IO;
using System.Net; using System.Net;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Rewrite; using Microsoft.AspNetCore.Rewrite;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace RewriteSample namespace RewriteSample
{ {
@ -42,9 +44,12 @@ namespace RewriteSample
}); });
} }
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseKestrel(options => .UseKestrel(options =>
{ {
options.Listen(IPAddress.Loopback, 5000); options.Listen(IPAddress.Loopback, 5000);
@ -55,10 +60,10 @@ namespace RewriteSample
}); });
}) })
.UseStartup<Startup>() .UseStartup<Startup>()
.UseContentRoot(Directory.GetCurrentDirectory()) .UseContentRoot(Directory.GetCurrentDirectory());
.Build(); }).Build();
host.Run(); return host.RunAsync();
} }
} }
} }

View File

@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Hosting;
using Xunit; using Xunit;
namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
@ -19,13 +20,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
public async Task Invoke_RewritePathWhenMatching() public async Task Invoke_RewritePathWhenMatching()
{ {
var options = new RewriteOptions().AddApacheModRewrite(new StringReader("RewriteRule /hey/(.*) /$1 ")); var options = new RewriteOptions().AddApacheModRewrite(new StringReader("RewriteRule /hey/(.*) /$1 "));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.Path)); app.Run(context => context.Response.WriteAsync(context.Request.Path));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync("/hey/hello"); var response = await server.CreateClient().GetStringAsync("/hey/hello");
@ -37,13 +46,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
{ {
var options = new RewriteOptions().AddApacheModRewrite(new StringReader("RewriteRule /hey/(.*) /$1 [L]")) var options = new RewriteOptions().AddApacheModRewrite(new StringReader("RewriteRule /hey/(.*) /$1 [L]"))
.AddApacheModRewrite(new StringReader("RewriteRule /hello /what")); .AddApacheModRewrite(new StringReader("RewriteRule /hello /what"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.Path)); app.Run(context => context.Response.WriteAsync(context.Request.Path));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync("/hey/hello"); var response = await server.CreateClient().GetStringAsync("/hey/hello");
@ -55,13 +72,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
{ {
var options = new RewriteOptions().AddApacheModRewrite(new StringReader("RewriteRule /hey/(.*) /$1")) var options = new RewriteOptions().AddApacheModRewrite(new StringReader("RewriteRule /hey/(.*) /$1"))
.AddApacheModRewrite(new StringReader("RewriteRule /hello /what")); .AddApacheModRewrite(new StringReader("RewriteRule /hello /what"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.Path)); app.Run(context => context.Response.WriteAsync(context.Request.Path));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync("/hey/hello"); var response = await server.CreateClient().GetStringAsync("/hey/hello");
@ -72,13 +97,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
public async Task Invoke_ShouldIgnoreComments() public async Task Invoke_ShouldIgnoreComments()
{ {
var options = new RewriteOptions().AddApacheModRewrite(new StringReader("#RewriteRule ^/hey/(.*) /$1 ")); var options = new RewriteOptions().AddApacheModRewrite(new StringReader("#RewriteRule ^/hey/(.*) /$1 "));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.Path)); app.Run(context => context.Response.WriteAsync(context.Request.Path));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync("/hey/hello"); var response = await server.CreateClient().GetStringAsync("/hey/hello");
@ -89,13 +122,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
public async Task Invoke_ShouldRewriteHomepage() public async Task Invoke_ShouldRewriteHomepage()
{ {
var options = new RewriteOptions().AddApacheModRewrite(new StringReader(@"RewriteRule ^/$ /homepage.html")); var options = new RewriteOptions().AddApacheModRewrite(new StringReader(@"RewriteRule ^/$ /homepage.html"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.Path)); app.Run(context => context.Response.WriteAsync(context.Request.Path));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync("http://www.foo.org/"); var response = await server.CreateClient().GetStringAsync("http://www.foo.org/");
@ -106,13 +147,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
public async Task Invoke_ShouldIgnorePorts() public async Task Invoke_ShouldIgnorePorts()
{ {
var options = new RewriteOptions().AddApacheModRewrite(new StringReader(@"RewriteRule ^/$ /homepage.html")); var options = new RewriteOptions().AddApacheModRewrite(new StringReader(@"RewriteRule ^/$ /homepage.html"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.Path)); app.Run(context => context.Response.WriteAsync(context.Request.Path));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync("http://www.foo.org:42/"); var response = await server.CreateClient().GetStringAsync("http://www.foo.org:42/");
@ -123,13 +172,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
public async Task Invoke_HandleNegatedRewriteRules() public async Task Invoke_HandleNegatedRewriteRules()
{ {
var options = new RewriteOptions().AddApacheModRewrite(new StringReader(@"RewriteRule !^/$ /homepage.html")); var options = new RewriteOptions().AddApacheModRewrite(new StringReader(@"RewriteRule !^/$ /homepage.html"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.Path)); app.Run(context => context.Response.WriteAsync(context.Request.Path));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync("http://www.foo.org/"); var response = await server.CreateClient().GetStringAsync("http://www.foo.org/");
@ -142,13 +199,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
public async Task Invoke_BackReferencesShouldBeApplied(string url, string rule, string expected) public async Task Invoke_BackReferencesShouldBeApplied(string url, string rule, string expected)
{ {
var options = new RewriteOptions().AddApacheModRewrite(new StringReader(rule)); var options = new RewriteOptions().AddApacheModRewrite(new StringReader(rule));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.Path)); app.Run(context => context.Response.WriteAsync(context.Request.Path));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync(url); var response = await server.CreateClient().GetStringAsync(url);
@ -165,13 +230,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
public async Task Invoke_ShouldHandleFlagNoCase(string url, string rule, string expected) public async Task Invoke_ShouldHandleFlagNoCase(string url, string rule, string expected)
{ {
var options = new RewriteOptions().AddApacheModRewrite(new StringReader(rule)); var options = new RewriteOptions().AddApacheModRewrite(new StringReader(rule));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.Path)); app.Run(context => context.Response.WriteAsync(context.Request.Path));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync(url); var response = await server.CreateClient().GetStringAsync(url);
@ -183,13 +256,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
{ {
var options = new RewriteOptions() var options = new RewriteOptions()
.AddApacheModRewrite(new StringReader(@"RewriteRule (.+) http://www.example.com$1/")); .AddApacheModRewrite(new StringReader(@"RewriteRule (.+) http://www.example.com$1/"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.Path)); app.Run(context => context.Response.WriteAsync(context.Request.Path));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync("http://www.foo.org/blog/2016-jun"); var response = await server.CreateClient().GetStringAsync("http://www.foo.org/blog/2016-jun");
@ -201,13 +282,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
{ {
var options = new RewriteOptions() var options = new RewriteOptions()
.AddApacheModRewrite(new StringReader(@"RewriteRule (.+) http://www.example.com$1/")); .AddApacheModRewrite(new StringReader(@"RewriteRule (.+) http://www.example.com$1/"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.Scheme + "://" + context.Request.Host.Host + context.Request.Path + context.Request.QueryString)); app.Run(context => context.Response.WriteAsync(context.Request.Scheme + "://" + context.Request.Host.Host + context.Request.Path + context.Request.QueryString));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync("http://www.foo.org/blog/2016-jun"); var response = await server.CreateClient().GetStringAsync("http://www.foo.org/blog/2016-jun");
@ -219,13 +308,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
{ {
var options = new RewriteOptions() var options = new RewriteOptions()
.AddApacheModRewrite(new StringReader(@"RewriteRule (.+) http://www.example.com$1/")); .AddApacheModRewrite(new StringReader(@"RewriteRule (.+) http://www.example.com$1/"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.Scheme + "://" + context.Request.Host.Host + context.Request.Path + context.Request.QueryString)); app.Run(context => context.Response.WriteAsync(context.Request.Scheme + "://" + context.Request.Host.Host + context.Request.Path + context.Request.QueryString));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync("http://www.foo.org/blog/2016-jun"); var response = await server.CreateClient().GetStringAsync("http://www.foo.org/blog/2016-jun");
@ -238,13 +335,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
{ {
var options = new RewriteOptions() var options = new RewriteOptions()
.AddApacheModRewrite(new StringReader("RewriteCond %{REQUEST_URI} /foo/ \nRewriteCond %{HTTPS} !on \nRewriteRule ^(.*)$ https://www.example.com$1 [R=301,L]")); .AddApacheModRewrite(new StringReader("RewriteCond %{REQUEST_URI} /foo/ \nRewriteCond %{HTTPS} !on \nRewriteRule ^(.*)$ https://www.example.com$1 [R=301,L]"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.Scheme + "://" + context.Request.Host.Host + context.Request.Path + context.Request.QueryString)); app.Run(context => context.Response.WriteAsync(context.Request.Scheme + "://" + context.Request.Host.Host + context.Request.Path + context.Request.QueryString));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(input); var response = await server.CreateClient().GetAsync(input);
@ -258,13 +363,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
{ {
var options = new RewriteOptions() var options = new RewriteOptions()
.AddApacheModRewrite(new StringReader("RewriteRule ^(.*)$ $1 [R=301,L]")); .AddApacheModRewrite(new StringReader("RewriteRule ^(.*)$ $1 [R=301,L]"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.Scheme + "://" + context.Request.Host.Host + context.Request.Path + context.Request.QueryString)); app.Run(context => context.Response.WriteAsync(context.Request.Scheme + "://" + context.Request.Host.Host + context.Request.Path + context.Request.QueryString));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(input); var response = await server.CreateClient().GetAsync(input);
@ -278,13 +391,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
{ {
var options = new RewriteOptions() var options = new RewriteOptions()
.AddApacheModRewrite(new StringReader("RewriteRule ^(.*)$ $1 [L]")); .AddApacheModRewrite(new StringReader("RewriteRule ^(.*)$ $1 [L]"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.Path + context.Request.QueryString)); app.Run(context => context.Response.WriteAsync(context.Request.Path + context.Request.QueryString));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync(input); var response = await server.CreateClient().GetStringAsync(input);
Assert.Equal("/", response); Assert.Equal("/", response);
@ -294,7 +415,11 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
public async Task Invoke_CaptureEmptyStringInRegexAssertLocationHeaderContainsPathBase() public async Task Invoke_CaptureEmptyStringInRegexAssertLocationHeaderContainsPathBase()
{ {
var options = new RewriteOptions().AddApacheModRewrite(new StringReader(@"RewriteRule ^(.*)$ $1 [R=301,L]")); var options = new RewriteOptions().AddApacheModRewrite(new StringReader(@"RewriteRule ^(.*)$ $1 [R=301,L]"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
@ -302,7 +427,12 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
context.Request.Path + context.Request.Path +
context.Request.QueryString)); context.Request.QueryString));
}); });
var server = new TestServer(builder) { BaseAddress = new Uri("http://localhost:5000/foo") }; }).Build();
await host.StartAsync();
var server = host.GetTestServer();
server.BaseAddress = new Uri("http://localhost:5000/foo");
var response = await server.CreateClient().GetAsync(""); var response = await server.CreateClient().GetAsync("");
@ -315,15 +445,24 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
var options = new RewriteOptions().AddApacheModRewrite(new StringReader(@"RewriteCond %{REQUEST_URI} /home var options = new RewriteOptions().AddApacheModRewrite(new StringReader(@"RewriteCond %{REQUEST_URI} /home
RewriteCond %{QUERY_STRING} report_id=(.+) RewriteCond %{QUERY_STRING} report_id=(.+)
RewriteRule (.*) http://localhost:80/home/report/%1 [R=301,L,QSD]")); RewriteRule (.*) http://localhost:80/home/report/%1 [R=301,L,QSD]"));
var builder = new WebHostBuilder().Configure(app => using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync( app.Run(context => context.Response.WriteAsync(
context.Request.Path + context.Request.Path +
context.Request.QueryString)); context.Request.QueryString));
}); });
}).Build();
var server = new TestServer(builder) { BaseAddress = new Uri("http://localhost:5000/foo") }; await host.StartAsync();
var server = host.GetTestServer();
server.BaseAddress = new Uri("http://localhost:5000/foo");
var response = await server.CreateClient().GetAsync("/home?report_id=123"); var response = await server.CreateClient().GetAsync("/home?report_id=123");
Assert.Equal("http://localhost:80/home/report/123", response.Headers.Location.OriginalString); Assert.Equal("http://localhost:80/home/report/123", response.Headers.Location.OriginalString);

View File

@ -15,6 +15,7 @@ using Microsoft.AspNetCore.Rewrite.IISUrlRewrite;
using Microsoft.AspNetCore.Rewrite.UrlActions; using Microsoft.AspNetCore.Rewrite.UrlActions;
using Microsoft.AspNetCore.Rewrite.UrlMatches; using Microsoft.AspNetCore.Rewrite.UrlMatches;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Hosting;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
using Xunit; using Xunit;
@ -33,13 +34,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rule> </rule>
</rules> </rules>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Response.Headers[HeaderNames.Location])); app.Run(context => context.Response.WriteAsync(context.Response.Headers[HeaderNames.Location]));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("article/10/hey"); var response = await server.CreateClient().GetAsync("article/10/hey");
@ -57,13 +66,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rule> </rule>
</rules> </rules>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.Path + context.Request.QueryString)); app.Run(context => context.Response.WriteAsync(context.Request.Path + context.Request.QueryString));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync("/article/10/hey"); var response = await server.CreateClient().GetStringAsync("/article/10/hey");
@ -85,13 +102,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rule> </rule>
</rules> </rules>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.Path + context.Request.QueryString)); app.Run(context => context.Response.WriteAsync(context.Request.Path + context.Request.QueryString));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync("page.asp?p2=321&p1=123"); var response = await server.CreateClient().GetStringAsync("page.asp?p2=321&p1=123");
@ -109,13 +134,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rule> </rule>
</rules> </rules>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Response.Headers[HeaderNames.Location])); app.Run(context => context.Response.WriteAsync(context.Response.Headers[HeaderNames.Location]));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("HElLo"); var response = await server.CreateClient().GetAsync("HElLo");
@ -137,12 +170,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rule> </rule>
</rules> </rules>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("hey/hello/"); var response = await server.CreateClient().GetAsync("hey/hello/");
@ -164,12 +205,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rule> </rule>
</rules> </rules>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("hey/hello"); var response = await server.CreateClient().GetAsync("hey/hello");
@ -190,12 +239,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rule> </rule>
</rules> </rules>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(new Uri("http://example.com")); var response = await server.CreateClient().GetAsync(new Uri("http://example.com"));
@ -216,7 +273,11 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rule> </rule>
</rules> </rules>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
@ -227,7 +288,11 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
context.Request.Path + context.Request.Path +
context.Request.QueryString)); context.Request.QueryString));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync(new Uri("http://example.com")); var response = await server.CreateClient().GetStringAsync(new Uri("http://example.com"));
@ -245,7 +310,11 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rule> </rule>
</rules> </rules>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
@ -256,7 +325,11 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
context.Request.Path + context.Request.Path +
context.Request.QueryString)); context.Request.QueryString));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync(new Uri("http://example.com/")); var response = await server.CreateClient().GetStringAsync(new Uri("http://example.com/"));
@ -274,7 +347,11 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rule> </rule>
</rules> </rules>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
@ -285,7 +362,11 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
context.Request.Path + context.Request.Path +
context.Request.QueryString)); context.Request.QueryString));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(new Uri("http://example.com/")); var response = await server.CreateClient().GetAsync(new Uri("http://example.com/"));
@ -303,7 +384,11 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rule> </rule>
</rules> </rules>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
@ -311,7 +396,11 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
context.Request.Path + context.Request.Path +
context.Request.QueryString)); context.Request.QueryString));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync(new Uri("http://example.com/")); var response = await server.CreateClient().GetStringAsync(new Uri("http://example.com/"));
@ -329,7 +418,11 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rule> </rule>
</rules> </rules>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
@ -337,7 +430,12 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
context.Request.Path + context.Request.Path +
context.Request.QueryString)); context.Request.QueryString));
}); });
var server = new TestServer(builder) { BaseAddress = new Uri("http://localhost:5000/foo") }; }).Build();
await host.StartAsync();
var server = host.GetTestServer();
server.BaseAddress = new Uri("http://localhost:5000/foo");
var response = await server.CreateClient().GetAsync(""); var response = await server.CreateClient().GetAsync("");
@ -362,12 +460,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rule> </rule>
</rules> </rules>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("hey/hello"); var response = await server.CreateClient().GetAsync("hey/hello");
@ -390,12 +496,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rule> </rule>
</rules> </rules>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("article/23?p1=123&p2=abc"); var response = await server.CreateClient().GetAsync("article/23?p1=123&p2=abc");
@ -418,12 +532,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rule> </rule>
</rules> </rules>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("article/23?p1=123&p2=abc"); var response = await server.CreateClient().GetAsync("article/23?p1=123&p2=abc");
@ -447,12 +569,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rule> </rule>
</rules> </rules>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var ex = await Assert.ThrowsAsync<IndexOutOfRangeException>(() => server.CreateClient().GetAsync("article/23?p1=123&p2=abc")); var ex = await Assert.ThrowsAsync<IndexOutOfRangeException>(() => server.CreateClient().GetAsync("article/23?p1=123&p2=abc"));
@ -475,13 +605,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</globalRules> </globalRules>
</rewrite>"; </rewrite>";
var options = new RewriteOptions().AddIISUrlRewrite(new StringReader(xml)); var options = new RewriteOptions().AddIISUrlRewrite(new StringReader(xml));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.GetEncodedUrl())); app.Run(context => context.Response.WriteAsync(context.Request.GetEncodedUrl()));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
// act // act
var response = await server.CreateClient().GetStringAsync($"http://localhost/{Guid.NewGuid()}/foo/bar"); var response = await server.CreateClient().GetStringAsync($"http://localhost/{Guid.NewGuid()}/foo/bar");
@ -512,13 +650,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rewriteMap> </rewriteMap>
</rewriteMaps> </rewriteMaps>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.GetEncodedUrl())); app.Run(context => context.Response.WriteAsync(context.Request.GetEncodedUrl()));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync(new Uri(requestUri)); var response = await server.CreateClient().GetStringAsync(new Uri(requestUri));
@ -536,12 +682,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
</rule> </rule>
</rules> </rules>
</rewrite>")); </rewrite>"));
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("article/10/hey"); var response = await server.CreateClient().GetAsync("article/10/hey");
var content = await response.Content.ReadAsStringAsync(); var content = await response.Content.ReadAsStringAsync();
@ -583,13 +737,21 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.UrlRewrite
ruleBuilder.AddUrlAction(action); ruleBuilder.AddUrlAction(action);
var options = new RewriteOptions().Add(ruleBuilder.Build()); var options = new RewriteOptions().Add(ruleBuilder.Build());
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
app.Run(context => context.Response.WriteAsync(context.Request.GetEncodedUrl())); app.Run(context => context.Response.WriteAsync(context.Request.GetEncodedUrl()));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
// act // act
var response = await server.CreateClient().GetStringAsync("http://localhost/foo/bar"); var response = await server.CreateClient().GetStringAsync("http://localhost/foo/bar");

View File

@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Xunit; using Xunit;
namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
@ -18,7 +19,11 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckRewritePath() public async Task CheckRewritePath()
{ {
var options = new RewriteOptions().AddRewrite("(.*)", "http://example.com/$1", skipRemainingRules: false); var options = new RewriteOptions().AddRewrite("(.*)", "http://example.com/$1", skipRemainingRules: false);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
@ -29,7 +34,11 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
context.Request.Path + context.Request.Path +
context.Request.QueryString)); context.Request.QueryString));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync("foo"); var response = await server.CreateClient().GetStringAsync("foo");
@ -40,12 +49,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckRedirectPath() public async Task CheckRedirectPath()
{ {
var options = new RewriteOptions().AddRedirect("(.*)", "http://example.com/$1", statusCode: StatusCodes.Status301MovedPermanently); var options = new RewriteOptions().AddRedirect("(.*)", "http://example.com/$1", statusCode: StatusCodes.Status301MovedPermanently);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("foo"); var response = await server.CreateClient().GetAsync("foo");
@ -55,7 +72,11 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
[Fact] [Fact]
public async Task RewriteRulesCanComeFromConfigureOptions() public async Task RewriteRulesCanComeFromConfigureOptions()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.Configure<RewriteOptions>(options => services.Configure<RewriteOptions>(options =>
@ -67,7 +88,11 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
{ {
app.UseRewriter(); app.UseRewriter();
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("foo"); var response = await server.CreateClient().GetAsync("foo");
@ -78,12 +103,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckRedirectPathWithQueryString() public async Task CheckRedirectPathWithQueryString()
{ {
var options = new RewriteOptions().AddRedirect("(.*)", "http://example.com/$1", statusCode: StatusCodes.Status301MovedPermanently); var options = new RewriteOptions().AddRedirect("(.*)", "http://example.com/$1", statusCode: StatusCodes.Status301MovedPermanently);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("foo?bar=1"); var response = await server.CreateClient().GetAsync("foo?bar=1");
@ -98,12 +131,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckRedirectToHttps(int statusCode) public async Task CheckRedirectToHttps(int statusCode)
{ {
var options = new RewriteOptions().AddRedirectToHttps(statusCode: statusCode); var options = new RewriteOptions().AddRedirectToHttps(statusCode: statusCode);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(new Uri("http://example.com")); var response = await server.CreateClient().GetAsync(new Uri("http://example.com"));
@ -115,12 +156,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckPermanentRedirectToHttps() public async Task CheckPermanentRedirectToHttps()
{ {
var options = new RewriteOptions().AddRedirectToHttpsPermanent(); var options = new RewriteOptions().AddRedirectToHttpsPermanent();
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(new Uri("http://example.com")); var response = await server.CreateClient().GetAsync(new Uri("http://example.com"));
@ -134,12 +183,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckRedirectToHttpsWithSslPort(int sslPort, string expected) public async Task CheckRedirectToHttpsWithSslPort(int sslPort, string expected)
{ {
var options = new RewriteOptions().AddRedirectToHttps(statusCode: StatusCodes.Status301MovedPermanently, sslPort: sslPort); var options = new RewriteOptions().AddRedirectToHttps(statusCode: StatusCodes.Status301MovedPermanently, sslPort: sslPort);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(new Uri("http://example.com")); var response = await server.CreateClient().GetAsync(new Uri("http://example.com"));
@ -155,12 +212,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckRedirectToWwwWithStatusCode(int statusCode) public async Task CheckRedirectToWwwWithStatusCode(int statusCode)
{ {
var options = new RewriteOptions().AddRedirectToWww(statusCode: statusCode); var options = new RewriteOptions().AddRedirectToWww(statusCode: statusCode);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(new Uri("https://example.com")); var response = await server.CreateClient().GetAsync(new Uri("https://example.com"));
@ -176,12 +241,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckRedirectToWww(string requestUri, string redirectUri) public async Task CheckRedirectToWww(string requestUri, string redirectUri)
{ {
var options = new RewriteOptions().AddRedirectToWww(); var options = new RewriteOptions().AddRedirectToWww();
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(new Uri(requestUri)); var response = await server.CreateClient().GetAsync(new Uri(requestUri));
@ -193,12 +266,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckPermanentRedirectToWww() public async Task CheckPermanentRedirectToWww()
{ {
var options = new RewriteOptions().AddRedirectToWwwPermanent(); var options = new RewriteOptions().AddRedirectToWwwPermanent();
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(new Uri("https://example.com")); var response = await server.CreateClient().GetAsync(new Uri("https://example.com"));
@ -220,12 +301,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckNoRedirectToWww(string requestUri) public async Task CheckNoRedirectToWww(string requestUri)
{ {
var options = new RewriteOptions().AddRedirectToWww(); var options = new RewriteOptions().AddRedirectToWww();
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(new Uri(requestUri)); var response = await server.CreateClient().GetAsync(new Uri(requestUri));
@ -240,12 +329,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckRedirectToNonWwwWithStatusCode(int statusCode) public async Task CheckRedirectToNonWwwWithStatusCode(int statusCode)
{ {
var options = new RewriteOptions().AddRedirectToNonWww(statusCode: statusCode); var options = new RewriteOptions().AddRedirectToNonWww(statusCode: statusCode);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(new Uri("https://www.example.com")); var response = await server.CreateClient().GetAsync(new Uri("https://www.example.com"));
@ -261,12 +358,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckRedirectToNonWww(string requestUri, string redirectUri) public async Task CheckRedirectToNonWww(string requestUri, string redirectUri)
{ {
var options = new RewriteOptions().AddRedirectToNonWww(); var options = new RewriteOptions().AddRedirectToNonWww();
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(new Uri(requestUri)); var response = await server.CreateClient().GetAsync(new Uri(requestUri));
@ -278,12 +383,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckPermanentRedirectToNonWww() public async Task CheckPermanentRedirectToNonWww()
{ {
var options = new RewriteOptions().AddRedirectToNonWwwPermanent(); var options = new RewriteOptions().AddRedirectToNonWwwPermanent();
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(new Uri("https://www.example.com")); var response = await server.CreateClient().GetAsync(new Uri("https://www.example.com"));
@ -295,12 +408,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckIfEmptyStringRedirectCorrectly() public async Task CheckIfEmptyStringRedirectCorrectly()
{ {
var options = new RewriteOptions().AddRedirect("(.*)", "$1", statusCode: StatusCodes.Status301MovedPermanently); var options = new RewriteOptions().AddRedirect("(.*)", "$1", statusCode: StatusCodes.Status301MovedPermanently);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(""); var response = await server.CreateClient().GetAsync("");
Assert.Equal("/", response.Headers.Location.OriginalString); Assert.Equal("/", response.Headers.Location.OriginalString);
@ -310,7 +431,11 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckIfEmptyStringRewriteCorrectly() public async Task CheckIfEmptyStringRewriteCorrectly()
{ {
var options = new RewriteOptions().AddRewrite("(.*)", "$1", skipRemainingRules: false); var options = new RewriteOptions().AddRewrite("(.*)", "$1", skipRemainingRules: false);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
@ -318,7 +443,11 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
context.Request.Path + context.Request.Path +
context.Request.QueryString)); context.Request.QueryString));
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetStringAsync(""); var response = await server.CreateClient().GetStringAsync("");
@ -329,7 +458,11 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task SettingPathBase() public async Task SettingPathBase()
{ {
var options = new RewriteOptions().AddRedirect("(.*)", "$1"); var options = new RewriteOptions().AddRedirect("(.*)", "$1");
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
@ -337,7 +470,12 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
context.Request.Path + context.Request.Path +
context.Request.QueryString)); context.Request.QueryString));
}); });
var server = new TestServer(builder) { BaseAddress = new Uri("http://localhost:5000/foo") }; }).Build();
await host.StartAsync();
var server = host.GetTestServer();
server.BaseAddress = new Uri("http://localhost:5000/foo");
var response = await server.CreateClient().GetAsync(""); var response = await server.CreateClient().GetAsync("");
@ -353,12 +491,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckNoRedirectToWwwInNonWhitelistedDomains(string requestUri) public async Task CheckNoRedirectToWwwInNonWhitelistedDomains(string requestUri)
{ {
var options = new RewriteOptions().AddRedirectToWww("example2.com"); var options = new RewriteOptions().AddRedirectToWww("example2.com");
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(new Uri(requestUri)); var response = await server.CreateClient().GetAsync(new Uri(requestUri));
@ -373,12 +519,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckRedirectToWwwInWhitelistedDomains(string requestUri, string redirectUri) public async Task CheckRedirectToWwwInWhitelistedDomains(string requestUri, string redirectUri)
{ {
var options = new RewriteOptions().AddRedirectToWww("example.com"); var options = new RewriteOptions().AddRedirectToWww("example.com");
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(new Uri(requestUri)); var response = await server.CreateClient().GetAsync(new Uri(requestUri));
@ -390,12 +544,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckPermanentRedirectToWwwInWhitelistedDomains() public async Task CheckPermanentRedirectToWwwInWhitelistedDomains()
{ {
var options = new RewriteOptions().AddRedirectToWwwPermanent("example.com"); var options = new RewriteOptions().AddRedirectToWwwPermanent("example.com");
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(new Uri("https://example.com")); var response = await server.CreateClient().GetAsync(new Uri("https://example.com"));
@ -411,12 +573,20 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.CodeRules
public async Task CheckRedirectToWwwWithStatusCodeInWhitelistedDomains(int statusCode) public async Task CheckRedirectToWwwWithStatusCodeInWhitelistedDomains(int statusCode)
{ {
var options = new RewriteOptions().AddRedirectToWww(statusCode: statusCode, "example.com"); var options = new RewriteOptions().AddRedirectToWww(statusCode: statusCode, "example.com");
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseRewriter(options); app.UseRewriter(options);
}); });
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(new Uri("https://example.com")); var response = await server.CreateClient().GetAsync(new Uri("https://example.com"));

View File

@ -2,10 +2,12 @@
// 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;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
namespace SessionSample namespace SessionSample
@ -81,16 +83,19 @@ namespace SessionSample
}); });
} }
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.ConfigureLogging(factory => factory.AddConsole()) .ConfigureLogging(factory => factory.AddConsole())
.UseKestrel() .UseKestrel()
.UseIISIntegration() .UseIISIntegration()
.UseStartup<Startup>() .UseStartup<Startup>();
.Build(); }).Build();
host.Run(); return host.RunAsync();
} }
} }
} }

View File

@ -14,6 +14,7 @@ using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Caching.Distributed; using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Internal; using Microsoft.Extensions.Internal;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Abstractions;
@ -29,7 +30,11 @@ namespace Microsoft.AspNetCore.Session
[Fact] [Fact]
public async Task ReadingEmptySessionDoesNotCreateCookie() public async Task ReadingEmptySessionDoesNotCreateCookie()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(); app.UseSession();
@ -45,8 +50,11 @@ namespace Microsoft.AspNetCore.Session
services.AddDistributedMemoryCache(); services.AddDistributedMemoryCache();
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -58,7 +66,11 @@ namespace Microsoft.AspNetCore.Session
[Fact] [Fact]
public async Task SettingAValueCausesTheCookieToBeCreated() public async Task SettingAValueCausesTheCookieToBeCreated()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(); app.UseSession();
@ -75,8 +87,11 @@ namespace Microsoft.AspNetCore.Session
services.AddDistributedMemoryCache(); services.AddDistributedMemoryCache();
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -99,7 +114,11 @@ namespace Microsoft.AspNetCore.Session
string requestUri, string requestUri,
bool shouldBeSecureOnly) bool shouldBeSecureOnly)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(new SessionOptions app.UseSession(new SessionOptions
@ -123,8 +142,11 @@ namespace Microsoft.AspNetCore.Session
services.AddDistributedMemoryCache(); services.AddDistributedMemoryCache();
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(requestUri); var response = await client.GetAsync(requestUri);
@ -145,7 +167,11 @@ namespace Microsoft.AspNetCore.Session
[Fact] [Fact]
public async Task SessionCanBeAccessedOnTheNextRequest() public async Task SessionCanBeAccessedOnTheNextRequest()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(); app.UseSession();
@ -167,8 +193,11 @@ namespace Microsoft.AspNetCore.Session
services.AddDistributedMemoryCache(); services.AddDistributedMemoryCache();
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("first"); var response = await client.GetAsync("first");
@ -187,7 +216,11 @@ namespace Microsoft.AspNetCore.Session
[Fact] [Fact]
public async Task RemovedItemCannotBeAccessedAgain() public async Task RemovedItemCannotBeAccessedAgain()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(); app.UseSession();
@ -220,8 +253,11 @@ namespace Microsoft.AspNetCore.Session
services.AddDistributedMemoryCache(); services.AddDistributedMemoryCache();
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("first"); var response = await client.GetAsync("first");
@ -239,7 +275,11 @@ namespace Microsoft.AspNetCore.Session
[Fact] [Fact]
public async Task ClearedItemsCannotBeAccessedAgain() public async Task ClearedItemsCannotBeAccessedAgain()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(); app.UseSession();
@ -271,8 +311,11 @@ namespace Microsoft.AspNetCore.Session
services.AddDistributedMemoryCache(); services.AddDistributedMemoryCache();
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("first"); var response = await client.GetAsync("first");
@ -294,7 +337,11 @@ namespace Microsoft.AspNetCore.Session
TestSink.EnableWithTypeName<DistributedSession>, TestSink.EnableWithTypeName<DistributedSession>,
TestSink.EnableWithTypeName<DistributedSession>); TestSink.EnableWithTypeName<DistributedSession>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(); app.UseSession();
@ -310,8 +357,11 @@ namespace Microsoft.AspNetCore.Session
services.AddDistributedMemoryCache(); services.AddDistributedMemoryCache();
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -334,7 +384,11 @@ namespace Microsoft.AspNetCore.Session
TestSink.EnableWithTypeName<DistributedSession>, TestSink.EnableWithTypeName<DistributedSession>,
TestSink.EnableWithTypeName<DistributedSession>); TestSink.EnableWithTypeName<DistributedSession>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(); app.UseSession();
@ -361,9 +415,12 @@ namespace Microsoft.AspNetCore.Session
services.AddDistributedMemoryCache(); services.AddDistributedMemoryCache();
services.AddSession(o => o.IdleTimeout = TimeSpan.FromMilliseconds(30)); services.AddSession(o => o.IdleTimeout = TimeSpan.FromMilliseconds(30));
}); });
}).Build();
await host.StartAsync();
string result; string result;
using (var server = new TestServer(builder)) using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("first"); var response = await client.GetAsync("first");
@ -392,7 +449,11 @@ namespace Microsoft.AspNetCore.Session
public async Task RefreshesSession_WhenSessionData_IsNotModified() public async Task RefreshesSession_WhenSessionData_IsNotModified()
{ {
var clock = new TestClock(); var clock = new TestClock();
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(); app.UseSession();
@ -424,8 +485,11 @@ namespace Microsoft.AspNetCore.Session
services.AddSession(o => o.IdleTimeout = TimeSpan.FromMinutes(20)); services.AddSession(o => o.IdleTimeout = TimeSpan.FromMinutes(20));
services.Configure<MemoryCacheOptions>(o => o.Clock = clock); services.Configure<MemoryCacheOptions>(o => o.Clock = clock);
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("AddDataToSession"); var response = await client.GetAsync("AddDataToSession");
@ -450,7 +514,11 @@ namespace Microsoft.AspNetCore.Session
[Fact] [Fact]
public async Task SessionFeature_IsUnregistered_WhenResponseGoingOut() public async Task SessionFeature_IsUnregistered_WhenResponseGoingOut()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.Use(async (httpContext, next) => app.Use(async (httpContext, next) =>
@ -473,8 +541,11 @@ namespace Microsoft.AspNetCore.Session
services.AddDistributedMemoryCache(); services.AddDistributedMemoryCache();
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -485,7 +556,11 @@ namespace Microsoft.AspNetCore.Session
[Fact] [Fact]
public async Task SessionFeature_IsUnregistered_WhenResponseGoingOut_AndAnUnhandledExcetionIsThrown() public async Task SessionFeature_IsUnregistered_WhenResponseGoingOut_AndAnUnhandledExcetionIsThrown()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.Use(async (httpContext, next) => app.Use(async (httpContext, next) =>
@ -516,8 +591,11 @@ namespace Microsoft.AspNetCore.Session
services.AddDistributedMemoryCache(); services.AddDistributedMemoryCache();
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -527,7 +605,11 @@ namespace Microsoft.AspNetCore.Session
[Fact] [Fact]
public async Task SessionKeys_AreCaseSensitive() public async Task SessionKeys_AreCaseSensitive()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(); app.UseSession();
@ -545,8 +627,11 @@ namespace Microsoft.AspNetCore.Session
services.AddDistributedMemoryCache(); services.AddDistributedMemoryCache();
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -561,7 +646,11 @@ namespace Microsoft.AspNetCore.Session
TestSink.EnableWithTypeName<DistributedSession>, TestSink.EnableWithTypeName<DistributedSession>,
TestSink.EnableWithTypeName<DistributedSession>); TestSink.EnableWithTypeName<DistributedSession>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(); app.UseSession();
@ -583,8 +672,11 @@ namespace Microsoft.AspNetCore.Session
}); });
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -603,7 +695,11 @@ namespace Microsoft.AspNetCore.Session
TestSink.EnableWithTypeName<DistributedSession>, TestSink.EnableWithTypeName<DistributedSession>,
TestSink.EnableWithTypeName<DistributedSession>); TestSink.EnableWithTypeName<DistributedSession>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(); app.UseSession();
@ -624,8 +720,11 @@ namespace Microsoft.AspNetCore.Session
}); });
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -644,7 +743,11 @@ namespace Microsoft.AspNetCore.Session
TestSink.EnableWithTypeName<DistributedSession>, TestSink.EnableWithTypeName<DistributedSession>,
TestSink.EnableWithTypeName<DistributedSession>); TestSink.EnableWithTypeName<DistributedSession>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(new SessionOptions() app.UseSession(new SessionOptions()
@ -665,8 +768,11 @@ namespace Microsoft.AspNetCore.Session
}); });
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -685,7 +791,11 @@ namespace Microsoft.AspNetCore.Session
TestSink.EnableWithTypeName<DistributedSession>, TestSink.EnableWithTypeName<DistributedSession>,
TestSink.EnableWithTypeName<DistributedSession>); TestSink.EnableWithTypeName<DistributedSession>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(); app.UseSession();
@ -706,8 +816,11 @@ namespace Microsoft.AspNetCore.Session
}); });
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -732,7 +845,11 @@ namespace Microsoft.AspNetCore.Session
|| beginScopeContext.LoggerName.Equals(typeof(DistributedSession).FullName); || beginScopeContext.LoggerName.Equals(typeof(DistributedSession).FullName);
}); });
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(); app.UseSession();
@ -751,8 +868,11 @@ namespace Microsoft.AspNetCore.Session
}); });
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -785,7 +905,11 @@ namespace Microsoft.AspNetCore.Session
|| beginScopeContext.LoggerName.Equals(typeof(DistributedSession).FullName); || beginScopeContext.LoggerName.Equals(typeof(DistributedSession).FullName);
}); });
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(new SessionOptions() app.UseSession(new SessionOptions()
@ -807,8 +931,11 @@ namespace Microsoft.AspNetCore.Session
}); });
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -844,7 +971,11 @@ namespace Microsoft.AspNetCore.Session
|| beginScopeContext.LoggerName.Equals(typeof(DistributedSession).FullName); || beginScopeContext.LoggerName.Equals(typeof(DistributedSession).FullName);
}); });
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(); app.UseSession();
@ -866,8 +997,11 @@ namespace Microsoft.AspNetCore.Session
}); });
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -901,7 +1035,11 @@ namespace Microsoft.AspNetCore.Session
|| beginScopeContext.LoggerName.Equals(typeof(DistributedSession).FullName); || beginScopeContext.LoggerName.Equals(typeof(DistributedSession).FullName);
}); });
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(); app.UseSession();
@ -924,8 +1062,11 @@ namespace Microsoft.AspNetCore.Session
}); });
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);
@ -950,7 +1091,11 @@ namespace Microsoft.AspNetCore.Session
TestSink.EnableWithTypeName<SessionMiddleware>, TestSink.EnableWithTypeName<SessionMiddleware>,
TestSink.EnableWithTypeName<SessionMiddleware>); TestSink.EnableWithTypeName<SessionMiddleware>);
var loggerFactory = new TestLoggerFactory(sink, enabled: true); var loggerFactory = new TestLoggerFactory(sink, enabled: true);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.UseSession(); app.UseSession();
@ -969,8 +1114,11 @@ namespace Microsoft.AspNetCore.Session
}); });
services.AddSession(); services.AddSession();
}); });
}).Build();
using (var server = new TestServer(builder)) await host.StartAsync();
using (var server = host.GetTestServer())
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);

View File

@ -1,8 +1,10 @@
using System; using System;
using System.IO; using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
namespace StaticFilesSample namespace StaticFilesSample
@ -25,9 +27,12 @@ namespace StaticFilesSample
}); });
} }
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.ConfigureLogging(factory => .ConfigureLogging(factory =>
{ {
factory.AddFilter("Console", level => level >= LogLevel.Debug); factory.AddFilter("Console", level => level >= LogLevel.Debug);
@ -37,10 +42,10 @@ namespace StaticFilesSample
.UseKestrel() .UseKestrel()
// .UseHttpSys() // .UseHttpSys()
.UseIISIntegration() .UseIISIntegration()
.UseStartup<Startup>() .UseStartup<Startup>();
.Build(); }).Build();
host.Run(); return host.RunAsync();
} }
} }
} }

View File

@ -15,6 +15,7 @@ using Microsoft.AspNetCore.Server.IntegrationTesting.Common;
using Microsoft.AspNetCore.Testing; using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging.Testing; using Microsoft.Extensions.Logging.Testing;
using Xunit; using Xunit;
@ -25,13 +26,17 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact] [Fact]
public async Task ReturnsFileForDefaultPattern() public async Task ReturnsFileForDefaultPattern()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddRouting(); services.AddRouting();
services.AddSingleton(LoggerFactory); services.AddSingleton(LoggerFactory);
}) })
.UseKestrel() .UseKestrel()
.UseUrls(TestUrlHelper.GetTestUrl(ServerType.Kestrel))
.UseWebRoot(AppContext.BaseDirectory) .UseWebRoot(AppContext.BaseDirectory)
.Configure(app => .Configure(app =>
{ {
@ -50,11 +55,12 @@ namespace Microsoft.AspNetCore.StaticFiles
}); });
}); });
}); });
}).Build();
using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel))) await host.StartAsync();
{
var environment = server.Services.GetRequiredService<IWebHostEnvironment>(); var environment = host.Services.GetRequiredService<IWebHostEnvironment>();
using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(server)) }) using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(host)) })
{ {
var response = await client.GetAsync("hello"); var response = await client.GetAsync("hello");
var responseText = await response.Content.ReadAsStringAsync(); var responseText = await response.Content.ReadAsStringAsync();
@ -69,18 +75,21 @@ namespace Microsoft.AspNetCore.StaticFiles
AssertFileEquals(environment, "SubFolder/default.html", responseContent); AssertFileEquals(environment, "SubFolder/default.html", responseContent);
} }
} }
}
[Fact] [Fact]
public async Task ReturnsFileForCustomPattern() public async Task ReturnsFileForCustomPattern()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddRouting(); services.AddRouting();
services.AddSingleton(LoggerFactory); services.AddSingleton(LoggerFactory);
}) })
.UseKestrel() .UseKestrel()
.UseUrls(TestUrlHelper.GetTestUrl(ServerType.Kestrel))
.UseWebRoot(AppContext.BaseDirectory) .UseWebRoot(AppContext.BaseDirectory)
.Configure(app => .Configure(app =>
{ {
@ -95,11 +104,12 @@ namespace Microsoft.AspNetCore.StaticFiles
endpoints.MapFallbackToFile("/prefix/{*path:nonfile}", "TestDocument.txt"); endpoints.MapFallbackToFile("/prefix/{*path:nonfile}", "TestDocument.txt");
}); });
}); });
}).Build();
using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel))) await host.StartAsync();
{
var environment = server.Services.GetRequiredService<IWebHostEnvironment>(); var environment = host.Services.GetRequiredService<IWebHostEnvironment>();
using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(server)) }) using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(host)) })
{ {
var response = await client.GetAsync("hello"); var response = await client.GetAsync("hello");
var responseText = await response.Content.ReadAsStringAsync(); var responseText = await response.Content.ReadAsStringAsync();
@ -114,7 +124,6 @@ namespace Microsoft.AspNetCore.StaticFiles
AssertFileEquals(environment, "TestDocument.txt", responseContent); AssertFileEquals(environment, "TestDocument.txt", responseContent);
} }
} }
}
private static void AssertFileEquals(IWebHostEnvironment environment, string filePath, byte[] responseContent) private static void AssertFileEquals(IWebHostEnvironment environment, string filePath, byte[] responseContent)
{ {

View File

@ -3,15 +3,18 @@
using System.Linq; using System.Linq;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Hosting.Server;
using Microsoft.AspNetCore.Hosting.Server.Features; using Microsoft.AspNetCore.Hosting.Server.Features;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Microsoft.AspNetCore.StaticFiles namespace Microsoft.AspNetCore.StaticFiles
{ {
public static class Helpers public static class Helpers
{ {
public static string GetAddress(IWebHost server) public static string GetAddress(IHost server)
{ {
return server.ServerFeatures.Get<IServerAddressesFeature>().Addresses.First(); return server.Services.GetService<IServer>().Features.Get<IServerAddressesFeature>().Addresses.First();
} }
} }
} }

View File

@ -18,6 +18,7 @@ using Microsoft.AspNetCore.Server.IntegrationTesting;
using Microsoft.AspNetCore.Server.IntegrationTesting.Common; using Microsoft.AspNetCore.Server.IntegrationTesting.Common;
using Microsoft.AspNetCore.Testing; using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging.Testing; using Microsoft.Extensions.Logging.Testing;
using Xunit; using Xunit;
@ -28,28 +29,36 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact] [Fact]
public async Task ReturnsNotFoundWithoutWwwroot() public async Task ReturnsNotFoundWithoutWwwroot()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.ConfigureServices(services => services.AddSingleton(LoggerFactory)) .ConfigureServices(services => services.AddSingleton(LoggerFactory))
.UseKestrel() .UseKestrel()
.UseUrls(TestUrlHelper.GetTestUrl(ServerType.Kestrel))
.Configure(app => app.UseStaticFiles()); .Configure(app => app.UseStaticFiles());
}).Build();
using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel))) await host.StartAsync();
{
using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(server)) }) using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(host)) })
{ {
var response = await client.GetAsync("TestDocument.txt"); var response = await client.GetAsync("TestDocument.txt");
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
} }
} }
}
[Fact] [Fact]
public async Task Endpoint_PassesThrough() public async Task Endpoint_PassesThrough()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.ConfigureServices(services => { services.AddSingleton(LoggerFactory); services.AddRouting(); }) .ConfigureServices(services => { services.AddSingleton(LoggerFactory); services.AddRouting(); })
.UseKestrel() .UseKestrel()
.UseUrls(TestUrlHelper.GetTestUrl(ServerType.Kestrel))
.UseWebRoot(AppContext.BaseDirectory) .UseWebRoot(AppContext.BaseDirectory)
.Configure(app => .Configure(app =>
{ {
@ -73,10 +82,11 @@ namespace Microsoft.AspNetCore.StaticFiles
app.UseEndpoints(endpoints => { }); app.UseEndpoints(endpoints => { });
}); });
}).Build();
using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel))) await host.StartAsync();
{
using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(server)) }) using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(host)) })
{ {
var response = await client.GetAsync("TestDocument.txt"); var response = await client.GetAsync("TestDocument.txt");
@ -84,20 +94,24 @@ namespace Microsoft.AspNetCore.StaticFiles
Assert.Equal("Hi from endpoint.", await response.Content.ReadAsStringAsync()); Assert.Equal("Hi from endpoint.", await response.Content.ReadAsStringAsync());
} }
} }
}
[Fact] [Fact]
public async Task FoundFile_LastModifiedTrimsSeconds() public async Task FoundFile_LastModifiedTrimsSeconds()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.ConfigureServices(services => services.AddSingleton(LoggerFactory)) .ConfigureServices(services => services.AddSingleton(LoggerFactory))
.UseKestrel() .UseKestrel()
.UseUrls(TestUrlHelper.GetTestUrl(ServerType.Kestrel))
.UseWebRoot(AppContext.BaseDirectory) .UseWebRoot(AppContext.BaseDirectory)
.Configure(app => app.UseStaticFiles()); .Configure(app => app.UseStaticFiles());
}).Build();
using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel))) await host.StartAsync();
{
using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(server)) }) using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(host)) })
{ {
var last = File.GetLastWriteTimeUtc(Path.Combine(AppContext.BaseDirectory, "TestDocument.txt")); var last = File.GetLastWriteTimeUtc(Path.Combine(AppContext.BaseDirectory, "TestDocument.txt"));
var response = await client.GetAsync("TestDocument.txt"); var response = await client.GetAsync("TestDocument.txt");
@ -107,7 +121,6 @@ namespace Microsoft.AspNetCore.StaticFiles
Assert.Equal(response.Content.Headers.LastModified.Value, trimmed); Assert.Equal(response.Content.Headers.LastModified.Value, trimmed);
} }
} }
}
[Theory] [Theory]
[MemberData(nameof(ExistingFiles))] [MemberData(nameof(ExistingFiles))]
@ -130,20 +143,25 @@ namespace Microsoft.AspNetCore.StaticFiles
private async Task FoundFile_Served(string baseUrl, string baseDir, string requestUrl) private async Task FoundFile_Served(string baseUrl, string baseDir, string requestUrl)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.ConfigureServices(services => services.AddSingleton(LoggerFactory)) .ConfigureServices(services => services.AddSingleton(LoggerFactory))
.UseKestrel() .UseKestrel()
.UseUrls(TestUrlHelper.GetTestUrl(ServerType.Kestrel))
.UseWebRoot(Path.Combine(AppContext.BaseDirectory, baseDir)) .UseWebRoot(Path.Combine(AppContext.BaseDirectory, baseDir))
.Configure(app => app.UseStaticFiles(new StaticFileOptions .Configure(app => app.UseStaticFiles(new StaticFileOptions
{ {
RequestPath = new PathString(baseUrl), RequestPath = new PathString(baseUrl),
})); }));
}).Build();
using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel))) await host.StartAsync();
{
var hostingEnvironment = server.Services.GetService<IWebHostEnvironment>();
using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(server)) }) var hostingEnvironment = host.Services.GetService<IWebHostEnvironment>();
using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(host)) })
{ {
var fileInfo = hostingEnvironment.WebRootFileProvider.GetFileInfo(Path.GetFileName(requestUrl)); var fileInfo = hostingEnvironment.WebRootFileProvider.GetFileInfo(Path.GetFileName(requestUrl));
var response = await client.GetAsync(requestUrl); var response = await client.GetAsync(requestUrl);
@ -162,13 +180,15 @@ namespace Microsoft.AspNetCore.StaticFiles
} }
} }
} }
}
[Theory] [Theory]
[MemberData(nameof(ExistingFiles))] [MemberData(nameof(ExistingFiles))]
public async Task HeadFile_HeadersButNotBodyServed(string baseUrl, string baseDir, string requestUrl) public async Task HeadFile_HeadersButNotBodyServed(string baseUrl, string baseDir, string requestUrl)
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.ConfigureServices(services => services.AddSingleton(LoggerFactory)) .ConfigureServices(services => services.AddSingleton(LoggerFactory))
.UseKestrel() .UseKestrel()
.UseWebRoot(Path.Combine(AppContext.BaseDirectory, baseDir)) .UseWebRoot(Path.Combine(AppContext.BaseDirectory, baseDir))
@ -176,12 +196,13 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
RequestPath = new PathString(baseUrl), RequestPath = new PathString(baseUrl),
})); }));
}).Build();
using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel))) await host.StartAsync();
{
var hostingEnvironment = server.Services.GetService<IWebHostEnvironment>();
using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(server)) }) var hostingEnvironment = host.Services.GetService<IWebHostEnvironment>();
using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(host)) })
{ {
var fileInfo = hostingEnvironment.WebRootFileProvider.GetFileInfo(Path.GetFileName(requestUrl)); var fileInfo = hostingEnvironment.WebRootFileProvider.GetFileInfo(Path.GetFileName(requestUrl));
var request = new HttpRequestMessage(HttpMethod.Head, requestUrl); var request = new HttpRequestMessage(HttpMethod.Head, requestUrl);
@ -193,7 +214,6 @@ namespace Microsoft.AspNetCore.StaticFiles
Assert.Empty((await response.Content.ReadAsByteArrayAsync())); Assert.Empty((await response.Content.ReadAsByteArrayAsync()));
} }
} }
}
public static IEnumerable<object[]> ExistingFiles => new[] public static IEnumerable<object[]> ExistingFiles => new[]
{ {
@ -226,7 +246,10 @@ namespace Microsoft.AspNetCore.StaticFiles
var requestCancelled = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously); var requestCancelled = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);
var responseComplete = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously); var responseComplete = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);
Exception exception = null; Exception exception = null;
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.ConfigureServices(services => services.AddSingleton(LoggerFactory)) .ConfigureServices(services => services.AddSingleton(LoggerFactory))
.UseWebRoot(Path.Combine(AppContext.BaseDirectory)) .UseWebRoot(Path.Combine(AppContext.BaseDirectory))
.Configure(app => .Configure(app =>
@ -247,21 +270,23 @@ namespace Microsoft.AspNetCore.StaticFiles
responseComplete.SetResult(0); responseComplete.SetResult(0);
}); });
app.UseStaticFiles(); app.UseStaticFiles();
}); })
.UseUrls(TestUrlHelper.GetTestUrl(serverType));
if (serverType == ServerType.HttpSys) if (serverType == ServerType.HttpSys)
{ {
builder.UseHttpSys(); webHostBuilder.UseHttpSys();
} }
else if (serverType == ServerType.Kestrel) else if (serverType == ServerType.Kestrel)
{ {
builder.UseKestrel(); webHostBuilder.UseKestrel();
} }
}).Build();
await host.StartAsync();
using (var server = builder.Start(TestUrlHelper.GetTestUrl(serverType)))
{
// We don't use HttpClient here because it's disconnect behavior varies across platforms. // We don't use HttpClient here because it's disconnect behavior varies across platforms.
var socket = SendSocketRequestAsync(Helpers.GetAddress(server), "/TestDocument1MB.txt"); var socket = SendSocketRequestAsync(Helpers.GetAddress(host), "/TestDocument1MB.txt");
await requestReceived.Task.TimeoutAfter(interval); await requestReceived.Task.TimeoutAfter(interval);
socket.LingerState = new LingerOption(true, 0); socket.LingerState = new LingerOption(true, 0);
@ -271,7 +296,6 @@ namespace Microsoft.AspNetCore.StaticFiles
await responseComplete.Task.TimeoutAfter(interval); await responseComplete.Task.TimeoutAfter(interval);
Assert.Null(exception); Assert.Null(exception);
} }
}
private Socket SendSocketRequestAsync(string address, string path, string method = "GET") private Socket SendSocketRequestAsync(string address, string path, string method = "GET")
{ {

View File

@ -18,7 +18,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact] [Fact]
public async Task ServerShouldReturnETag() public async Task ServerShouldReturnETag()
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage response = await server.CreateClient().GetAsync("http://localhost/SubFolder/extra.xml"); HttpResponseMessage response = await server.CreateClient().GetAsync("http://localhost/SubFolder/extra.xml");
Assert.NotNull(response.Headers.ETag); Assert.NotNull(response.Headers.ETag);
@ -28,7 +29,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact] [Fact]
public async Task SameETagShouldBeReturnedAgain() public async Task SameETagShouldBeReturnedAgain()
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage response1 = await server.CreateClient().GetAsync("http://localhost/SubFolder/extra.xml"); HttpResponseMessage response1 = await server.CreateClient().GetAsync("http://localhost/SubFolder/extra.xml");
HttpResponseMessage response2 = await server.CreateClient().GetAsync("http://localhost/SubFolder/extra.xml"); HttpResponseMessage response2 = await server.CreateClient().GetAsync("http://localhost/SubFolder/extra.xml");
@ -47,7 +49,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(SupportedMethods))] [MemberData(nameof(SupportedMethods))]
public async Task IfMatchShouldReturn412WhenNotListed(HttpMethod method) public async Task IfMatchShouldReturn412WhenNotListed(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
var req = new HttpRequestMessage(method, "http://localhost/SubFolder/extra.xml"); var req = new HttpRequestMessage(method, "http://localhost/SubFolder/extra.xml");
req.Headers.Add("If-Match", "\"fake\""); req.Headers.Add("If-Match", "\"fake\"");
HttpResponseMessage resp = await server.CreateClient().SendAsync(req); HttpResponseMessage resp = await server.CreateClient().SendAsync(req);
@ -58,7 +61,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(SupportedMethods))] [MemberData(nameof(SupportedMethods))]
public async Task IfMatchShouldBeServedWhenListed(HttpMethod method) public async Task IfMatchShouldBeServedWhenListed(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/extra.xml"); HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/extra.xml");
var req = new HttpRequestMessage(method, "http://localhost/SubFolder/extra.xml"); var req = new HttpRequestMessage(method, "http://localhost/SubFolder/extra.xml");
@ -71,7 +75,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(SupportedMethods))] [MemberData(nameof(SupportedMethods))]
public async Task IfMatchShouldBeServedForAsterisk(HttpMethod method) public async Task IfMatchShouldBeServedForAsterisk(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
var req = new HttpRequestMessage(method, "http://localhost/SubFolder/extra.xml"); var req = new HttpRequestMessage(method, "http://localhost/SubFolder/extra.xml");
req.Headers.Add("If-Match", "*"); req.Headers.Add("If-Match", "*");
HttpResponseMessage resp = await server.CreateClient().SendAsync(req); HttpResponseMessage resp = await server.CreateClient().SendAsync(req);
@ -82,7 +87,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(UnsupportedMethods))] [MemberData(nameof(UnsupportedMethods))]
public async Task IfMatchShouldBeIgnoredForUnsupportedMethods(HttpMethod method) public async Task IfMatchShouldBeIgnoredForUnsupportedMethods(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
var req = new HttpRequestMessage(method, "http://localhost/SubFolder/extra.xml"); var req = new HttpRequestMessage(method, "http://localhost/SubFolder/extra.xml");
req.Headers.Add("If-Match", "*"); req.Headers.Add("If-Match", "*");
HttpResponseMessage resp = await server.CreateClient().SendAsync(req); HttpResponseMessage resp = await server.CreateClient().SendAsync(req);
@ -107,7 +113,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(SupportedMethods))] [MemberData(nameof(SupportedMethods))]
public async Task IfNoneMatchShouldReturn304ForMatching(HttpMethod method) public async Task IfNoneMatchShouldReturn304ForMatching(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage resp1 = await server.CreateClient().GetAsync("http://localhost/SubFolder/extra.xml"); HttpResponseMessage resp1 = await server.CreateClient().GetAsync("http://localhost/SubFolder/extra.xml");
var req2 = new HttpRequestMessage(method, "http://localhost/SubFolder/extra.xml"); var req2 = new HttpRequestMessage(method, "http://localhost/SubFolder/extra.xml");
@ -120,7 +127,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(SupportedMethods))] [MemberData(nameof(SupportedMethods))]
public async Task IfNoneMatchAllShouldReturn304ForMatching(HttpMethod method) public async Task IfNoneMatchAllShouldReturn304ForMatching(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage resp1 = await server.CreateClient().GetAsync("http://localhost/SubFolder/extra.xml"); HttpResponseMessage resp1 = await server.CreateClient().GetAsync("http://localhost/SubFolder/extra.xml");
var req2 = new HttpRequestMessage(method, "http://localhost/SubFolder/extra.xml"); var req2 = new HttpRequestMessage(method, "http://localhost/SubFolder/extra.xml");
@ -133,7 +141,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(UnsupportedMethods))] [MemberData(nameof(UnsupportedMethods))]
public async Task IfNoneMatchShouldBeIgnoredForNonTwoHundredAnd304Responses(HttpMethod method) public async Task IfNoneMatchShouldBeIgnoredForNonTwoHundredAnd304Responses(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage resp1 = await server.CreateClient().GetAsync("http://localhost/SubFolder/extra.xml"); HttpResponseMessage resp1 = await server.CreateClient().GetAsync("http://localhost/SubFolder/extra.xml");
var req2 = new HttpRequestMessage(method, "http://localhost/SubFolder/extra.xml"); var req2 = new HttpRequestMessage(method, "http://localhost/SubFolder/extra.xml");
@ -156,7 +165,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(SupportedMethods))] [MemberData(nameof(SupportedMethods))]
public async Task ServerShouldReturnLastModified(HttpMethod method) public async Task ServerShouldReturnLastModified(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage response = await server.CreateClient().SendAsync( HttpResponseMessage response = await server.CreateClient().SendAsync(
new HttpRequestMessage(method, "http://localhost/SubFolder/extra.xml")); new HttpRequestMessage(method, "http://localhost/SubFolder/extra.xml"));
@ -179,7 +189,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(SupportedMethods))] [MemberData(nameof(SupportedMethods))]
public async Task MatchingBothConditionsReturnsNotModified(HttpMethod method) public async Task MatchingBothConditionsReturnsNotModified(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage resp1 = await server HttpResponseMessage resp1 = await server
.CreateRequest("/SubFolder/extra.xml") .CreateRequest("/SubFolder/extra.xml")
.SendAsync(method.Method); .SendAsync(method.Method);
@ -198,7 +209,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(SupportedMethods))] [MemberData(nameof(SupportedMethods))]
public async Task MatchingAtLeastOneETagReturnsNotModified(HttpMethod method) public async Task MatchingAtLeastOneETagReturnsNotModified(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage resp1 = await server HttpResponseMessage resp1 = await server
.CreateRequest("/SubFolder/extra.xml") .CreateRequest("/SubFolder/extra.xml")
.SendAsync(method.Method); .SendAsync(method.Method);
@ -223,7 +235,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(SupportedMethods))] [MemberData(nameof(SupportedMethods))]
public async Task MissingEitherOrBothConditionsReturnsNormally(HttpMethod method) public async Task MissingEitherOrBothConditionsReturnsNormally(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage resp1 = await server HttpResponseMessage resp1 = await server
.CreateRequest("/SubFolder/extra.xml") .CreateRequest("/SubFolder/extra.xml")
.SendAsync(method.Method); .SendAsync(method.Method);
@ -271,7 +284,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(SupportedMethods))] [MemberData(nameof(SupportedMethods))]
public async Task InvalidIfModifiedSinceDateFormatGivesNormalGet(HttpMethod method) public async Task InvalidIfModifiedSinceDateFormatGivesNormalGet(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage res = await server HttpResponseMessage res = await server
.CreateRequest("/SubFolder/extra.xml") .CreateRequest("/SubFolder/extra.xml")
@ -285,7 +299,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(SupportedMethods))] [MemberData(nameof(SupportedMethods))]
public async Task FutureIfModifiedSinceDateFormatGivesNormalGet(HttpMethod method) public async Task FutureIfModifiedSinceDateFormatGivesNormalGet(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage res = await server HttpResponseMessage res = await server
.CreateRequest("/SubFolder/extra.xml") .CreateRequest("/SubFolder/extra.xml")
@ -306,7 +321,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(SupportedMethods))] [MemberData(nameof(SupportedMethods))]
public async Task IfModifiedSinceDateGreaterThanLastModifiedShouldReturn304(HttpMethod method) public async Task IfModifiedSinceDateGreaterThanLastModifiedShouldReturn304(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage res1 = await server HttpResponseMessage res1 = await server
.CreateRequest("/SubFolder/extra.xml") .CreateRequest("/SubFolder/extra.xml")
@ -324,7 +340,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(SupportedMethods))] [MemberData(nameof(SupportedMethods))]
public async Task SupportsIfModifiedDateFormats(HttpMethod method) public async Task SupportsIfModifiedDateFormats(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage res1 = await server HttpResponseMessage res1 = await server
.CreateRequest("/SubFolder/extra.xml") .CreateRequest("/SubFolder/extra.xml")
.SendAsync(method.Method); .SendAsync(method.Method);
@ -351,7 +368,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(SupportedMethods))] [MemberData(nameof(SupportedMethods))]
public async Task IfModifiedSinceDateLessThanLastModifiedShouldReturn200(HttpMethod method) public async Task IfModifiedSinceDateLessThanLastModifiedShouldReturn200(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage res1 = await server HttpResponseMessage res1 = await server
.CreateRequest("/SubFolder/extra.xml") .CreateRequest("/SubFolder/extra.xml")
@ -369,7 +387,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(SupportedMethods))] [MemberData(nameof(SupportedMethods))]
public async Task InvalidIfUnmodifiedSinceDateFormatGivesNormalGet(HttpMethod method) public async Task InvalidIfUnmodifiedSinceDateFormatGivesNormalGet(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage res = await server HttpResponseMessage res = await server
.CreateRequest("/SubFolder/extra.xml") .CreateRequest("/SubFolder/extra.xml")
@ -383,7 +402,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(SupportedMethods))] [MemberData(nameof(SupportedMethods))]
public async Task FutureIfUnmodifiedSinceDateFormatGivesNormalGet(HttpMethod method) public async Task FutureIfUnmodifiedSinceDateFormatGivesNormalGet(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage res = await server HttpResponseMessage res = await server
.CreateRequest("/SubFolder/extra.xml") .CreateRequest("/SubFolder/extra.xml")
@ -397,7 +417,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(SupportedMethods))] [MemberData(nameof(SupportedMethods))]
public async Task IfUnmodifiedSinceDateLessThanLastModifiedShouldReturn412(HttpMethod method) public async Task IfUnmodifiedSinceDateLessThanLastModifiedShouldReturn412(HttpMethod method)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage res1 = await server HttpResponseMessage res1 = await server
.CreateRequest("/SubFolder/extra.xml") .CreateRequest("/SubFolder/extra.xml")

View File

@ -24,10 +24,12 @@ namespace Microsoft.AspNetCore.StaticFiles
public async Task NullArguments() public async Task NullArguments()
{ {
// No exception, default provided // No exception, default provided
StaticFilesTestServer.Create(app => app.UseDefaultFiles(new DefaultFilesOptions { FileProvider = null })); using (await StaticFilesTestServer.Create(app => app.UseDefaultFiles(new DefaultFilesOptions { FileProvider = null })))
{ }
// PathString(null) is OK. // PathString(null) is OK.
var server = StaticFilesTestServer.Create(app => app.UseDefaultFiles((string)null)); using var host = await StaticFilesTestServer.Create(app => app.UseDefaultFiles((string)null));
using var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("/"); var response = await server.CreateClient().GetAsync("/");
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
} }
@ -64,7 +66,7 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir))) using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir)))
{ {
var server = StaticFilesTestServer.Create(app => using var host = await StaticFilesTestServer.Create(app =>
{ {
app.UseDefaultFiles(new DefaultFilesOptions app.UseDefaultFiles(new DefaultFilesOptions
{ {
@ -74,6 +76,7 @@ namespace Microsoft.AspNetCore.StaticFiles
}); });
app.Run(context => context.Response.WriteAsync(context.Request.Path.Value)); app.Run(context => context.Response.WriteAsync(context.Request.Path.Value));
}); });
using var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(requestUrl); var response = await server.CreateClient().GetAsync(requestUrl);
Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(HttpStatusCode.OK, response.StatusCode);
@ -86,7 +89,7 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, "."))) using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, ".")))
{ {
var server = StaticFilesTestServer.Create( using var host = await StaticFilesTestServer.Create(
app => app =>
{ {
app.UseRouting(); app.UseRouting();
@ -113,6 +116,7 @@ namespace Microsoft.AspNetCore.StaticFiles
app.UseEndpoints(endpoints => { }); app.UseEndpoints(endpoints => { });
}, },
services => { services.AddDirectoryBrowser(); services.AddRouting(); }); services => { services.AddDirectoryBrowser(); services.AddRouting(); });
using var server = host.GetTestServer();
var response = await server.CreateRequest("/SubFolder/").GetAsync(); var response = await server.CreateRequest("/SubFolder/").GetAsync();
Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(HttpStatusCode.OK, response.StatusCode);
@ -165,7 +169,7 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir))) using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir)))
{ {
var server = StaticFilesTestServer.Create(app => using var host = await StaticFilesTestServer.Create(app =>
{ {
app.UseDefaultFiles(new DefaultFilesOptions app.UseDefaultFiles(new DefaultFilesOptions
{ {
@ -175,6 +179,7 @@ namespace Microsoft.AspNetCore.StaticFiles
}); });
app.Run(context => context.Response.WriteAsync(context.Request.Path.Value)); app.Run(context => context.Response.WriteAsync(context.Request.Path.Value));
}); });
using var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(requestUrl); var response = await server.CreateClient().GetAsync(requestUrl);
@ -211,11 +216,12 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir))) using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir)))
{ {
var server = StaticFilesTestServer.Create(app => app.UseDefaultFiles(new DefaultFilesOptions using var host = await StaticFilesTestServer.Create(app => app.UseDefaultFiles(new DefaultFilesOptions
{ {
RequestPath = new PathString(baseUrl), RequestPath = new PathString(baseUrl),
FileProvider = fileProvider FileProvider = fileProvider
})); }));
using var server = host.GetTestServer();
var response = await server.CreateRequest(requestUrl + queryString).GetAsync(); var response = await server.CreateRequest(requestUrl + queryString).GetAsync();
Assert.Equal(HttpStatusCode.Moved, response.StatusCode); Assert.Equal(HttpStatusCode.Moved, response.StatusCode);
@ -265,12 +271,13 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir))) using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir)))
{ {
var server = StaticFilesTestServer.Create(app => app.UseDefaultFiles(new DefaultFilesOptions using var host = await StaticFilesTestServer.Create(app => app.UseDefaultFiles(new DefaultFilesOptions
{ {
RequestPath = new PathString(baseUrl), RequestPath = new PathString(baseUrl),
FileProvider = fileProvider, FileProvider = fileProvider,
RedirectToAppendTrailingSlash = appendTrailingSlash RedirectToAppendTrailingSlash = appendTrailingSlash
})); }));
using var server = host.GetTestServer();
var response = await server.CreateRequest(requestUrl).GetAsync(); var response = await server.CreateRequest(requestUrl).GetAsync();
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); // Passed through Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); // Passed through

View File

@ -21,10 +21,10 @@ namespace Microsoft.AspNetCore.StaticFiles
public class DirectoryBrowserMiddlewareTests public class DirectoryBrowserMiddlewareTests
{ {
[Fact] [Fact]
public void WorksWithoutEncoderRegistered() public async Task WorksWithoutEncoderRegistered()
{ {
// No exception, uses HtmlEncoder.Default // No exception, uses HtmlEncoder.Default
StaticFilesTestServer.Create( using var host = await StaticFilesTestServer.Create(
app => app.UseDirectoryBrowser()); app => app.UseDirectoryBrowser());
} }
@ -32,19 +32,24 @@ namespace Microsoft.AspNetCore.StaticFiles
public async Task NullArguments() public async Task NullArguments()
{ {
// No exception, default provided // No exception, default provided
StaticFilesTestServer.Create( using (await StaticFilesTestServer.Create(
app => app.UseDirectoryBrowser(new DirectoryBrowserOptions { Formatter = null }), app => app.UseDirectoryBrowser(new DirectoryBrowserOptions { Formatter = null }),
services => services.AddDirectoryBrowser()); services => services.AddDirectoryBrowser()))
{
}
// No exception, default provided // No exception, default provided
StaticFilesTestServer.Create( using (await StaticFilesTestServer.Create(
app => app.UseDirectoryBrowser(new DirectoryBrowserOptions { FileProvider = null }), app => app.UseDirectoryBrowser(new DirectoryBrowserOptions { FileProvider = null }),
services => services.AddDirectoryBrowser()); services => services.AddDirectoryBrowser()))
{
}
// PathString(null) is OK. // PathString(null) is OK.
var server = StaticFilesTestServer.Create( using var host = await StaticFilesTestServer.Create(
app => app.UseDirectoryBrowser((string)null), app => app.UseDirectoryBrowser((string)null),
services => services.AddDirectoryBrowser()); services => services.AddDirectoryBrowser());
using var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("/"); var response = await server.CreateClient().GetAsync("/");
Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(HttpStatusCode.OK, response.StatusCode);
@ -82,7 +87,7 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir))) using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir)))
{ {
var server = StaticFilesTestServer.Create( using var host = await StaticFilesTestServer.Create(
app => app.UseDirectoryBrowser(new DirectoryBrowserOptions app => app.UseDirectoryBrowser(new DirectoryBrowserOptions
{ {
RequestPath = new PathString(baseUrl), RequestPath = new PathString(baseUrl),
@ -90,6 +95,7 @@ namespace Microsoft.AspNetCore.StaticFiles
RedirectToAppendTrailingSlash = appendTrailingSlash RedirectToAppendTrailingSlash = appendTrailingSlash
}), }),
services => services.AddDirectoryBrowser()); services => services.AddDirectoryBrowser());
using var server = host.GetTestServer();
var response = await server.CreateRequest(requestUrl).GetAsync(); var response = await server.CreateRequest(requestUrl).GetAsync();
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
} }
@ -100,7 +106,7 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, "."))) using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, ".")))
{ {
var server = StaticFilesTestServer.Create( using var host = await StaticFilesTestServer.Create(
app => app =>
{ {
app.UseRouting(); app.UseRouting();
@ -128,6 +134,7 @@ namespace Microsoft.AspNetCore.StaticFiles
app.UseEndpoints(endpoints => { }); app.UseEndpoints(endpoints => { });
}, },
services => { services.AddDirectoryBrowser(); services.AddRouting(); }); services => { services.AddDirectoryBrowser(); services.AddRouting(); });
using var server = host.GetTestServer();
var response = await server.CreateRequest("/").GetAsync(); var response = await server.CreateRequest("/").GetAsync();
Assert.Equal(HttpStatusCode.NotAcceptable, response.StatusCode); Assert.Equal(HttpStatusCode.NotAcceptable, response.StatusCode);
@ -174,7 +181,7 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir))) using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir)))
{ {
var server = StaticFilesTestServer.Create( using var host = await StaticFilesTestServer.Create(
app => app.UseDirectoryBrowser(new DirectoryBrowserOptions app => app.UseDirectoryBrowser(new DirectoryBrowserOptions
{ {
RequestPath = new PathString(baseUrl), RequestPath = new PathString(baseUrl),
@ -182,6 +189,7 @@ namespace Microsoft.AspNetCore.StaticFiles
RedirectToAppendTrailingSlash = appendTrailingSlash, RedirectToAppendTrailingSlash = appendTrailingSlash,
}), }),
services => services.AddDirectoryBrowser()); services => services.AddDirectoryBrowser());
using var server = host.GetTestServer();
var response = await server.CreateRequest(requestUrl).GetAsync(); var response = await server.CreateRequest(requestUrl).GetAsync();
Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(HttpStatusCode.OK, response.StatusCode);
@ -217,13 +225,14 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir))) using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir)))
{ {
var server = StaticFilesTestServer.Create( using var host = await StaticFilesTestServer.Create(
app => app.UseDirectoryBrowser(new DirectoryBrowserOptions app => app.UseDirectoryBrowser(new DirectoryBrowserOptions
{ {
RequestPath = new PathString(baseUrl), RequestPath = new PathString(baseUrl),
FileProvider = fileProvider FileProvider = fileProvider
}), }),
services => services.AddDirectoryBrowser()); services => services.AddDirectoryBrowser());
using var server = host.GetTestServer();
var response = await server.CreateRequest(requestUrl + queryString).GetAsync(); var response = await server.CreateRequest(requestUrl + queryString).GetAsync();
@ -266,7 +275,7 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir))) using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir)))
{ {
var server = StaticFilesTestServer.Create( using var host = await StaticFilesTestServer.Create(
app => app.UseDirectoryBrowser(new DirectoryBrowserOptions app => app.UseDirectoryBrowser(new DirectoryBrowserOptions
{ {
RequestPath = new PathString(baseUrl), RequestPath = new PathString(baseUrl),
@ -274,6 +283,7 @@ namespace Microsoft.AspNetCore.StaticFiles
RedirectToAppendTrailingSlash = appendTrailingSlash RedirectToAppendTrailingSlash = appendTrailingSlash
}), }),
services => services.AddDirectoryBrowser()); services => services.AddDirectoryBrowser());
using var server = host.GetTestServer();
var response = await server.CreateRequest(requestUrl).PostAsync(); var response = await server.CreateRequest(requestUrl).PostAsync();
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
@ -313,7 +323,7 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir))) using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir)))
{ {
var server = StaticFilesTestServer.Create( using var host = await StaticFilesTestServer.Create(
app => app.UseDirectoryBrowser(new DirectoryBrowserOptions app => app.UseDirectoryBrowser(new DirectoryBrowserOptions
{ {
RequestPath = new PathString(baseUrl), RequestPath = new PathString(baseUrl),
@ -321,6 +331,7 @@ namespace Microsoft.AspNetCore.StaticFiles
RedirectToAppendTrailingSlash = appendTrailingSlash RedirectToAppendTrailingSlash = appendTrailingSlash
}), }),
services => services.AddDirectoryBrowser()); services => services.AddDirectoryBrowser());
using var server = host.GetTestServer();
var response = await server.CreateRequest(requestUrl).SendAsync("HEAD"); var response = await server.CreateRequest(requestUrl).SendAsync("HEAD");

View File

@ -19,7 +19,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact] [Fact]
public async Task IfRangeWithCurrentEtagShouldServePartialContent() public async Task IfRangeWithCurrentEtagShouldServePartialContent()
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt"); HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt");
var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt");
@ -39,7 +40,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact] [Fact]
public async Task HEADIfRangeWithCurrentEtagShouldReturn200Ok() public async Task HEADIfRangeWithCurrentEtagShouldReturn200Ok()
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt"); HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt");
var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt");
@ -59,7 +61,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact] [Fact]
public async Task IfRangeWithCurrentDateShouldServePartialContent() public async Task IfRangeWithCurrentDateShouldServePartialContent()
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt"); HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt");
var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt");
@ -75,7 +78,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact] [Fact]
public async Task IfModifiedSinceWithPastDateShouldServePartialContent() public async Task IfModifiedSinceWithPastDateShouldServePartialContent()
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt"); HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt");
var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt");
@ -91,7 +95,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact] [Fact]
public async Task IfModifiedSinceWithCurrentDateShouldReturn304() public async Task IfModifiedSinceWithCurrentDateShouldReturn304()
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt"); HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt");
var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt");
@ -107,7 +112,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact] [Fact]
public async Task HEADIfRangeWithCurrentDateShouldReturn200Ok() public async Task HEADIfRangeWithCurrentDateShouldReturn200Ok()
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt"); HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt");
var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt");
@ -127,7 +133,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact] [Fact]
public async Task IfRangeWithOldEtagShouldServeFullContent() public async Task IfRangeWithOldEtagShouldServeFullContent()
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt");
req.Headers.Add("If-Range", "\"OldEtag\""); req.Headers.Add("If-Range", "\"OldEtag\"");
req.Headers.Add("Range", "bytes=0-10"); req.Headers.Add("Range", "bytes=0-10");
@ -143,7 +150,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact] [Fact]
public async Task HEADIfRangeWithOldEtagShouldServeFullContent() public async Task HEADIfRangeWithOldEtagShouldServeFullContent()
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt");
req.Headers.Add("If-Range", "\"OldEtag\""); req.Headers.Add("If-Range", "\"OldEtag\"");
req.Headers.Add("Range", "bytes=0-10"); req.Headers.Add("Range", "bytes=0-10");
@ -159,7 +167,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact] [Fact]
public async Task IfRangeWithOldDateShouldServeFullContent() public async Task IfRangeWithOldDateShouldServeFullContent()
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt"); HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt");
var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt");
@ -177,7 +186,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact] [Fact]
public async Task HEADIfRangeWithOldDateShouldServeFullContent() public async Task HEADIfRangeWithOldDateShouldServeFullContent()
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt"); HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt");
var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt");
@ -196,7 +206,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact] [Fact]
public async Task IfRangeWithoutRangeShouldServeFullContent() public async Task IfRangeWithoutRangeShouldServeFullContent()
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt"); HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt");
var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt");
@ -222,7 +233,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact] [Fact]
public async Task HEADIfRangeWithoutRangeShouldServeFullContent() public async Task HEADIfRangeWithoutRangeShouldServeFullContent()
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt"); HttpResponseMessage original = await server.CreateClient().GetAsync("http://localhost/SubFolder/ranges.txt");
var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt");
@ -256,7 +268,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[InlineData("-1001", "0-61", 62, "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")] [InlineData("-1001", "0-61", 62, "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")]
public async Task SingleValidRangeShouldServePartialContent(string range, string expectedRange, int length, string expectedData) public async Task SingleValidRangeShouldServePartialContent(string range, string expectedRange, int length, string expectedData)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt");
req.Headers.Add("Range", "bytes=" + range); req.Headers.Add("Range", "bytes=" + range);
HttpResponseMessage resp = await server.CreateClient().SendAsync(req); HttpResponseMessage resp = await server.CreateClient().SendAsync(req);
@ -276,7 +289,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[InlineData("0-2", "0-0", 1, "A")] [InlineData("0-2", "0-0", 1, "A")]
public async Task SingleValidRangeShouldServePartialContentSingleByteFile(string range, string expectedRange, int length, string expectedData) public async Task SingleValidRangeShouldServePartialContentSingleByteFile(string range, string expectedRange, int length, string expectedData)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/SingleByte.txt"); var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/SingleByte.txt");
req.Headers.Add("Range", "bytes=" + range); req.Headers.Add("Range", "bytes=" + range);
HttpResponseMessage resp = await server.CreateClient().SendAsync(req); HttpResponseMessage resp = await server.CreateClient().SendAsync(req);
@ -296,7 +310,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[InlineData("0-2")] [InlineData("0-2")]
public async Task SingleValidRangeShouldServeRequestedRangeNotSatisfiableEmptyFile(string range) public async Task SingleValidRangeShouldServeRequestedRangeNotSatisfiableEmptyFile(string range)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/Empty.txt"); var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/Empty.txt");
req.Headers.Add("Range", "bytes=" + range); req.Headers.Add("Range", "bytes=" + range);
HttpResponseMessage resp = await server.CreateClient().SendAsync(req); HttpResponseMessage resp = await server.CreateClient().SendAsync(req);
@ -309,7 +324,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[InlineData("10-35")] [InlineData("10-35")]
public async Task HEADSingleValidRangeShouldReturnOk(string range) public async Task HEADSingleValidRangeShouldReturnOk(string range)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt");
req.Headers.Add("Range", "bytes=" + range); req.Headers.Add("Range", "bytes=" + range);
HttpResponseMessage resp = await server.CreateClient().SendAsync(req); HttpResponseMessage resp = await server.CreateClient().SendAsync(req);
@ -326,7 +342,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[InlineData("-0")] // Suffix range must be non-zero [InlineData("-0")] // Suffix range must be non-zero
public async Task SingleNotSatisfiableRange(string range) public async Task SingleNotSatisfiableRange(string range)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt");
req.Headers.TryAddWithoutValidation("Range", "bytes=" + range); req.Headers.TryAddWithoutValidation("Range", "bytes=" + range);
HttpResponseMessage resp = await server.CreateClient().SendAsync(req); HttpResponseMessage resp = await server.CreateClient().SendAsync(req);
@ -340,7 +357,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[InlineData("1000-1001")] // Out of range [InlineData("1000-1001")] // Out of range
public async Task HEADSingleNotSatisfiableRangeReturnsOk(string range) public async Task HEADSingleNotSatisfiableRangeReturnsOk(string range)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt");
req.Headers.TryAddWithoutValidation("Range", "bytes=" + range); req.Headers.TryAddWithoutValidation("Range", "bytes=" + range);
HttpResponseMessage resp = await server.CreateClient().SendAsync(req); HttpResponseMessage resp = await server.CreateClient().SendAsync(req);
@ -359,7 +377,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[InlineData("a-b")] [InlineData("a-b")]
public async Task SingleInvalidRangeIgnored(string range) public async Task SingleInvalidRangeIgnored(string range)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt");
req.Headers.TryAddWithoutValidation("Range", "bytes=" + range); req.Headers.TryAddWithoutValidation("Range", "bytes=" + range);
HttpResponseMessage resp = await server.CreateClient().SendAsync(req); HttpResponseMessage resp = await server.CreateClient().SendAsync(req);
@ -380,7 +399,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[InlineData("a-b")] [InlineData("a-b")]
public async Task HEADSingleInvalidRangeIgnored(string range) public async Task HEADSingleInvalidRangeIgnored(string range)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt");
req.Headers.TryAddWithoutValidation("Range", "bytes=" + range); req.Headers.TryAddWithoutValidation("Range", "bytes=" + range);
HttpResponseMessage resp = await server.CreateClient().SendAsync(req); HttpResponseMessage resp = await server.CreateClient().SendAsync(req);
@ -400,7 +420,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[InlineData("0-0,6-6,8-8,2-2,4-4")] [InlineData("0-0,6-6,8-8,2-2,4-4")]
public async Task MultipleValidRangesShouldServeFullContent(string ranges) public async Task MultipleValidRangesShouldServeFullContent(string ranges)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Get, "http://localhost/SubFolder/ranges.txt");
req.Headers.Add("Range", "bytes=" + ranges); req.Headers.Add("Range", "bytes=" + ranges);
HttpResponseMessage resp = await server.CreateClient().SendAsync(req); HttpResponseMessage resp = await server.CreateClient().SendAsync(req);
@ -419,7 +440,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[InlineData("2-2,0-0")] // SHOULD send in the requested order. [InlineData("2-2,0-0")] // SHOULD send in the requested order.
public async Task HEADMultipleValidRangesShouldServeFullContent(string range) public async Task HEADMultipleValidRangesShouldServeFullContent(string range)
{ {
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer()); using var host = await StaticFilesTestServer.Create(app => app.UseFileServer());
using var server = host.GetTestServer();
var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt"); var req = new HttpRequestMessage(HttpMethod.Head, "http://localhost/SubFolder/ranges.txt");
req.Headers.Add("Range", "bytes=" + range); req.Headers.Add("Range", "bytes=" + range);
HttpResponseMessage resp = await server.CreateClient().SendAsync(req); HttpResponseMessage resp = await server.CreateClient().SendAsync(req);

View File

@ -16,6 +16,7 @@ using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.AspNetCore.Testing; using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Hosting;
using Moq; using Moq;
using Xunit; using Xunit;
@ -26,9 +27,17 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact] [Fact]
public async Task ReturnsNotFoundWithoutWwwroot() public async Task ReturnsNotFoundWithoutWwwroot()
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => app.UseStaticFiles()); .Configure(app => app.UseStaticFiles());
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("/ranges.txt"); var response = await server.CreateClient().GetAsync("/ranges.txt");
@ -47,10 +56,18 @@ namespace Microsoft.AspNetCore.StaticFiles
try try
{ {
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => app.UseStaticFiles(new StaticFileOptions { ServeUnknownFileTypes = true })) .Configure(app => app.UseStaticFiles(new StaticFileOptions { ServeUnknownFileTypes = true }))
.UseWebRoot(AppContext.BaseDirectory); .UseWebRoot(AppContext.BaseDirectory);
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync(Path.GetFileName(badLink)); var response = await server.CreateClient().GetAsync(Path.GetFileName(badLink));
@ -70,7 +87,11 @@ namespace Microsoft.AspNetCore.StaticFiles
mockSendFile.Setup(m => m.SendFileAsync(It.IsAny<string>(), It.IsAny<long>(), It.IsAny<long?>(), It.IsAny<CancellationToken>())) mockSendFile.Setup(m => m.SendFileAsync(It.IsAny<string>(), It.IsAny<long>(), It.IsAny<long?>(), It.IsAny<CancellationToken>()))
.ThrowsAsync(new FileNotFoundException()); .ThrowsAsync(new FileNotFoundException());
mockSendFile.Setup(m => m.Stream).Returns(Stream.Null); mockSendFile.Setup(m => m.Stream).Returns(Stream.Null);
var builder = new WebHostBuilder() using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.Configure(app => .Configure(app =>
{ {
app.Use(async (ctx, next) => app.Use(async (ctx, next) =>
@ -81,7 +102,11 @@ namespace Microsoft.AspNetCore.StaticFiles
app.UseStaticFiles(new StaticFileOptions { ServeUnknownFileTypes = true }); app.UseStaticFiles(new StaticFileOptions { ServeUnknownFileTypes = true });
}) })
.UseWebRoot(AppContext.BaseDirectory); .UseWebRoot(AppContext.BaseDirectory);
var server = new TestServer(builder); }).Build();
await host.StartAsync();
var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("TestDocument.txt"); var response = await server.CreateClient().GetAsync("TestDocument.txt");
@ -94,10 +119,11 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
using (var fileProvider = new PhysicalFileProvider(AppContext.BaseDirectory)) using (var fileProvider = new PhysicalFileProvider(AppContext.BaseDirectory))
{ {
var server = StaticFilesTestServer.Create(app => app.UseStaticFiles(new StaticFileOptions using var host = await StaticFilesTestServer.Create(app => app.UseStaticFiles(new StaticFileOptions
{ {
FileProvider = fileProvider FileProvider = fileProvider
})); }));
using var server = host.GetTestServer();
var fileInfo = fileProvider.GetFileInfo("TestDocument.txt"); var fileInfo = fileProvider.GetFileInfo("TestDocument.txt");
var response = await server.CreateRequest("TestDocument.txt").GetAsync(); var response = await server.CreateRequest("TestDocument.txt").GetAsync();
@ -112,13 +138,16 @@ namespace Microsoft.AspNetCore.StaticFiles
public async Task NullArguments() public async Task NullArguments()
{ {
// No exception, default provided // No exception, default provided
StaticFilesTestServer.Create(app => app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = null })); using (await StaticFilesTestServer.Create(app => app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = null })))
{ }
// No exception, default provided // No exception, default provided
StaticFilesTestServer.Create(app => app.UseStaticFiles(new StaticFileOptions { FileProvider = null })); using (await StaticFilesTestServer.Create(app => app.UseStaticFiles(new StaticFileOptions { FileProvider = null })))
{ }
// PathString(null) is OK. // PathString(null) is OK.
var server = StaticFilesTestServer.Create(app => app.UseStaticFiles((string)null)); using var host = await StaticFilesTestServer.Create(app => app.UseStaticFiles((string)null));
using var server = host.GetTestServer();
var response = await server.CreateClient().GetAsync("/"); var response = await server.CreateClient().GetAsync("/");
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
} }
@ -146,11 +175,12 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir))) using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir)))
{ {
var server = StaticFilesTestServer.Create(app => app.UseStaticFiles(new StaticFileOptions using var host = await StaticFilesTestServer.Create(app => app.UseStaticFiles(new StaticFileOptions
{ {
RequestPath = new PathString(baseUrl), RequestPath = new PathString(baseUrl),
FileProvider = fileProvider FileProvider = fileProvider
})); }));
using var server = host.GetTestServer();
var fileInfo = fileProvider.GetFileInfo(Path.GetFileName(requestUrl)); var fileInfo = fileProvider.GetFileInfo(Path.GetFileName(requestUrl));
var response = await server.CreateRequest(requestUrl).GetAsync(); var response = await server.CreateRequest(requestUrl).GetAsync();
var responseContent = await response.Content.ReadAsByteArrayAsync(); var responseContent = await response.Content.ReadAsByteArrayAsync();
@ -176,11 +206,12 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir))) using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir)))
{ {
var server = StaticFilesTestServer.Create(app => app.UseStaticFiles(new StaticFileOptions using var host = await StaticFilesTestServer.Create(app => app.UseStaticFiles(new StaticFileOptions
{ {
RequestPath = new PathString(baseUrl), RequestPath = new PathString(baseUrl),
FileProvider = fileProvider FileProvider = fileProvider
})); }));
using var server = host.GetTestServer();
var fileInfo = fileProvider.GetFileInfo(Path.GetFileName(requestUrl)); var fileInfo = fileProvider.GetFileInfo(Path.GetFileName(requestUrl));
var response = await server.CreateRequest(requestUrl).SendAsync("HEAD"); var response = await server.CreateRequest(requestUrl).SendAsync("HEAD");
@ -235,11 +266,12 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir))) using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir)))
{ {
var server = StaticFilesTestServer.Create(app => app.UseStaticFiles(new StaticFileOptions using var host = await StaticFilesTestServer.Create(app => app.UseStaticFiles(new StaticFileOptions
{ {
RequestPath = new PathString(baseUrl), RequestPath = new PathString(baseUrl),
FileProvider = fileProvider FileProvider = fileProvider
})); }));
using var server = host.GetTestServer();
var response = await server.CreateRequest(requestUrl).SendAsync(method); var response = await server.CreateRequest(requestUrl).SendAsync(method);
Assert.Null(response.Content.Headers.LastModified); Assert.Null(response.Content.Headers.LastModified);
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);

View File

@ -4,17 +4,19 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Microsoft.AspNetCore.StaticFiles namespace Microsoft.AspNetCore.StaticFiles
{ {
public static class StaticFilesTestServer public static class StaticFilesTestServer
{ {
public static TestServer Create(Action<IApplicationBuilder> configureApp, Action<IServiceCollection> configureServices = null) public static async Task<IHost> Create(Action<IApplicationBuilder> configureApp, Action<IServiceCollection> configureServices = null)
{ {
Action<IServiceCollection> defaultConfigureServices = services => { }; Action<IServiceCollection> defaultConfigureServices = services => { };
var configuration = new ConfigurationBuilder() var configuration = new ConfigurationBuilder()
@ -23,11 +25,18 @@ namespace Microsoft.AspNetCore.StaticFiles
new KeyValuePair<string, string>("webroot", ".") new KeyValuePair<string, string>("webroot", ".")
}) })
.Build(); .Build();
var builder = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseTestServer()
.UseConfiguration(configuration) .UseConfiguration(configuration)
.Configure(configureApp) .Configure(configureApp)
.ConfigureServices(configureServices ?? defaultConfigureServices); .ConfigureServices(configureServices ?? defaultConfigureServices);
return new TestServer(builder); }).Build();
await host.StartAsync();
return host;
} }
} }
} }

View File

@ -1,24 +1,26 @@
using System;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
namespace EchoApp namespace EchoApp
{ {
public class Program public class Program
{ {
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseKestrel() .UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory()) .UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration() .UseIISIntegration()
.UseStartup<Startup>() .UseStartup<Startup>();
})
.Build(); .Build();
host.Run(); return host.RunAsync();
} }
} }
} }

View File

@ -1,34 +1,38 @@
using System; using System;
using System.IO; using System.IO;
using System.Net; using System.Net;
using System.Runtime.Loader; using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
namespace AutobahnTestApp namespace AutobahnTestApp
{ {
public class Program public class Program
{ {
public static void Main(string[] args) public static Task Main(string[] args)
{ {
var scenarioName = "Unknown"; var scenarioName = "Unknown";
var config = new ConfigurationBuilder() var config = new ConfigurationBuilder()
.AddCommandLine(args) .AddCommandLine(args)
.Build(); .Build();
var builder = new WebHostBuilder() var builder = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.ConfigureLogging(loggingBuilder => loggingBuilder.AddConsole()) .ConfigureLogging(loggingBuilder => loggingBuilder.AddConsole())
.UseConfiguration(config) .UseConfiguration(config)
.UseContentRoot(Directory.GetCurrentDirectory()) .UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration() .UseIISIntegration()
.UseStartup<Startup>(); .UseStartup<Startup>();
if (string.Equals(builder.GetSetting("server"), "Microsoft.AspNetCore.Server.HttpSys", System.StringComparison.Ordinal)) if (string.Equals(webHostBuilder.GetSetting("server"), "Microsoft.AspNetCore.Server.HttpSys", System.StringComparison.Ordinal))
{ {
scenarioName = "HttpSysServer"; scenarioName = "HttpSysServer";
Console.WriteLine("Using HttpSys server"); Console.WriteLine("Using HttpSys server");
builder.UseHttpSys(); webHostBuilder.UseHttpSys();
} }
else if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("ASPNETCORE_PORT"))) else if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("ASPNETCORE_PORT")))
{ {
@ -36,13 +40,13 @@ namespace AutobahnTestApp
// The port will not yet be configured at this point, but will also not require HTTPS. // The port will not yet be configured at this point, but will also not require HTTPS.
scenarioName = "AspNetCoreModule"; scenarioName = "AspNetCoreModule";
Console.WriteLine("Detected ANCM, using Kestrel"); Console.WriteLine("Detected ANCM, using Kestrel");
builder.UseKestrel(); webHostBuilder.UseKestrel();
} }
else else
{ {
// Also check "server.urls" for back-compat. // Also check "server.urls" for back-compat.
var urls = builder.GetSetting(WebHostDefaults.ServerUrlsKey) ?? builder.GetSetting("server.urls"); var urls = webHostBuilder.GetSetting(WebHostDefaults.ServerUrlsKey) ?? webHostBuilder.GetSetting("server.urls");
builder.UseSetting(WebHostDefaults.ServerUrlsKey, string.Empty); webHostBuilder.UseSetting(WebHostDefaults.ServerUrlsKey, string.Empty);
Console.WriteLine($"Using Kestrel, URL: {urls}"); Console.WriteLine($"Using Kestrel, URL: {urls}");
@ -53,7 +57,7 @@ namespace AutobahnTestApp
var uri = new Uri(urls); var uri = new Uri(urls);
builder.UseKestrel(options => webHostBuilder.UseKestrel(options =>
{ {
options.Listen(IPAddress.Loopback, uri.Port, listenOptions => options.Listen(IPAddress.Loopback, uri.Port, listenOptions =>
{ {
@ -71,6 +75,7 @@ namespace AutobahnTestApp
}); });
}); });
} }
});
var host = builder.Build(); var host = builder.Build();
@ -80,7 +85,7 @@ namespace AutobahnTestApp
}; };
Console.WriteLine($"Starting Server for Scenario: {scenarioName}"); Console.WriteLine($"Starting Server for Scenario: {scenarioName}");
host.Run(); return host.RunAsync();
} }
} }
} }

View File

@ -0,0 +1,33 @@
// Copyright (c) .NET Foundation. 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.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Hosting.Server;
using Microsoft.AspNetCore.Hosting.Server.Features;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Microsoft.AspNetCore.Hosting
{
public static class IHostPortExtensions
{
public static int GetPort(this IHost host)
{
return host.GetPorts().First();
}
public static IEnumerable<int> GetPorts(this IHost host)
{
return host.GetUris()
.Select(u => u.Port);
}
public static IEnumerable<Uri> GetUris(this IHost host)
{
return host.Services.GetService<IServer>().Features.Get<IServerAddressesFeature>().Addresses
.Select(a => new Uri(a));
}
}
}

View File

@ -1,30 +0,0 @@
// Copyright (c) .NET Foundation. 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.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Hosting.Server.Features;
namespace Microsoft.AspNetCore.Hosting
{
public static class IWebHostPortExtensions
{
public static int GetPort(this IWebHost host)
{
return host.GetPorts().First();
}
public static IEnumerable<int> GetPorts(this IWebHost host)
{
return host.GetUris()
.Select(u => u.Port);
}
public static IEnumerable<Uri> GetUris(this IWebHost host)
{
return host.ServerFeatures.Get<IServerAddressesFeature>().Addresses
.Select(a => new Uri(a));
}
}
}

View File

@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Microsoft.AspNetCore.WebSockets.Test namespace Microsoft.AspNetCore.WebSockets.Test
{ {
@ -48,7 +49,10 @@ namespace Microsoft.AspNetCore.WebSockets.Test
var config = configBuilder.Build(); var config = configBuilder.Build();
config["server.urls"] = $"http://127.0.0.1:0"; config["server.urls"] = $"http://127.0.0.1:0";
var host = new WebHostBuilder() var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.ConfigureServices(s => .ConfigureServices(s =>
{ {
s.AddWebSockets(configure); s.AddWebSockets(configure);
@ -56,8 +60,8 @@ namespace Microsoft.AspNetCore.WebSockets.Test
}) })
.UseConfiguration(config) .UseConfiguration(config)
.UseKestrel() .UseKestrel()
.Configure(startup) .Configure(startup);
.Build(); }).Build();
host.Start(); host.Start();
port = host.GetPort(); port = host.GetPort();