package transaction import "testing" // TestStateTransitions 验证状态机的正常推进、跳过前向状态、回滚与终态等转换规则。 // // 覆盖场景:CREATED 到 COMMITTED 的逐级前向推进均被允许;跳过中间状态(CREATED // 直接到 PREPARED)被拒绝;SWITCHING 允许进入回滚、ROLLING_BACK 允许到 ROLLED_BACK; // 终态 COMMITTED 不再接受任何后续转换。 func TestStateTransitions(t *testing.T) { t.Parallel() forward := []State{ StateCreated, StateValidating, StatePrepared, StateStarting, StateSwitching, StateVerifying, StateDraining, StateCommitted, } for index := 0; index < len(forward)-1; index++ { if !forward[index].CanTransitionTo(forward[index+1]) { t.Fatalf("expected transition %s -> %s", forward[index], forward[index+1]) } } if StateCreated.CanTransitionTo(StatePrepared) { t.Fatal("state machine accepted a skipped forward state") } if !StateSwitching.CanTransitionTo(StateRollingBack) { t.Fatal("state machine rejected rollback") } if !StateRollingBack.CanTransitionTo(StateRolledBack) { t.Fatal("state machine rejected rollback completion") } if StateCommitted.CanTransitionTo(StateRollingBack) { t.Fatal("terminal state accepted another transition") } }