Files
StoreWeb/Tests/PluginLoadingSmoke/ConfigurationChecks.cs
T

54 lines
3.2 KiB
C#

using MAX.Plugins;
using Microsoft.Extensions.Hosting;
internal static class ConfigurationChecks
{
public static void Run()
{
var tempRoot = Path.GetFullPath(Path.GetTempPath());
var directory = Path.GetFullPath(Path.Combine(tempRoot, "StorePluginChecks-" + Guid.NewGuid().ToString("N")));
Directory.CreateDirectory(directory);
try
{
var environment = Host.CreateApplicationBuilder().Environment;
environment.EnvironmentName = "PluginTest";
var first = Path.Combine(directory, "First");
var second = Path.Combine(directory, "Second");
Directory.CreateDirectory(first);
Directory.CreateDirectory(second);
File.WriteAllText(Path.Combine(first, "appsettings.json"), """{"Shared":"first","Required":"present"}""");
File.WriteAllText(Path.Combine(first, "appsettings.PluginTest.json"), """{"Shared":"environment"}""");
File.WriteAllText(Path.Combine(second, "appsettings.json"), """{"Shared":"second"}""");
using var a = new PluginContext("First", first, environment);
using var b = new PluginContext("Second", second, environment);
if (a.Configuration["Shared"] != "environment" || b.Configuration["Shared"] != "second")
throw new Exception("Configuration isolation/environment override failed");
if (a.RequireConfiguration("Required") != "present") throw new Exception("Required setting missing");
try { b.RequireConfiguration("Required"); throw new Exception("Expected missing key failure"); }
catch (InvalidOperationException ex) when (ex.Message.Contains("Second") && ex.Message.Contains("Required")) { }
const string envKey = "Plugins__First__Shared";
var previous = System.Environment.GetEnvironmentVariable(envKey);
try
{
System.Environment.SetEnvironmentVariable(envKey, "specific-environment-variable");
using var overridden = new PluginContext("First", first, environment);
using var untouched = new PluginContext("Second", second, environment);
if (overridden.Configuration["Shared"] != "specific-environment-variable" || untouched.Configuration["Shared"] != "second")
throw new Exception("Plugin environment variable isolation failed");
}
finally { System.Environment.SetEnvironmentVariable(envKey, previous); }
var absent = Path.Combine(directory, "Absent");
Directory.CreateDirectory(absent);
try { using var invalid = new PluginContext("Absent", absent, environment); throw new Exception("Expected missing file failure"); }
catch (FileNotFoundException) { }
Console.WriteLine("PASS configuration isolation, environment overrides, missing file/key validation");
}
finally
{
if (!directory.StartsWith(tempRoot.TrimEnd(Path.DirectorySeparatorChar) + Path.DirectorySeparatorChar, StringComparison.OrdinalIgnoreCase))
throw new InvalidOperationException("Unexpected fixture path");
Directory.Delete(directory, recursive: true);
}
}
}