-
Notifications
You must be signed in to change notification settings - Fork 331
Open
Description
f.transition will retain when ctx.Err != nil happened, and the follow-up Event() invoke will always return InTransitionError?
transitionFunc := func(ctx context.Context, async bool) func() {
return func() {
if ctx.Err() != nil {
if e.Err == nil {
e.Err = ctx.Err()
}
return
}
......
}
}
I write a unit-test like this:
func TestCtxErr(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond)
defer cancel()
fsm := NewFSM(
"closed",
Events{
{Name: "open", Src: []string{"closed"}, Dst: "open"},
{Name: "close", Src: []string{"open"}, Dst: "closed"},
},
Callbacks{},
)
time.Sleep(time.Millisecond * 2)
err := fsm.Event(ctx, "open")
t.Logf("after open err: %v", err)
for i := 0; i < 2; i++ {
err = fsm.Event(context.TODO(), "open")
t.Logf("after open err: %v", err)
err = fsm.Event(context.TODO(), "close")
t.Logf("after close err: %v", err)
}
}
and this it's result:
=== RUN TestCtxErr
fsm_test.go:1086: after open err: context deadline exceeded
fsm_test.go:1090: after open err: event open inappropriate because previous transition did not complete
fsm_test.go:1093: after close err: event close inappropriate because previous transition did not complete
fsm_test.go:1090: after open err: event open inappropriate because previous transition did not complete
fsm_test.go:1093: after close err: event close inappropriate because previous transition did not complete
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels