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); } } }