fix: initialize selected runtime for live playout
This commit is contained in:
@@ -179,7 +179,7 @@ public sealed class LegacyIniDatabaseOptionsLoaderTests
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Runtime_DevelopmentLiveUsesOnlyExactLocalAppDataIni()
|
||||
public void Runtime_DevelopmentLiveUsesProtectedLocalAppDataIniWhenNoOperatorResIsSelected()
|
||||
{
|
||||
using var localApplicationData = TemporaryDirectory.Create();
|
||||
var resourceDirectory = Path.Combine(
|
||||
@@ -200,7 +200,8 @@ public sealed class LegacyIniDatabaseOptionsLoaderTests
|
||||
environmentName,
|
||||
"stale-environment.invalid");
|
||||
runtime = DatabaseRuntime.CreateDevelopmentLiveLocalOverride(
|
||||
localApplicationData.Path);
|
||||
localApplicationData.Path,
|
||||
operatorResourceDirectory: null);
|
||||
}
|
||||
finally
|
||||
{
|
||||
@@ -213,6 +214,170 @@ public sealed class LegacyIniDatabaseOptionsLoaderTests
|
||||
Assert.Equal("maria.dev.invalid", runtime.Options.MariaDb.Host);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Runtime_DevelopmentLiveSelectedResIniIsAuthoritativeAndIgnoresEnvironment()
|
||||
{
|
||||
using var localApplicationData = TemporaryDirectory.Create();
|
||||
var protectedResourceDirectory = Path.Combine(
|
||||
localApplicationData.Path,
|
||||
"MBN_STOCK_WEBVIEW",
|
||||
"Res");
|
||||
Directory.CreateDirectory(protectedResourceDirectory);
|
||||
File.WriteAllBytes(
|
||||
Path.Combine(protectedResourceDirectory, "MmoneyCoder.ini"),
|
||||
TemporaryLegacyIni.ValidUtf8Bytes());
|
||||
using var selected = TemporaryLegacyIni.Create(Encoding.UTF8.GetBytes(
|
||||
"""
|
||||
[Oracle]
|
||||
ConnectionName=selected.oracle.invalid:1523/SELECTED
|
||||
ID=selected-oracle-user
|
||||
Pass=selected-oracle-password
|
||||
[Maria]
|
||||
ConnectionName=selected.maria.invalid:3308/selected_stock
|
||||
ID=selected-maria-user
|
||||
Pass=selected-maria-password
|
||||
"""));
|
||||
|
||||
var environmentOverrides = new Dictionary<string, string>
|
||||
{
|
||||
["MBN_STOCK_ORACLE_HOST"] = "stale-environment.invalid",
|
||||
["MBN_STOCK_ORACLE_PORT"] = "not-an-integer",
|
||||
["MBN_STOCK_MARIADB_TLS_MODE"] = "Required"
|
||||
};
|
||||
var originalEnvironment = environmentOverrides.Keys.ToDictionary(
|
||||
static name => name,
|
||||
Environment.GetEnvironmentVariable,
|
||||
StringComparer.Ordinal);
|
||||
DatabaseRuntime runtime;
|
||||
try
|
||||
{
|
||||
foreach (var pair in environmentOverrides)
|
||||
{
|
||||
Environment.SetEnvironmentVariable(pair.Key, pair.Value);
|
||||
}
|
||||
|
||||
runtime = DatabaseRuntime.CreateDevelopmentLiveLocalOverride(
|
||||
localApplicationData.Path,
|
||||
selected.Directory);
|
||||
}
|
||||
finally
|
||||
{
|
||||
foreach (var pair in originalEnvironment)
|
||||
{
|
||||
Environment.SetEnvironmentVariable(pair.Key, pair.Value);
|
||||
}
|
||||
}
|
||||
|
||||
Assert.Equal("selected.oracle.invalid", runtime.Options.Oracle.Host);
|
||||
Assert.Equal(1523, runtime.Options.Oracle.Port);
|
||||
Assert.Equal("SELECTED", runtime.Options.Oracle.Sid);
|
||||
Assert.Equal("selected.maria.invalid", runtime.Options.MariaDb.Host);
|
||||
Assert.Equal(3308, runtime.Options.MariaDb.Port);
|
||||
Assert.Equal("selected_stock", runtime.Options.MariaDb.Database);
|
||||
Assert.Equal(MariaDbTlsMode.Disabled, runtime.Options.MariaDb.TlsMode);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Runtime_DevelopmentLiveReadsSelectedIniOnEveryCreation()
|
||||
{
|
||||
using var selected = TemporaryLegacyIni.Create(Encoding.UTF8.GetBytes(
|
||||
"""
|
||||
[Oracle]
|
||||
ConnectionName=first.oracle.invalid:1521/FIRST
|
||||
ID=oracle-user
|
||||
Pass=oracle-password
|
||||
[Maria]
|
||||
ConnectionName=first.maria.invalid:3306/first_stock
|
||||
ID=maria-user
|
||||
Pass=maria-password
|
||||
"""));
|
||||
|
||||
var first = DatabaseRuntime.CreateDevelopmentLiveLocalOverride(selected.Directory);
|
||||
File.WriteAllBytes(selected.Path, Encoding.UTF8.GetBytes(
|
||||
"""
|
||||
[Oracle]
|
||||
ConnectionName=second.oracle.invalid:1521/SECOND
|
||||
ID=oracle-user
|
||||
Pass=oracle-password
|
||||
[Maria]
|
||||
ConnectionName=second.maria.invalid:3306/second_stock
|
||||
ID=maria-user
|
||||
Pass=maria-password
|
||||
"""));
|
||||
var second = DatabaseRuntime.CreateDevelopmentLiveLocalOverride(selected.Directory);
|
||||
|
||||
Assert.Equal("first.oracle.invalid", first.Options.Oracle.Host);
|
||||
Assert.Equal("first.maria.invalid", first.Options.MariaDb.Host);
|
||||
Assert.Equal("second.oracle.invalid", second.Options.Oracle.Host);
|
||||
Assert.Equal("second.maria.invalid", second.Options.MariaDb.Host);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Runtime_DevelopmentLiveSelectedResDoesNotDependOnLocalAppDataRoot()
|
||||
{
|
||||
using var selected = TemporaryLegacyIni.CreateValidUtf8();
|
||||
|
||||
var runtime = DatabaseRuntime.CreateDevelopmentLiveLocalOverride(
|
||||
localApplicationData: string.Empty,
|
||||
operatorResourceDirectory: selected.Directory);
|
||||
|
||||
Assert.Equal("oracle.dev.invalid", runtime.Options.Oracle.Host);
|
||||
Assert.Equal("maria.dev.invalid", runtime.Options.MariaDb.Host);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Runtime_DevelopmentLiveSelectedResDoesNotFallBackWhenExactIniIsMissing()
|
||||
{
|
||||
using var localApplicationData = TemporaryDirectory.Create();
|
||||
var protectedResourceDirectory = Path.Combine(
|
||||
localApplicationData.Path,
|
||||
"MBN_STOCK_WEBVIEW",
|
||||
"Res");
|
||||
Directory.CreateDirectory(protectedResourceDirectory);
|
||||
File.WriteAllBytes(
|
||||
Path.Combine(protectedResourceDirectory, "MmoneyCoder.ini"),
|
||||
TemporaryLegacyIni.ValidUtf8Bytes());
|
||||
using var selectedResourceDirectory = TemporaryDirectory.Create();
|
||||
File.WriteAllBytes(
|
||||
Path.Combine(selectedResourceDirectory.Path, "MmoneyCoder.ini.bak"),
|
||||
TemporaryLegacyIni.ValidUtf8Bytes());
|
||||
|
||||
Assert.Throws<DatabaseConfigurationException>(
|
||||
() => DatabaseRuntime.CreateDevelopmentLiveLocalOverride(
|
||||
localApplicationData.Path,
|
||||
selectedResourceDirectory.Path));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Runtime_DevelopmentLiveSelectedResDoesNotFallBackWhenIniIsInvalid()
|
||||
{
|
||||
const string secret = "selected-secret-sentinel";
|
||||
using var localApplicationData = TemporaryDirectory.Create();
|
||||
var protectedResourceDirectory = Path.Combine(
|
||||
localApplicationData.Path,
|
||||
"MBN_STOCK_WEBVIEW",
|
||||
"Res");
|
||||
Directory.CreateDirectory(protectedResourceDirectory);
|
||||
File.WriteAllBytes(
|
||||
Path.Combine(protectedResourceDirectory, "MmoneyCoder.ini"),
|
||||
TemporaryLegacyIni.ValidUtf8Bytes());
|
||||
using var selected = TemporaryLegacyIni.Create(Encoding.UTF8.GetBytes(
|
||||
"""
|
||||
[Oracle]
|
||||
ConnectionName=invalid
|
||||
ID=oracle-user
|
||||
Pass=selected-secret-sentinel
|
||||
"""));
|
||||
|
||||
var exception = Assert.Throws<DatabaseConfigurationException>(
|
||||
() => DatabaseRuntime.CreateDevelopmentLiveLocalOverride(
|
||||
localApplicationData.Path,
|
||||
selected.Directory));
|
||||
|
||||
Assert.DoesNotContain(secret, exception.ToString(), StringComparison.Ordinal);
|
||||
Assert.DoesNotContain(selected.Path, exception.ToString(), StringComparison.Ordinal);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Runtime_DevelopmentLiveFailsClosedWhenBothProtectedProfilesAreMissing()
|
||||
{
|
||||
@@ -224,7 +389,8 @@ public sealed class LegacyIniDatabaseOptionsLoaderTests
|
||||
|
||||
Assert.Throws<DatabaseConfigurationException>(
|
||||
() => DatabaseRuntime.CreateDevelopmentLiveLocalOverride(
|
||||
localApplicationData.Path));
|
||||
localApplicationData.Path,
|
||||
operatorResourceDirectory: null));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -260,7 +426,8 @@ public sealed class LegacyIniDatabaseOptionsLoaderTests
|
||||
""");
|
||||
|
||||
var runtime = DatabaseRuntime.CreateDevelopmentLiveLocalOverride(
|
||||
localApplicationData.Path);
|
||||
localApplicationData.Path,
|
||||
operatorResourceDirectory: null);
|
||||
|
||||
Assert.Equal("json.oracle.invalid", runtime.Options.Oracle.Host);
|
||||
Assert.Equal("json.maria.invalid", runtime.Options.MariaDb.Host);
|
||||
@@ -280,7 +447,8 @@ public sealed class LegacyIniDatabaseOptionsLoaderTests
|
||||
|
||||
Assert.Throws<DatabaseConfigurationException>(
|
||||
() => DatabaseRuntime.CreateDevelopmentLiveLocalOverride(
|
||||
localApplicationData.Path));
|
||||
localApplicationData.Path,
|
||||
operatorResourceDirectory: null));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -296,7 +464,8 @@ public sealed class LegacyIniDatabaseOptionsLoaderTests
|
||||
|
||||
Assert.Throws<DatabaseConfigurationException>(
|
||||
() => DatabaseRuntime.CreateDevelopmentLiveLocalOverride(
|
||||
localApplicationData.Path));
|
||||
localApplicationData.Path,
|
||||
operatorResourceDirectory: null));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
Reference in New Issue
Block a user