an atproto pds written in F# (.NET 9) 馃
pds fsharp giraffe dotnet atproto
at main 3.6 kB view raw
1module PDSharp.Tests.Health 2 3open System 4open Xunit 5open PDSharp.Core.Health 6 7[<Fact>] 8let ``getDiskUsage returns disk info for valid path`` () = 9 let result = getDiskUsage "." 10 11 match result with 12 | Some usage -> 13 Assert.True(usage.TotalBytes > 0L) 14 Assert.True(usage.FreeBytes >= 0L) 15 Assert.True(usage.UsedBytes >= 0L) 16 Assert.True(usage.UsedPercent >= 0.0 && usage.UsedPercent <= 100.0) 17 | None -> Assert.True(true) 18 19[<Fact>] 20let ``getDiskUsage UsedPercent is calculated correctly`` () = 21 let result = getDiskUsage "." 22 23 match result with 24 | Some usage -> 25 let expectedUsed = usage.TotalBytes - usage.FreeBytes 26 Assert.Equal(expectedUsed, usage.UsedBytes) 27 let expectedPercent = float usage.UsedBytes / float usage.TotalBytes * 100.0 28 Assert.True(abs (usage.UsedPercent - expectedPercent) < 0.1) 29 | None -> Assert.True(true) 30 31[<Fact>] 32let ``getDiskUsage IsCritical is true when usage > 90 percent`` () = 33 let result = getDiskUsage "." 34 35 match result with 36 | Some usage -> Assert.Equal(usage.UsedPercent >= 90.0, usage.IsCritical) 37 | None -> Assert.True(true) 38 39[<Fact>] 40let ``checkDatabaseHealth returns healthy for existing file`` () = 41 let tempPath = System.IO.Path.GetTempFileName() 42 43 try 44 let connStr = $"Data Source={tempPath}" 45 let result = checkDatabaseHealth connStr 46 Assert.True result.IsHealthy 47 Assert.True result.Message.IsNone 48 finally 49 System.IO.File.Delete tempPath 50 51[<Fact>] 52let ``checkDatabaseHealth returns unhealthy for missing file`` () = 53 let connStr = "Data Source=/nonexistent/path/to/database.db" 54 let result = checkDatabaseHealth connStr 55 Assert.False result.IsHealthy 56 Assert.True result.Message.IsSome 57 58[<Fact>] 59let ``checkDatabaseHealth handles invalid connection string`` () = 60 let connStr = "invalid" 61 let result = checkDatabaseHealth connStr 62 Assert.False result.IsHealthy 63 Assert.True result.Message.IsSome 64 65[<Fact>] 66let ``getBackupStatus returns stale when no backup`` () = 67 let result = getBackupStatus None 68 Assert.True result.IsStale 69 Assert.True result.LastBackupTime.IsNone 70 Assert.True result.BackupAgeHours.IsNone 71 72[<Fact>] 73let ``getBackupStatus returns not stale for recent backup`` () = 74 let recentTime = DateTimeOffset.UtcNow.AddHours(-1.0) 75 let result = getBackupStatus (Some recentTime) 76 Assert.False result.IsStale 77 Assert.True result.LastBackupTime.IsSome 78 Assert.True result.BackupAgeHours.IsSome 79 Assert.True(result.BackupAgeHours.Value < 24.0) 80 81[<Fact>] 82let ``getBackupStatus returns stale for old backup`` () = 83 let oldTime = DateTimeOffset.UtcNow.AddHours(-25.0) 84 let result = getBackupStatus (Some oldTime) 85 Assert.True result.IsStale 86 Assert.True(result.BackupAgeHours.Value > 24.0) 87 88[<Fact>] 89let ``HealthState tracks uptime correctly`` () = 90 let state = HealthState() 91 state.SetStartTime(DateTimeOffset.UtcNow.AddSeconds(-10.0)) 92 let uptime = state.GetUptime() 93 Assert.True(uptime >= 9L && uptime <= 12L) 94 95[<Fact>] 96let ``HealthState records backup time`` () = 97 let state = HealthState() 98 Assert.True state.LastBackupTime.IsNone 99 state.RecordBackup() 100 Assert.True state.LastBackupTime.IsSome 101 102[<Fact>] 103let ``buildHealthStatus constructs complete status`` () = 104 let state = HealthState() 105 let tempPath = System.IO.Path.GetTempFileName() 106 107 try 108 let connStr = $"Data Source={tempPath}" 109 let status = buildHealthStatus "1.0.0" state connStr "." 110 111 Assert.Equal("1.0.0", status.Version) 112 Assert.True(status.UptimeSeconds >= 0L) 113 Assert.True status.DatabaseStatus.IsHealthy 114 Assert.True status.BackupStatus.IsSome 115 finally 116 System.IO.File.Delete tempPath