35 lines
901 B
Go
35 lines
901 B
Go
|
|
package transaction
|
||
|
|
|
||
|
|
import "testing"
|
||
|
|
|
||
|
|
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")
|
||
|
|
}
|
||
|
|
}
|