audit work, doctors work

This commit is contained in:
master
2026-01-12 23:39:07 +02:00
parent 9330c64349
commit b8868a5f13
80 changed files with 12659 additions and 87 deletions

View File

@@ -0,0 +1,190 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging.Abstractions;
using StellaOps.Doctor.Models;
using StellaOps.Doctor.Plugins;
using StellaOps.Doctor.Plugins.Database;
using Xunit;
namespace StellaOps.Doctor.Plugins.Database.Tests;
[Trait("Category", "Unit")]
public class DatabasePluginTests
{
[Fact]
public void PluginId_ReturnsExpectedValue()
{
var plugin = new DatabasePlugin();
Assert.Equal("stellaops.doctor.database", plugin.PluginId);
}
[Fact]
public void DisplayName_ReturnsExpectedValue()
{
var plugin = new DatabasePlugin();
Assert.Equal("Database", plugin.DisplayName);
}
[Fact]
public void Category_ReturnsDatabase()
{
var plugin = new DatabasePlugin();
Assert.Equal(DoctorCategory.Database, plugin.Category);
}
[Fact]
public void Version_ReturnsValidVersion()
{
var plugin = new DatabasePlugin();
Assert.NotNull(plugin.Version);
Assert.True(plugin.Version >= new Version(1, 0, 0));
}
[Fact]
public void MinEngineVersion_ReturnsValidVersion()
{
var plugin = new DatabasePlugin();
Assert.NotNull(plugin.MinEngineVersion);
Assert.True(plugin.MinEngineVersion >= new Version(1, 0, 0));
}
[Fact]
public void IsAvailable_ReturnsTrue()
{
var plugin = new DatabasePlugin();
var services = new ServiceCollection().BuildServiceProvider();
Assert.True(plugin.IsAvailable(services));
}
[Fact]
public void GetChecks_ReturnsEightChecks()
{
var plugin = new DatabasePlugin();
var context = CreateTestContext();
var checks = plugin.GetChecks(context);
Assert.Equal(8, checks.Count);
}
[Fact]
public void GetChecks_ContainsDatabaseConnectionCheck()
{
var plugin = new DatabasePlugin();
var context = CreateTestContext();
var checks = plugin.GetChecks(context);
Assert.Contains(checks, c => c.CheckId == "check.db.connection");
}
[Fact]
public void GetChecks_ContainsPendingMigrationsCheck()
{
var plugin = new DatabasePlugin();
var context = CreateTestContext();
var checks = plugin.GetChecks(context);
Assert.Contains(checks, c => c.CheckId == "check.db.migrations.pending");
}
[Fact]
public void GetChecks_ContainsFailedMigrationsCheck()
{
var plugin = new DatabasePlugin();
var context = CreateTestContext();
var checks = plugin.GetChecks(context);
Assert.Contains(checks, c => c.CheckId == "check.db.migrations.failed");
}
[Fact]
public void GetChecks_ContainsSchemaVersionCheck()
{
var plugin = new DatabasePlugin();
var context = CreateTestContext();
var checks = plugin.GetChecks(context);
Assert.Contains(checks, c => c.CheckId == "check.db.schema.version");
}
[Fact]
public void GetChecks_ContainsConnectionPoolHealthCheck()
{
var plugin = new DatabasePlugin();
var context = CreateTestContext();
var checks = plugin.GetChecks(context);
Assert.Contains(checks, c => c.CheckId == "check.db.pool.health");
}
[Fact]
public void GetChecks_ContainsConnectionPoolSizeCheck()
{
var plugin = new DatabasePlugin();
var context = CreateTestContext();
var checks = plugin.GetChecks(context);
Assert.Contains(checks, c => c.CheckId == "check.db.pool.size");
}
[Fact]
public void GetChecks_ContainsQueryLatencyCheck()
{
var plugin = new DatabasePlugin();
var context = CreateTestContext();
var checks = plugin.GetChecks(context);
Assert.Contains(checks, c => c.CheckId == "check.db.latency");
}
[Fact]
public void GetChecks_ContainsDatabasePermissionsCheck()
{
var plugin = new DatabasePlugin();
var context = CreateTestContext();
var checks = plugin.GetChecks(context);
Assert.Contains(checks, c => c.CheckId == "check.db.permissions");
}
[Fact]
public async Task InitializeAsync_CompletesSuccessfully()
{
var plugin = new DatabasePlugin();
var context = CreateTestContext();
await plugin.InitializeAsync(context, CancellationToken.None);
// Should complete without throwing
}
private static DoctorPluginContext CreateTestContext(IConfiguration? configuration = null)
{
var services = new ServiceCollection().BuildServiceProvider();
configuration ??= new ConfigurationBuilder().Build();
return new DoctorPluginContext
{
Services = services,
Configuration = configuration,
TimeProvider = TimeProvider.System,
Logger = NullLogger.Instance,
EnvironmentName = "Test",
PluginConfig = configuration.GetSection("Doctor:Plugins:Database")
};
}
}