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 CruiseControllerReplacementTests
{
    private static readonly DateTimeOffset Now=DateTimeOffset.UtcNow;
    private static JsonObject Ready()=>JsonSerializer.SerializeToNode(new{service=CruiseControlProtocol.LegacyService,gameSha256="build",processId=42,enabled=true,owned=false,
        leaseExpiresAtUnixMilliseconds=Now.AddSeconds(-1).ToUnixTimeMilliseconds(),sampleReady=true,
        sample=new{verified=true,active=false,state=0,observedAtUnixMilliseconds=Now.ToUnixTimeMilliseconds(),healthEmergency=false,hullFraction=.78}})!.AsObject();
    private static bool Accept(JsonObject row)=>CruiseControllerReplacement.CanRetire(JsonSerializer.SerializeToElement(row),42,"build",Now);
    [Test]public void AStoppedIdleVerifiedControllerCanBeReplacedWithoutRequiringAnUndamagedHull()
    {Check.That(Accept(Ready()));var row=Ready();row["sample"]!["state"]=3;Check.That(Accept(row));}
    [Test]public void AForeignActivePendingStaleOrUnsafeControllerCannotBeRetired()
    {
        foreach(var mutate in new Action<JsonObject>[]
        {
            row=>row["service"]="other",row=>row["gameSha256"]="other",row=>row["processId"]=43,row=>row["owned"]=true,
            row=>row["leaseExpiresAtUnixMilliseconds"]=Now.AddSeconds(1).ToUnixTimeMilliseconds(),row=>row["sampleReady"]=false,
            row=>row["sample"]!["active"]=true,row=>row["sample"]!["state"]=1,row=>row["sample"]!["state"]=2,
            row=>row["sample"]!["verified"]=false,row=>row["sample"]!["healthEmergency"]=true,row=>row["sample"]!["hullFraction"]=0,
            row=>row["sample"]!["observedAtUnixMilliseconds"]=Now.AddSeconds(-1).ToUnixTimeMilliseconds(),row=>row["sample"]=null
        }){var row=Ready();mutate(row);Check.That(!Accept(row),row.ToJsonString());}
    }
}