File: src\Servers\IIS\IIS\test\Common.FunctionalTests\Infrastructure\FunctionalTestsBase.cs
Web Access
Project: src\src\Servers\IIS\IIS\test\IIS.NewShim.FunctionalTests\IIS.NewShim.FunctionalTests.csproj (IIS.NewShim.FunctionalTests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Microsoft.AspNetCore.Server.IIS.FunctionalTests;
using Microsoft.AspNetCore.Server.IntegrationTesting.IIS;
using Microsoft.AspNetCore.InternalTesting;
using Xunit.Abstractions;
 
namespace Microsoft.AspNetCore.Server.IntegrationTesting;
 
public class FunctionalTestsBase : LoggedTest
{
    private const string DebugEnvironmentVariable = "ASPNETCORE_MODULE_DEBUG";
 
    public FunctionalTestsBase(ITestOutputHelper output = null) : base(output)
    {
    }
 
    protected IISDeployerBase _deployer;
    protected IISDeploymentResult _deploymentResult;
 
    protected ApplicationDeployer CreateDeployer(IISDeploymentParameters parameters)
    {
        if (parameters.ServerType == ServerType.IISExpress &&
            !parameters.EnvironmentVariables.ContainsKey(DebugEnvironmentVariable))
        {
            parameters.EnvironmentVariables[DebugEnvironmentVariable] = "console";
        }
 
        return IISApplicationDeployerFactory.Create(parameters, LoggerFactory);
    }
 
    protected virtual async Task<IISDeploymentResult> DeployAsync(IISDeploymentParameters parameters)
    {
        _deployer = (IISDeployerBase)CreateDeployer(parameters);
        return _deploymentResult = (IISDeploymentResult)await _deployer.DeployAsync();
    }
 
    protected virtual async Task<IISDeploymentResult> StartAsync(IISDeploymentParameters parameters)
    {
        var result = await DeployAsync(parameters);
        await result.AssertStarts();
        return result;
    }
 
    protected virtual async Task<string> GetStringAsync(IISDeploymentParameters parameters, string path)
    {
        var result = await DeployAsync(parameters);
        return await result.HttpClient.GetStringAsync(path);
    }
 
    public override void Dispose()
    {
        StopServer(false);
    }
 
    public void StopServer(bool gracefulShutdown = true)
    {
        _deploymentResult?.Dispose();
        _deployer?.Dispose(gracefulShutdown);
        _deployer = null;
    }
}