89 lines
3.1 KiB
C#
89 lines
3.1 KiB
C#
namespace StellaOps.Remediation.WebService.Tests;
|
|
|
|
[CollectionDefinition(Name, DisableParallelization = true)]
|
|
public sealed class RemediationEnvironmentCollection
|
|
{
|
|
public const string Name = "RemediationEnvironment";
|
|
}
|
|
|
|
internal sealed class RemediationEnvironmentScope : IDisposable
|
|
{
|
|
private static readonly string[] ManagedKeys =
|
|
[
|
|
"DOTNET_ENVIRONMENT",
|
|
"ASPNETCORE_ENVIRONMENT",
|
|
"REMEDIATION__STORAGE__DRIVER",
|
|
"REMEDIATION__STORAGE__POSTGRES__CONNECTIONSTRING",
|
|
"CONNECTIONSTRINGS__DEFAULT"
|
|
];
|
|
|
|
private readonly Dictionary<string, string?> _originalValues = new(StringComparer.Ordinal);
|
|
|
|
private RemediationEnvironmentScope()
|
|
{
|
|
foreach (var key in ManagedKeys)
|
|
{
|
|
_originalValues[key] = Environment.GetEnvironmentVariable(key);
|
|
}
|
|
}
|
|
|
|
public static RemediationEnvironmentScope InMemoryTestingProfile()
|
|
{
|
|
var scope = new RemediationEnvironmentScope();
|
|
scope.Set("DOTNET_ENVIRONMENT", "Testing");
|
|
scope.Set("ASPNETCORE_ENVIRONMENT", "Testing");
|
|
scope.Set("REMEDIATION__STORAGE__DRIVER", "inmemory");
|
|
scope.Set("REMEDIATION__STORAGE__POSTGRES__CONNECTIONSTRING", null);
|
|
scope.Set("CONNECTIONSTRINGS__DEFAULT", null);
|
|
return scope;
|
|
}
|
|
|
|
public static RemediationEnvironmentScope PostgresWithoutConnection(string environmentName)
|
|
{
|
|
var scope = new RemediationEnvironmentScope();
|
|
scope.Set("DOTNET_ENVIRONMENT", environmentName);
|
|
scope.Set("ASPNETCORE_ENVIRONMENT", environmentName);
|
|
scope.Set("REMEDIATION__STORAGE__DRIVER", "postgres");
|
|
scope.Set("REMEDIATION__STORAGE__POSTGRES__CONNECTIONSTRING", null);
|
|
scope.Set("CONNECTIONSTRINGS__DEFAULT", null);
|
|
return scope;
|
|
}
|
|
|
|
public static RemediationEnvironmentScope InMemoryDriver(string environmentName)
|
|
{
|
|
var scope = new RemediationEnvironmentScope();
|
|
scope.Set("DOTNET_ENVIRONMENT", environmentName);
|
|
scope.Set("ASPNETCORE_ENVIRONMENT", environmentName);
|
|
scope.Set("REMEDIATION__STORAGE__DRIVER", "inmemory");
|
|
scope.Set("REMEDIATION__STORAGE__POSTGRES__CONNECTIONSTRING", null);
|
|
scope.Set("CONNECTIONSTRINGS__DEFAULT", null);
|
|
return scope;
|
|
}
|
|
|
|
public static RemediationEnvironmentScope PostgresWithConnection(
|
|
string environmentName,
|
|
string connectionString)
|
|
{
|
|
var scope = new RemediationEnvironmentScope();
|
|
scope.Set("DOTNET_ENVIRONMENT", environmentName);
|
|
scope.Set("ASPNETCORE_ENVIRONMENT", environmentName);
|
|
scope.Set("REMEDIATION__STORAGE__DRIVER", "postgres");
|
|
scope.Set("REMEDIATION__STORAGE__POSTGRES__CONNECTIONSTRING", connectionString);
|
|
scope.Set("CONNECTIONSTRINGS__DEFAULT", connectionString);
|
|
return scope;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
foreach (var entry in _originalValues)
|
|
{
|
|
Environment.SetEnvironmentVariable(entry.Key, entry.Value);
|
|
}
|
|
}
|
|
|
|
private void Set(string key, string? value)
|
|
{
|
|
Environment.SetEnvironmentVariable(key, value);
|
|
}
|
|
}
|