From 80dc5e66f351fda29cbd5097427beb39cf501329 Mon Sep 17 00:00:00 2001 From: Sven Slootweg Date: Sun, 6 May 2018 19:27:50 +0200 Subject: [PATCH] Update README to describe the correct bug and its behaviour --- README.md | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index bc9a0ff..ab13e82 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,102 @@ # machina-factory-bugcase -A demonstration of a bug in machina v2.0.2, where a child FSM factory is called multiple times when specified as part of a config object. +A demonstration of a bug in machina v2.0.2, where a child FSM factory is called erroneously during any `handle` command that's received by a child FSM, even if no state transition takes place in the parent. What should happen: ``` (fsm.0) Parent state 1 reached -Creating child +Creating child for state 2 (fsm.1) Child state A reached (fsm.0) Parent state 2 reached -Creating child +(fsm.1) Child state B reached +Creating child for state 3 (fsm.2) Child state A reached +(fsm.0) Parent state 3 reached (fsm.2) Child state B reached +Parent done! Returning to state 2 one last time... +Creating child for state 2 +(fsm.3) Child state A reached +(fsm.0) Parent state 2 reached +(fsm.3) Child state B reached ``` What happens instead: ``` (fsm.0) Parent state 1 reached -Creating child +Creating child for state 2 (fsm.1) Child state A reached -Creating child +(fsm.0) Parent state 2 reached +Creating child for state 2 (fsm.2) Child state A reached +(fsm.2) Child state B reached +Creating child for state 2 +(fsm.3) Child state A reached +Creating child for state 3 +(fsm.4) Child state A reached +(fsm.0) Parent state 3 reached +Creating child for state 3 +(fsm.5) Child state A reached +(fsm.5) Child state B reached +Creating child for state 3 +(fsm.6) Child state A reached +Parent done! Returning to state 2 one last time... +Creating child for state 2 +(fsm.7) Child state A reached (fsm.0) Parent state 2 reached -Creating child +Creating child for state 2 +(fsm.8) Child state A reached +(fsm.8) Child state B reached +Creating child for state 2 +(fsm.9) Child state A reached +``` + +The result is even more wrong when this bug is combined with the duplicate FSM creation bug (as demonstrated in the `master` branch of this repository): + +``` +(fsm.0) Parent state 1 reached +Creating child for state 2 +(fsm.1) Child state A reached +Creating child for state 2 +(fsm.2) Child state A reached +(fsm.0) Parent state 2 reached +Creating child for state 2 (fsm.3) Child state A reached -Creating child +Creating child for state 2 (fsm.4) Child state A reached (fsm.4) Child state B reached +Creating child for state 2 +(fsm.5) Child state A reached +Creating child for state 2 +(fsm.6) Child state A reached +Creating child for state 3 +(fsm.7) Child state A reached +Creating child for state 3 +(fsm.8) Child state A reached +(fsm.0) Parent state 3 reached +Creating child for state 3 +(fsm.9) Child state A reached +Creating child for state 3 +(fsm.10) Child state A reached +(fsm.10) Child state B reached +Creating child for state 3 +(fsm.11) Child state A reached +Creating child for state 3 +(fsm.12) Child state A reached +Parent done! Returning to state 2 one last time... +Creating child for state 2 +(fsm.13) Child state A reached +Creating child for state 2 +(fsm.14) Child state A reached +(fsm.0) Parent state 2 reached +Creating child for state 2 +(fsm.15) Child state A reached +Creating child for state 2 +(fsm.16) Child state A reached +(fsm.16) Child state B reached +Creating child for state 2 +(fsm.17) Child state A reached +Creating child for state 2 +(fsm.18) Child state A reached ```