f536987a7e
- doc: add comment
40 lines
1.3 KiB
Go
40 lines
1.3 KiB
Go
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")
|
||
}
|
||
}
|