fix: FASS2 状态机与 UDP 枢纽审查项

等锁超时、全路径签名、无锁窗口不下发、Fault 终态可等待、Pass+机构不再短路、Alarm 不杀单、catch-up 停在未完成站;VehicleCode=0/重复车号拒绝注册,Hub 已运行时不抢监听口;FileLogger 空目录可写。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
黄兆尉
2026-08-26 23:04:58 +08:00
co-authored by Cursor
parent 29a06f004f
commit e4a245e644
13 changed files with 465 additions and 48 deletions
@@ -0,0 +1,47 @@
using StandardScene.Magnetic.Protocol;
using StandardScene.Magnetic.Tasking;
using Xunit;
namespace StandardScene.Magnetic.Tests.Tasking
{
public class Fass2ActionResolverTests
{
[Fact]
public void PassWithLift_IsNotCompleteUntilMechanismMatches()
{
var expected = new Fass2NodeMessage
{
Node = 3,
StartStop = Fass2TaskBuilder.StartStopPass,
Lift = 1
};
var actual = new Fass2NodeMessage
{
Node = 3,
StartStop = Fass2TaskBuilder.StartStopPass,
Lift = 0
};
Assert.True(Fass2ActionResolver.RequiresActionWait(expected));
Assert.False(Fass2ActionResolver.IsStationActionComplete(expected, actual, vehicleState: 2));
}
[Fact]
public void PlainPass_CompletesWithoutMechanism()
{
var expected = new Fass2NodeMessage
{
Node = 3,
StartStop = Fass2TaskBuilder.StartStopPass
};
var actual = new Fass2NodeMessage
{
Node = 3,
StartStop = Fass2TaskBuilder.StartStopPass
};
Assert.False(Fass2ActionResolver.RequiresActionWait(expected));
Assert.True(Fass2ActionResolver.IsStationActionComplete(expected, actual, vehicleState: 2));
}
}
}