Some checks are pending
CI / Build og unit tests (push) Waiting to run
CI / Integration (mcr.microsoft.com/mssql/server:2017-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2019-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2022-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2025-latest) (push) Blocked by required conditions
- Availability group collector (replica and database replica states, queues, commit times) and rules: SQLI-AG-001 unhealthy/disconnected replica or suspended data movement (scripts HADR RESUME), SQLI-AG-002 secondary behind (estimated data loss and redo time) - SQL Agent collector using only granted msdb tables (no EXECUTE on msdb functions): SQLI-JOB-001 failed job with the failing step's message (backup/CHECKDB jobs are High), SQLI-JOB-002 SQL Agent not running - Integration tests create a real availability group (CLUSTER_TYPE NONE) and a failing job in the test container (HADR and Agent enabled) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E3EExwndy8Z22EK2Qpt6BK
79 lines
2.9 KiB
C#
79 lines
2.9 KiB
C#
using SQLInsight.Collectors.Concurrency;
|
||
using SQLInsight.Collectors.Databases;
|
||
using SQLInsight.Core.Instances;
|
||
|
||
namespace SQLInsight.Collectors.Tests;
|
||
|
||
/// <summary>
|
||
/// The version-specific SQL that cannot be run in CI (SQL Server 2000–2016 have no containers).
|
||
/// </summary>
|
||
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));
|
||
}
|
||
}
|