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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Text.Json;
using System.Text.Json.Nodes;
using XFEEDToolBox.Core.Navigation;
using XFEExtension.NetCore.XUnit.Attributes;

namespace XFEEDToolBox.Test;

[TestFixture]
public sealed class ScoReferenceWorldReleaseTests
{
    private static readonly DateTimeOffset Now=DateTimeOffset.Parse("2026-10-26T19:53:45.566Z");
    private const ulong Entity=11828247554985,OldWorld=2553114773867,Component=0x13003cf80d8;
    private const string Owner="b4b49dfd52764e98bdf06f98b56c6e00",Start="9c159a5e9e8641caa3c36b380403c342";
    private static JsonObject Status()=>JsonSerializer.SerializeToNode(new
    {
        owned=false,sampleReady=true,watchEntityId=Entity.ToString(),watchReferenceWorld=OldWorld.ToString(),watchInterface="13003cf80d8",
        sample=new{verified=true,entityId=Entity.ToString(),referenceWorldAddress="72060147152701803",@interface="13003cf80d8",vtableRva="533e6e0",
            state=0,active=false,playerOverride=false,healthEmergency=false,inSupercruise=true,stableFsd=true,rawFsdState=2,hullFraction=1,observedAtUnixMilliseconds=Now.ToUnixTimeMilliseconds()},
        lastOriginalStop=new{owner=Owner,startRequestId=Start,selectionGeneration=18,entityId=Entity.ToString(),referenceWorldAddress=OldWorld.ToString(),
            nativeMethodCalled=true,nativeMethodRva="2eaacd0",argument=false,stateBefore=2,stateAfter=3,reason="geometry-or-assist",observedAtUnixMilliseconds=Now.ToUnixTimeMilliseconds(),
            gate=new{identityVerified=true,targetVerified=true,emergency=false,damageSeen=false,collisionCourse=false,assistEnabled=false}}
    })!.AsObject();
    private static bool Accept(JsonObject row,DateTimeOffset? now=null,ulong component=Component,long? startedAt=null)
        =>ScoReferenceWorldRelease.CanConfirm(JsonSerializer.SerializeToElement(row),Owner,Start,18,
            startedAt??Now.AddSeconds(-2).ToUnixTimeMilliseconds(),Entity,OldWorld,component,now??Now);
    [Test]public void Live08OriginalStopAndSameComponentOffInTheNewSoiFinishOnlyTheOldOwnership()
    {
        var row=Status();Check.That(Accept(row));
        row["sample"]!["state"]=3;Check.That(Accept(row));
        // A historical stop remains causal evidence while the current Off
        // observation must stay fresh. It does not migrate any SCO proof.
        row["sample"]!["observedAtUnixMilliseconds"]=Now.AddSeconds(30).ToUnixTimeMilliseconds();Check.That(Accept(row,Now.AddSeconds(30)));
    }
    [Test]public void UnknownForeignReusedActiveStaleAndUnsafeEvidenceCannotReleaseAcrossWorlds()
    {
        foreach(var change in new Action<JsonObject>[]
        {
            r=>r["owned"]=true,r=>r["sampleReady"]=false,r=>r["watchEntityId"]="99",r=>r["watchReferenceWorld"]="99",r=>r["watchInterface"]="13003cf80d9",
            r=>r["sample"]!["verified"]=false,r=>r["sample"]!["entityId"]="99",r=>r["sample"]!["referenceWorldAddress"]="0",r=>r["sample"]!["referenceWorldAddress"]=OldWorld.ToString(),
            r=>r["sample"]!["interface"]="13003cf80d9",r=>r["sample"]!.AsObject().Remove("interface"),r=>r["sample"]!["vtableRva"]="unknown",
            r=>r["sample"]!["state"]=2,r=>r["sample"]!["active"]=true,r=>r["sample"]!["playerOverride"]=true,r=>r["sample"]!["healthEmergency"]=true,
            r=>r["sample"]!["hullFraction"]=0,r=>r["sample"]!["rawFsdState"]=1,r=>r["sample"]!["observedAtUnixMilliseconds"]=Now.AddMilliseconds(-201).ToUnixTimeMilliseconds(),
            r=>r["sample"]!["observedAtUnixMilliseconds"]=Now.AddMilliseconds(1).ToUnixTimeMilliseconds(),
            r=>r["lastOriginalStop"]!["owner"]="foreign",r=>r["lastOriginalStop"]!["startRequestId"]="prior-burst",r=>r["lastOriginalStop"]!["selectionGeneration"]=17,
            r=>r["lastOriginalStop"]!["entityId"]="99",r=>r["lastOriginalStop"]!["referenceWorldAddress"]="99",r=>r["lastOriginalStop"]!["nativeMethodCalled"]=false,
            r=>r["lastOriginalStop"]!["nativeMethodRva"]="unknown",r=>r["lastOriginalStop"]!["argument"]=true,r=>r["lastOriginalStop"]!["stateBefore"]=0,
            r=>r["lastOriginalStop"]!["stateAfter"]=2,r=>r["lastOriginalStop"]!["reason"]="health",r=>r["lastOriginalStop"]!["observedAtUnixMilliseconds"]=Now.AddSeconds(-3).ToUnixTimeMilliseconds(),
            r=>r["lastOriginalStop"]!["observedAtUnixMilliseconds"]=Now.AddMilliseconds(1).ToUnixTimeMilliseconds(),
            r=>r["lastOriginalStop"]!["gate"]!["identityVerified"]=false,r=>r["lastOriginalStop"]!["gate"]!["targetVerified"]=false,
            r=>r["lastOriginalStop"]!["gate"]!["emergency"]=true,r=>r["lastOriginalStop"]!["gate"]!["damageSeen"]=true,
            r=>r["lastOriginalStop"]!["gate"]!["collisionCourse"]=true,r=>r["lastOriginalStop"]!["gate"]!["assistEnabled"]=true
        }){var row=Status();change(row);Check.That(!Accept(row),row.ToJsonString());}
        Check.That(!Accept(Status(),component:0));Check.That(!Accept(Status(),startedAt:0));
    }
}