using StarterNG.Application; using StarterNG.Tests.Fakes; namespace StarterNG.Tests; public class SimulatorAftermathTests { private static readonly string Build = Path.Combine(Path.GetTempPath(), "maszyna", "cmake-build-diag", "bin", "eu07_2026-10-04_fc195880"); [Fact] public void Minidumps_of_this_run_are_found_in_the_installation_and_under_crashpad() { var installation = new TestInstallation(new InMemoryFileSystem() .WithExecutable(Build) .WithFile(TestInstallation.At("crash_2026-10-04_13-03-12.dmp"), "MDMP") .WithFile(TestInstallation.At("crashdumps", "reports", "1a2b.dmp"), "MDMP")); installation.Files.LastWriteTimeUtc = new DateTime(2026, 10, 4, 11, 3, 12, DateTimeKind.Utc); var aftermath = new SimulatorAftermath(installation.Files, installation.Paths, installation.Log); var thisRun = aftermath.CrashDumpsSince(new DateTime(2026, 10, 4, 11, 3, 0, DateTimeKind.Utc), Build); var later = aftermath.CrashDumpsSince(new DateTime(2026, 10, 4, 12, 0, 0, DateTimeKind.Utc), Build); Assert.Equal(2, thisRun.Count); Assert.Contains(thisRun, dump => dump.EndsWith("crash_2026-10-04_13-03-12.dmp")); Assert.Empty(later); } [Fact] public void The_end_of_the_simulator_log_is_read_for_a_silent_crash() { var installation = new TestInstallation(new InMemoryFileSystem() .WithFile(TestInstallation.At("log.txt"), "first\r\nsecond\r\n\r\nthird\r\n")); var started = installation.Files.LastWriteTimeUtc.AddMinutes(-1); var tail = new SimulatorAftermath(installation.Files, installation.Paths, installation.Log) .SimulatorLogTail(2, started); Assert.Equal(new[] { "second", "third" }, tail); } [Fact] public void A_log_not_written_since_the_start_says_nothing_of_this_run() { // Dead before it opened its log: what is there is the session before. var installation = new TestInstallation(new InMemoryFileSystem() .WithFile(TestInstallation.At("log.txt"), "yesterday's error\r\n")); var started = installation.Files.LastWriteTimeUtc.AddMinutes(10); var tail = new SimulatorAftermath(installation.Files, installation.Paths, installation.Log) .SimulatorLogTail(2, started); Assert.Empty(tail); } [Fact] public void A_log_written_a_moment_before_the_start_was_taken_counts() { // The start is taken just after the launch, as for the crash dumps. var installation = new TestInstallation(new InMemoryFileSystem() .WithFile(TestInstallation.At("log.txt"), "opening\r\n")); var started = installation.Files.LastWriteTimeUtc.AddSeconds(3); var tail = new SimulatorAftermath(installation.Files, installation.Paths, installation.Log) .SimulatorLogTail(2, started); Assert.Equal(new[] { "opening" }, tail); } }