A rule whose topic applies but whose way of measuring needs a newer version or patch now gives the new outcome ManualCheck with concrete Danish guidance, instead of NotApplicable. It is marked explicitly per rule (IRule.ManualCheck) and only used when every missing capability is a measurement capability (InstanceCapabilities.IsMeasurement): CHECKDB status (SQLI-DB-009), VLFs (SQLI-DB-011), spills and memory grants (SQLI-PLAN-004/005) and deadlocks on 2005 (SQLI-DLK-001). Query Store, AG and Azure-managed topics stay "not relevant". Shown in a visible "Skal tjekkes manuelt" section on the instance page, a KPI on the overview, a "Tjek manuelt" column in the management report's controls, manualChecks in /api/v1/instances and manualCheck in rule-states; not counted as not measurable. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
31 lines
1.6 KiB
C#
31 lines
1.6 KiB
C#
using SQLInsight.Reports;
|
||
using SQLInsight.Repository;
|
||
using SQLInsight.Rules.Engine;
|
||
|
||
namespace SQLInsight.Agent.Tests;
|
||
|
||
public class ComplianceControlTests
|
||
{
|
||
private static readonly ComplianceControl Integrity = ComplianceControl.All.Single(c => c.Name == "Integritetstjek");
|
||
|
||
[Fact]
|
||
public void Control_whose_core_rule_does_not_apply_to_the_version_is_not_counted_as_not_measured()
|
||
{
|
||
var states = new[]
|
||
{
|
||
new InstanceRuleState("KGAA-S05", "SQLI-DB-009", RuleOutcome.NotApplicable, "Ikke relevant for SQL Server 2005"),
|
||
new InstanceRuleState("KGAA-S05", "SQLI-DB-010", RuleOutcome.Passed, null),
|
||
new InstanceRuleState("SQL01", "SQLI-DB-009", RuleOutcome.NotMeasurable, "Adgang nægtet"),
|
||
new InstanceRuleState("SQL02", "SQLI-DB-009", RuleOutcome.Passed, null),
|
||
new InstanceRuleState("SQL03", "SQLI-DB-010", RuleOutcome.Findings, null),
|
||
new InstanceRuleState("SQL2014", "SQLI-DB-009", RuleOutcome.ManualCheck, "Kan ikke måles på SQL Server 2014 – tjek manuelt"),
|
||
new InstanceRuleState("SQL2014", "SQLI-DB-010", RuleOutcome.Passed, null),
|
||
};
|
||
|
||
Assert.Equal(ControlStatus.NotApplicable, Integrity.StatusOn("KGAA-S05", states));
|
||
Assert.Equal(ControlStatus.NotMeasured, Integrity.StatusOn("SQL01", states)); // a real gap stays a gap
|
||
Assert.Equal(ControlStatus.Met, Integrity.StatusOn("SQL02", states));
|
||
Assert.Equal(ControlStatus.NotMet, Integrity.StatusOn("SQL03", states)); // a finding always counts
|
||
Assert.Equal(ControlStatus.ManualCheck, Integrity.StatusOn("SQL2014", states)); // relevant, but checked by hand
|
||
}
|
||
}
|