using System.Text.Json; using XFEEDToolBox.Core.Navigation; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public class DockingValidationProofTests { [Test]public void RejectedResetCanOnlyObserveTakeoverBeforeOriginalDispatch() { var receipt=JsonSerializer.SerializeToElement(new{failed=true,applied=false,pending=false,originalResetCalled=false,originalDockingStartAttempted=false, originalDockingStartCalled=false,phase="failed-no-replay",failureStage="initial-telemetry-schema | local.read.reply",nativeGeneration=0}); Check.That(DockingValidationProof.RejectedBeforeResetDispatch(receipt)); var data=System.Text.Json.Nodes.JsonNode.Parse(receipt.GetRawText())!.AsObject(); data["failureStage"]="post-zero-telemetry-schema | health.read.reply";data["nativeGeneration"]=2; Check.That(DockingValidationProof.RejectedBeforeResetDispatch(JsonSerializer.SerializeToElement(data))); foreach(var change in new Action[] {row=>row["originalResetCalled"]=true,row=>row.Remove("originalDockingStartAttempted"),row=>row["failureStage"]="mapper-rejected-no-replay",row=>row["pending"]=true}) { var changed=data.DeepClone().AsObject();change(changed); Check.That(!DockingValidationProof.RejectedBeforeResetDispatch(JsonSerializer.SerializeToElement(changed))); } } private static JsonElement Proof(int stage=3,int frames=3,double accumulator=.75,double source=.75,int sequence=14,string id="trial",bool restored=true,bool zero=false) =>JsonSerializer.SerializeToElement(new{stage,unseededFrames=frames,seedSequence=10,lastSequence=sequence,trialId=id,commandRestored=restored,commandAfter=0,accumulatorAfter=accumulator,sourceAfter=source,zeroVerified=zero}); [Test]public void SourceAlreadyZeroCannotPassReproduction()=>Check.That(!DockingValidationProof.Persistent075(Proof(source:0))); [Test]public void OnePulseOrUnrestoredCommandCannotPassPersistence() {Check.That(!DockingValidationProof.Persistent075(Proof(frames:1)));Check.That(!DockingValidationProof.Persistent075(Proof(restored:false)));} [Test]public void ZeroReceiptRequiresOriginalAccumulatorAndSourceZero() { var before=Proof();Check.That(DockingValidationProof.CompletedZero(before,Proof(4,accumulator:0,source:0,sequence:15,zero:true))); Check.That(!DockingValidationProof.CompletedZero(before,Proof(4,accumulator:.75,source:0,sequence:15,zero:true))); Check.That(!DockingValidationProof.CompletedZero(before,Proof(4,accumulator:0,source:.75,sequence:15,zero:true))); } [Test]public void DifferentTrialAndOldFrameCannotPass() { var before=Proof();Check.That(!DockingValidationProof.CompletedZero(before,Proof(4,accumulator:0,source:0,sequence:15,id:"other",zero:true))); Check.That(!DockingValidationProof.CompletedZero(before,Proof(4,accumulator:0,source:0,sequence:14,zero:true))); } }