Files
yms-daemon/internal/transaction/state_test.go
T
2026-08-17 10:10:14 +08:00

40 lines
1.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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")
}
}