using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; namespace SQLInsight.Agent.Tests; public sealed class InstallerSettingsTests : IDisposable { private readonly string _folder = Path.Combine(Path.GetTempPath(), "sqlinsight-ini-" + Guid.NewGuid().ToString("N")); public InstallerSettingsTests() { Directory.CreateDirectory(_folder); File.WriteAllText(Path.Combine(_folder, "appsettings.json"), """ { "SQLInsight": { "Repository": { "ConnectionString": "eksempel" }, "Tick": "00:00:15", "MaxParallelInstances": 4 } } """); File.WriteAllText(Path.Combine(_folder, InstallerSettings.FileName), """ [SQLInsight:Repository] ConnectionString=Server=sqlmon01;Database=SQLInsight;Integrated Security=true [SQLInsight:Instances:0] Name=sql01 Server=sql01 [SQLInsight] Tick=00:00:30 """); } public void Dispose() => Directory.Delete(_folder, recursive: true); private HostApplicationBuilder Builder(params string[] args) { var builder = Host.CreateApplicationBuilder(new HostApplicationBuilderSettings { ContentRootPath = _folder, Args = args, EnvironmentName = "Production" }); InstallerSettings.Add(builder.Configuration, _folder); return builder; } [Fact] public void Installer_values_override_the_examples_in_appsettings_json() { var options = Builder().Configuration.GetSection(AgentOptions.SectionName).Get()!; Assert.Equal("Server=sqlmon01;Database=SQLInsight;Integrated Security=true", options.Repository.ConnectionString); Assert.Equal("sql01", Assert.Single(options.Instances).Server); Assert.Equal(TimeSpan.FromSeconds(30), options.Tick); Assert.Equal(4, options.MaxParallelInstances); } [Fact] public void Command_line_still_overrides_the_installer_values() { var configuration = Builder("--SQLInsight:Repository:ConnectionString=fra-kommandolinjen").Configuration; Assert.Equal("fra-kommandolinjen", configuration["SQLInsight:Repository:ConnectionString"]); } [Fact] public void Missing_file_is_fine() { File.Delete(Path.Combine(_folder, InstallerSettings.FileName)); Assert.Equal("eksempel", Builder().Configuration["SQLInsight:Repository:ConnectionString"]); } }