using SQLInsight.Collectors.Concurrency; using SQLInsight.Collectors.Databases; using SQLInsight.Core.Instances; namespace SQLInsight.Collectors.Tests; /// /// The version-specific SQL that cannot be run in CI (SQL Server 2000–2016 have no containers). /// public class SqlSelectionTests { private static InstanceInfo Instance(string version) => new() { ServerName = "x", Version = SqlServerVersion.Parse(version), Edition = "Standard", EngineEdition = EngineEdition.Standard, }; [Theory] [InlineData("8.00.2039", "master.dbo.sysprocesses WHERE spid = 1")] [InlineData("9.00.5000.00", "sys.databases WHERE database_id = 2")] [InlineData("10.50.6000.34", "sqlserver_start_time")] public void Start_time_source_per_version(string version, string expected) { Assert.Contains(expected, Db.StartTimeExpression(SqlServerVersion.Parse(version)), StringComparison.Ordinal); } [Fact] public void Blocking_on_2008_counts_transactions_without_open_transaction_count() { var sql = BlockingCollector.BuildSql2005(SqlServerVersion.Parse("10.50.6000.34")); Assert.Contains("sys.dm_tran_session_transactions", sql, StringComparison.Ordinal); Assert.DoesNotContain("open_transaction_count", sql, StringComparison.Ordinal); Assert.DoesNotContain("s.database_id", sql, StringComparison.Ordinal); } [Fact] public void Databases_on_2012_detect_availability_groups_and_skip_checkdb_property() { var instance = Instance("11.0.7001.0"); var sql = DatabaseCollector.BuildSql2005(instance, InstanceCapabilities.From(instance)); Assert.Contains("sys.dm_hadr_database_replica_states", sql, StringComparison.Ordinal); Assert.DoesNotContain("LastGoodCheckDbTime", sql, StringComparison.Ordinal); } [Fact] public void Databases_on_2005_do_not_touch_hadr() { var instance = Instance("9.00.5000.00"); var sql = DatabaseCollector.BuildSql2005(instance, InstanceCapabilities.From(instance)); Assert.DoesNotContain("hadr", sql, StringComparison.OrdinalIgnoreCase); Assert.DoesNotContain("replica_id", sql, StringComparison.Ordinal); } [Fact] public void Deadlock_file_read_continues_from_last_position_with_escaped_literal() { var sql = DeadlockCollector.BuildFileSql("/var/opt/mssql/log/system_health_0_1'2.xel", 12345); Assert.Contains("N'/var/opt/mssql/log/system_health_0_1''2.xel', 12345", sql, StringComparison.Ordinal); } } public class AgentJobTimeTests { [Theory] [InlineData(20260929, 130507, "2026-09-29 13:05:07")] [InlineData(20260101, 5, "2026-01-01 00:00:05")] public void Converts_msdb_run_date_and_time(int date, int time, string expected) { Assert.Equal(DateTime.Parse(expected, System.Globalization.CultureInfo.InvariantCulture), SQLInsight.Collectors.Instance.AgentJobCollector.ToDateTime(date, time)); } }