XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Security.Cryptography;
using XFEExtension.NetCore.XUnit.Attributes;
using XFEEDToolBox.Core.Data;

namespace XFEEDToolBox.Test;

[TestFixture]
public class GameEventRecoveryTests
{
    [Test] public void DamagedIndexIsPreservedAndOriginalJournalReplayRebuildsAPersistentGeneration()
    {
        using var temp=new TemporaryDirectory();var path=temp.File("events.db");
        File.WriteAllText(path,"damaged SQLite header");var original=SHA256.HashData(File.ReadAllBytes(path));
        var repository=new GameEventRepository(path);repository.Initialize();
        Check.That(repository.LastRecovery is not null);Check.That(repository.DatabasePath!=path);
        Check.That(original.SequenceEqual(SHA256.HashData(File.ReadAllBytes(path))));
        var row=new GameJournalRecord("Journal.log",10,DateTimeOffset.UtcNow,"LoadGame","{\"event\":\"LoadGame\",\"FID\":\"F1\"}");
        Check.Equal(1,repository.Insert([row]));Check.Equal(0,repository.Insert([row]));
        var reopened=new GameEventRepository(path);reopened.Initialize();
        Check.Equal(repository.DatabasePath,reopened.DatabasePath);Check.That(reopened.LastRecovery is null);
        Check.Equal(1L,reopened.Query().Count);
    }
    [Test] public void HealthyIndexKeepsItsFileAndHistory()
    {
        using var temp=new TemporaryDirectory();var path=temp.File("events.db");
        var repository=new GameEventRepository(path);repository.Initialize();
        repository.Insert([new("Journal.log",10,DateTimeOffset.UtcNow,"Docked","{\"event\":\"Docked\"}")]);
        var reopened=new GameEventRepository(path);reopened.Initialize();
        Check.Equal(path,reopened.DatabasePath);Check.That(reopened.LastRecovery is null);Check.Equal(1L,reopened.Query().Count);
        Check.That(!File.Exists(path+".active"));
    }
}