Fix retries with port selection (#12984)

This commit is contained in:
Justin Kotalik 2019-08-08 16:28:34 -07:00 committed by GitHub
parent d716ca9d62
commit a00bafd70f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 16 additions and 26 deletions

View File

@ -94,10 +94,9 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS
RunWebConfigActions(contentRoot);
var testUri = TestUriHelper.BuildTestUri(ServerType.IISExpress, DeploymentParameters.ApplicationBaseUriHint);
// Launch the host process.
var (actualUri, hostExitToken) = await StartIISExpressAsync(testUri, contentRoot);
var (actualUri, hostExitToken) = await StartIISExpressAsync(contentRoot);
Logger.LogInformation("Application ready at URL: {appUrl}", actualUri);
@ -152,27 +151,28 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS
return dllRoot;
}
private async Task<(Uri url, CancellationToken hostExitToken)> StartIISExpressAsync(Uri uri, string contentRoot)
private async Task<(Uri url, CancellationToken hostExitToken)> StartIISExpressAsync(string contentRoot)
{
using (Logger.BeginScope("StartIISExpress"))
{
var port = uri.Port;
if (port == 0)
{
port = (uri.Scheme == "https") ? TestPortHelper.GetNextSSLPort() : TestPortHelper.GetNextPort();
}
Logger.LogInformation("Attempting to start IIS Express on port: {port}", port);
PrepareConfig(contentRoot, port);
var parameters = string.IsNullOrEmpty(DeploymentParameters.ServerConfigLocation) ?
string.Format("/port:{0} /path:\"{1}\" /trace:error /systray:false", uri.Port, contentRoot) :
string.Format("/site:{0} /config:{1} /trace:error /systray:false", DeploymentParameters.SiteName, DeploymentParameters.ServerConfigLocation);
var iisExpressPath = GetIISExpressPath();
for (var attempt = 0; attempt < MaximumAttempts; attempt++)
{
var uri = TestUriHelper.BuildTestUri(ServerType.IISExpress, DeploymentParameters.ApplicationBaseUriHint);
var port = uri.Port;
if (port == 0)
{
port = (uri.Scheme == "https") ? TestPortHelper.GetNextSSLPort() : TestPortHelper.GetNextPort();
}
Logger.LogInformation("Attempting to start IIS Express on port: {port}", port);
PrepareConfig(contentRoot, port);
var parameters = string.IsNullOrEmpty(DeploymentParameters.ServerConfigLocation) ?
string.Format("/port:{0} /path:\"{1}\" /trace:error /systray:false", uri.Port, contentRoot) :
string.Format("/site:{0} /config:{1} /trace:error /systray:false", DeploymentParameters.SiteName, DeploymentParameters.ServerConfigLocation);
Logger.LogInformation("Executing command : {iisExpress} {parameters}", iisExpressPath, parameters);
var startInfo = new ProcessStartInfo
@ -264,8 +264,6 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS
Logger.LogInformation("Started iisexpress successfully. Process Id : {processId}, Port: {port}", _hostProcess.Id, port);
return (url: url, hostExitToken: hostExitTokenSource.Token);
}
ChangePort(contentRoot, (uri.Scheme == "https") ? TestPortHelper.GetNextSSLPort() : TestPortHelper.GetNextPort());
}
var message = $"Failed to initialize IIS Express after {MaximumAttempts} attempts to select a port";
@ -315,14 +313,6 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS
File.WriteAllText(DeploymentParameters.ServerConfigLocation, serverConfig);
}
private void ChangePort(string contentRoot, int port)
{
var serverConfig = File.ReadAllText(DeploymentParameters.ServerConfigLocation);
XDocument config = XDocument.Parse(serverConfig);
ConfigureModuleAndBinding(config.Root, contentRoot, port);
File.WriteAllText(DeploymentParameters.ServerConfigLocation, serverConfig);
}
private void AddAspNetCoreElement(XElement config)
{
var aspNetCore = config