use an available port for authority
This commit is contained in:
parent
4aacaf5e51
commit
6c100ff759
1 changed files with 23 additions and 6 deletions
|
|
@ -8,6 +8,8 @@ using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Sockets;
|
||||||
using Yavsc;
|
using Yavsc;
|
||||||
using Yavsc.Extensions;
|
using Yavsc.Extensions;
|
||||||
using Yavsc.Interfaces;
|
using Yavsc.Interfaces;
|
||||||
|
|
@ -39,7 +41,9 @@ namespace Yavsc.Org.Tests;
|
||||||
[CollectionDefinition("Yavsc Server")]
|
[CollectionDefinition("Yavsc Server")]
|
||||||
public sealed class WebServerFixture : WebHostFixture
|
public sealed class WebServerFixture : WebHostFixture
|
||||||
{
|
{
|
||||||
protected override int HttpsPort => 5101;
|
private static readonly int _httpsPort = GetAvailableLoopbackPort();
|
||||||
|
|
||||||
|
protected override int HttpsPort => _httpsPort;
|
||||||
|
|
||||||
private static IConfiguration? _sharedConfiguration;
|
private static IConfiguration? _sharedConfiguration;
|
||||||
private static SiteSettings? _sharedSiteSettings;
|
private static SiteSettings? _sharedSiteSettings;
|
||||||
|
|
@ -66,6 +70,8 @@ public sealed class WebServerFixture : WebHostFixture
|
||||||
|
|
||||||
protected override WebApplication BuildApp(WebApplicationBuilder builder)
|
protected override WebApplication BuildApp(WebApplicationBuilder builder)
|
||||||
{
|
{
|
||||||
|
var authority = $"https://localhost:{_httpsPort}";
|
||||||
|
|
||||||
// WebApplication.CreateBuilder defaults WebRootPath to
|
// WebApplication.CreateBuilder defaults WebRootPath to
|
||||||
// {ContentRoot}/wwwroot. The test assembly runs from
|
// {ContentRoot}/wwwroot. The test assembly runs from
|
||||||
// src/Yavsc.Org.Tests/bin/.../, which has no wwwroot of
|
// src/Yavsc.Org.Tests/bin/.../, which has no wwwroot of
|
||||||
|
|
@ -83,11 +89,7 @@ public sealed class WebServerFixture : WebHostFixture
|
||||||
["Smtp:Port"] = "465",
|
["Smtp:Port"] = "465",
|
||||||
["Smtp:UserName"] = "test-user",
|
["Smtp:UserName"] = "test-user",
|
||||||
["Smtp:Password"] = "test-pass",
|
["Smtp:Password"] = "test-pass",
|
||||||
// Kestrel test config: override the default port from
|
["Site:Authority"] = authority
|
||||||
// WebApplication.CreateBuilder() so that the test host
|
|
||||||
// binds to the same port as the production host would.
|
|
||||||
["Kestrel:Endpoints:Http:Url"] = "http://localhost:5100",
|
|
||||||
["Kestrel:Endpoints:Https:Url"] = builder.Configuration["Site:Authority"] ?? "https://localhost:5101"
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Configuration = builder.Configuration;
|
Configuration = builder.Configuration;
|
||||||
|
|
@ -283,4 +285,19 @@ public sealed class WebServerFixture : WebHostFixture
|
||||||
TestingUser = dbContext.Users.FirstOrDefault(u => u.UserName == testingUserName);
|
TestingUser = dbContext.Users.FirstOrDefault(u => u.UserName == testingUserName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static int GetAvailableLoopbackPort()
|
||||||
|
{
|
||||||
|
var listener = new TcpListener(IPAddress.Loopback, 0);
|
||||||
|
listener.Start();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return ((IPEndPoint)listener.LocalEndpoint).Port;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
listener.Stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue