[PATCH] libosmocore[master]: contrib/fsm-to-dot: warn and draw unallowed state transitions

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Sun Mar 25 02:32:29 UTC 2018


Hello Jenkins Builder,

I'd like you to reexamine a change.  Please visit

    https://gerrit.osmocom.org/7497

to look at the new patch set (#4).

contrib/fsm-to-dot: warn and draw unallowed state transitions

Hacked as it is, fsm-to-dot is capable of detecting action functions
transitioning to states that are not allowed according to the FSM definition
struct.

Draw those in red and output a warning.

Found these osmo-bsc gscon errors with this patch:

ERROR: gscon_fsm_active() triggers a transition to ST_WAIT_HO_COMPL, but this is not allowed by the FSM definition
ERROR: gscon_fsm_wait_ho_compl() triggers a transition to ST_WAIT_MDCX_BTS_HO, but this is not allowed by the FSM definition

Related: OS#3109
Change-Id: Ic6319a958b3c7247510c1930bac8b02b95f9dcf2
---
M contrib/fsm-to-dot.py
1 file changed, 12 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/97/7497/4

diff --git a/contrib/fsm-to-dot.py b/contrib/fsm-to-dot.py
index ce94a4e..7a4694e 100755
--- a/contrib/fsm-to-dot.py
+++ b/contrib/fsm-to-dot.py
@@ -137,9 +137,10 @@
     return cmp(event.name, other.name)
 
 class Edge:
-  def __init__(edge, to_state, event_name=None, style=None, action=None):
+  def __init__(edge, to_state, event_name=None, style=None, action=None, color=None):
     edge.to_state = to_state
     edge.style = style
+    edge.color = color
     edge.events = []
     edge.actions = []
     edge.add_event_name(event_name)
@@ -379,9 +380,17 @@
       for to_state_name, event_name in transitions:
         if not event_name:
           continue
+        found = False
         for out_edge in state.out_edges:
           if out_edge.to_state.name == to_state_name:
             out_edge.add_event_name(event_name)
+            found = True
+        if not found:
+          sys.stderr.write(
+            "ERROR: %s() triggers a transition to %s, but this is not allowed by the FSM definition\n"
+            % (state.action, to_state_name))
+          state.add_out_edge(Edge(fsm.find_state_by_name(to_state_name, True), event_name,
+                                  color='red'))
 
     additional_states = []
 
@@ -526,6 +535,8 @@
           attrs.append('label="%s"' % (r'\n'.join(labels)))
         if out_edge.style:
           attrs.append('style=%s'% out_edge.style)
+        if out_edge.color:
+          attrs.append('color=%s'% out_edge.color)
         attrs_str = ''
         if attrs:
           attrs_str = ' [%s]' % (','.join(attrs))

-- 
To view, visit https://gerrit.osmocom.org/7497
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: Ic6319a958b3c7247510c1930bac8b02b95f9dcf2
Gerrit-PatchSet: 4
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder



More information about the gerrit-log mailing list