using SQLInsight.Connectivity; using SQLInsight.Core.Instances; using SQLInsight.Rules; using SQLInsight.Rules.Engine; namespace SQLInsight.IntegrationTests; [Collection(SqlServerTestGroup.Name)] [Trait("Category", "Integration")] public class InstanceProbeTests(SqlServerFixture sql) { private ConnectionTarget SaTarget => new() { Server = sql.Server, Authentication = AuthenticationMode.SqlLogin, UserName = "sa", Password = new Microsoft.Data.SqlClient.SqlConnectionStringBuilder(sql.SaConnectionString).Password, Provider = ConnectionProvider.SqlClient, // Test containers use a self-signed certificate. A deliberate choice, as the README requires. TrustServerCertificate = true, }; [Fact] public async Task Detects_release_matching_the_container_image() { await using var opened = await new SqlConnectionFactory().OpenAsync(SaTarget); var info = await InstanceProbe.DetectAsync(opened.Connection); var expectedYear = SqlServerFixture.Image.Split(':')[1][..4]; Assert.Equal(expectedYear, ((int)info.Release).ToString(System.Globalization.CultureInfo.InvariantCulture)); Assert.Equal(EngineEdition.Enterprise, info.EngineEdition); // Developer edition reports Enterprise. Assert.False(string.IsNullOrEmpty(info.ServerName)); } [Fact] public async Task Full_pipeline_evaluates_every_built_in_rule() { await using var opened = await new SqlConnectionFactory().OpenAsync(SaTarget); var info = await InstanceProbe.DetectAsync(opened.Connection); var context = new RuleContext(info, InstanceCapabilities.From(info), DateTimeOffset.UtcNow); var results = new RuleEngine(BuiltInRules.Create()).Evaluate(context); Assert.NotEmpty(results); Assert.DoesNotContain(results, r => r.Outcome == RuleOutcome.Error); } }