using System.Runtime.Versioning; using Xunit; namespace OCSentinelCli.Tests; [SupportedOSPlatform("windows")] public sealed class RansomwareBetaTests { [Fact] public void RansomwareBetaIsEnabledByDefault() { Assert.True(new ScannerConfiguration().RansomwareBetaEnabled); Assert.False(new ScannerConfiguration().RansomwareBetaAlertingEnabled); } [Fact] public void FileChurnBelowBothThresholdsDoesNotCreateSignal() { var summary = new RansomwareFileChurnSummary { Enabled = true, DataAvailable = true, DeleteOperationCount = 49, WriteOperationCount = 500 }; RansomwareSignal? signal = RansomwareFileChurnDetector.CreateSignal(summary, new ScannerConfiguration()); Assert.Null(signal); } [Fact] public void CriticalFileChurnCreatesOnlyMediumConfidenceSignal() { var summary = new RansomwareFileChurnSummary { Enabled = true, DataAvailable = true, WindowMinutes = 15, DeleteOperationCount = 200, WriteOperationCount = 1000, DistinctProcessCount = 1, TopProcesses = [new RansomwareFileChurnProcess { Process = "encryptor.exe", DeleteOperationCount = 200, WriteOperationCount = 1000 }] }; RansomwareSignal? signal = RansomwareFileChurnDetector.CreateSignal(summary, new ScannerConfiguration()); Assert.NotNull(signal); Assert.Equal("file-churn-critical", signal.Category); Assert.Equal("medium", signal.Confidence); Assert.Equal("encryptor.exe", signal.Process); } [Fact] public void PassiveBetaCannotElevateNinjaAlertState() { var summary = new RansomwareBetaSummary { Enabled = true, State = "critical" }; Assert.False(RansomwareAlertPolicy.CanElevate(summary, alertingEnabled: false)); Assert.True(RansomwareAlertPolicy.CanElevate(summary, alertingEnabled: true)); } }