2016-05-29 01:53:17 +00:00
|
|
|
Checking FSM allocation
|
2020-07-20 14:46:54 +00:00
|
|
|
Test_FSM(my_id){NULL}: Allocated
|
|
|
|
Test_FSM(my_id){NULL}: Received Event EV_B
|
|
|
|
Test_FSM(my_id){NULL}: Event EV_B not permitted
|
|
|
|
Test_FSM(my_id){NULL}: Received Event EV_A
|
|
|
|
Test_FSM(my_id){NULL}: State change to ONE (no timeout)
|
|
|
|
Test_FSM(my_id){ONE}: Received Event EV_B
|
|
|
|
Test_FSM(my_id){ONE}: State change to TWO (T2342, 1s)
|
|
|
|
Test_FSM(my_id){TWO}: Timeout of T2342
|
|
|
|
Timer
|
|
|
|
Test_FSM(my_id){TWO}: Deallocated
|
|
|
|
|
2018-04-08 22:42:12 +00:00
|
|
|
--- test_id_api()
|
|
|
|
Test_FSM{NULL}: Allocated
|
2020-07-20 14:46:54 +00:00
|
|
|
osmo_fsm_inst_name() == "Test_FSM"
|
2018-03-31 14:30:25 +00:00
|
|
|
osmo_fsm_inst_find_by_name("Test_FSM") == fi
|
2018-04-08 22:42:12 +00:00
|
|
|
osmo_fsm_inst_update_id("my_id")
|
|
|
|
rc == 0, ok
|
|
|
|
osmo_fsm_inst_name() == "Test_FSM(my_id)"
|
|
|
|
osmo_fsm_inst_find_by_name("Test_FSM(my_id)") == fi
|
|
|
|
osmo_fsm_inst_find_by_id("my_id") == fi
|
|
|
|
osmo_fsm_inst_update_id("another_id")
|
|
|
|
rc == 0, ok
|
|
|
|
osmo_fsm_inst_name() == "Test_FSM(another_id)"
|
|
|
|
osmo_fsm_inst_find_by_name("Test_FSM(another_id)") == fi
|
|
|
|
osmo_fsm_inst_find_by_id("another_id") == fi
|
|
|
|
osmo_fsm_inst_update_id(NULL)
|
|
|
|
rc == 0, ok
|
|
|
|
osmo_fsm_inst_name() == "Test_FSM"
|
|
|
|
osmo_fsm_inst_find_by_name("Test_FSM") == fi
|
|
|
|
osmo_fsm_inst_update_id(NULL)
|
|
|
|
rc == 0, ok
|
|
|
|
osmo_fsm_inst_name() == "Test_FSM"
|
|
|
|
osmo_fsm_inst_find_by_name("Test_FSM") == fi
|
|
|
|
osmo_fsm_inst_update_id("arbitrary_id")
|
|
|
|
rc == 0, ok
|
|
|
|
osmo_fsm_inst_name() == "Test_FSM(arbitrary_id)"
|
|
|
|
osmo_fsm_inst_find_by_name("Test_FSM(arbitrary_id)") == fi
|
|
|
|
osmo_fsm_inst_find_by_id("arbitrary_id") == fi
|
|
|
|
osmo_fsm_inst_update_id("")
|
2018-04-09 00:28:34 +00:00
|
|
|
Attempting to set illegal id for FSM instance of type 'Test_FSM': ""
|
2020-07-20 14:46:54 +00:00
|
|
|
rc == -22, ok
|
2018-04-08 22:42:12 +00:00
|
|
|
osmo_fsm_inst_name() == "Test_FSM(arbitrary_id)"
|
|
|
|
osmo_fsm_inst_find_by_name("Test_FSM(arbitrary_id)") == fi
|
|
|
|
osmo_fsm_inst_update_id("invalid.id")
|
2018-04-09 00:28:34 +00:00
|
|
|
Attempting to set illegal id for FSM instance of type 'Test_FSM': "invalid.id"
|
2020-07-20 14:46:54 +00:00
|
|
|
rc == -22, ok
|
2018-04-08 22:42:12 +00:00
|
|
|
osmo_fsm_inst_name() == "Test_FSM(arbitrary_id)"
|
|
|
|
osmo_fsm_inst_find_by_name("Test_FSM(arbitrary_id)") == fi
|
2018-03-31 14:34:49 +00:00
|
|
|
--- id format tests...
|
|
|
|
osmo_fsm_inst_update_id_f("format%cid", '.')
|
|
|
|
Attempting to set illegal id for FSM instance of type 'Test_FSM': "format.id"
|
2020-07-20 14:46:54 +00:00
|
|
|
rc == -22, ok
|
2018-03-31 14:34:49 +00:00
|
|
|
osmo_fsm_inst_name() == "Test_FSM(arbitrary_id)"
|
|
|
|
osmo_fsm_inst_find_by_name("Test_FSM(arbitrary_id)") == fi
|
|
|
|
osmo_fsm_inst_update_id_f("%s", "")
|
|
|
|
Attempting to set illegal id for FSM instance of type 'Test_FSM': ""
|
2020-07-20 14:46:54 +00:00
|
|
|
rc == -22, ok
|
2018-03-31 14:34:49 +00:00
|
|
|
osmo_fsm_inst_name() == "Test_FSM(arbitrary_id)"
|
|
|
|
osmo_fsm_inst_find_by_name("Test_FSM(arbitrary_id)") == fi
|
|
|
|
osmo_fsm_inst_update_id_f("format%xid%d", 0x23, 42)
|
|
|
|
rc == 0, ok
|
|
|
|
osmo_fsm_inst_name() == "Test_FSM(format23id42)"
|
|
|
|
osmo_fsm_inst_find_by_name("Test_FSM(format23id42)") == fi
|
|
|
|
osmo_fsm_inst_update_id_f(NULL, )
|
|
|
|
rc == 0, ok
|
|
|
|
osmo_fsm_inst_name() == "Test_FSM"
|
|
|
|
osmo_fsm_inst_find_by_name("Test_FSM") == fi
|
|
|
|
osmo_fsm_inst_update_id_f(NULL, )
|
|
|
|
rc == 0, ok
|
|
|
|
osmo_fsm_inst_name() == "Test_FSM"
|
|
|
|
osmo_fsm_inst_find_by_name("Test_FSM") == fi
|
|
|
|
osmo_fsm_inst_update_id_f("%s%c%s", "arbitrary", '_', "id")
|
|
|
|
rc == 0, ok
|
|
|
|
osmo_fsm_inst_name() == "Test_FSM(arbitrary_id)"
|
|
|
|
osmo_fsm_inst_find_by_name("Test_FSM(arbitrary_id)") == fi
|
2018-04-08 22:42:12 +00:00
|
|
|
|
|
|
|
--- test_id_api() done
|
|
|
|
|
|
|
|
Test_FSM(arbitrary_id){NULL}: Terminating (cause = OSMO_FSM_TERM_REQUEST)
|
2020-07-20 14:46:54 +00:00
|
|
|
Test_FSM(arbitrary_id){NULL}: Freeing instance
|
|
|
|
Test_FSM(arbitrary_id){NULL}: Deallocated
|
|
|
|
|
2018-05-25 16:20:06 +00:00
|
|
|
--- test_state_chg_keep_timer()
|
|
|
|
Test_FSM{NULL}: Allocated
|
2020-07-20 14:46:54 +00:00
|
|
|
Test_FSM{NULL}: State change to ONE (no timeout)
|
|
|
|
Test_FSM{ONE}: State change to TWO (no timeout)
|
|
|
|
Test_FSM{TWO}: Terminating (cause = OSMO_FSM_TERM_REQUEST)
|
|
|
|
Test_FSM{TWO}: Freeing instance
|
|
|
|
Test_FSM{TWO}: Deallocated
|
|
|
|
Total time passed: 0.000000 s
|
2018-05-25 16:20:06 +00:00
|
|
|
Test_FSM{NULL}: Allocated
|
2020-07-20 14:46:54 +00:00
|
|
|
Test_FSM{NULL}: State change to ONE (T10, 10s)
|
|
|
|
Total time passed: 2.000342 s
|
2018-05-31 13:30:15 +00:00
|
|
|
Test_FSM{ONE}: State change to TWO (keeping T10, 7.999s remaining)
|
2020-07-20 14:46:54 +00:00
|
|
|
Total time passed: 2.000342 s
|
2018-05-25 16:20:06 +00:00
|
|
|
Total time passed: 9.999999 s
|
|
|
|
Total time passed: 10.000000 s
|
|
|
|
Test_FSM{TWO}: Timeout of T10
|
2020-07-20 14:46:54 +00:00
|
|
|
Test_FSM{TWO}: Terminating (cause = OSMO_FSM_TERM_REQUEST)
|
|
|
|
Test_FSM{TWO}: Freeing instance
|
|
|
|
Test_FSM{TWO}: Deallocated
|
|
|
|
--- test_state_chg_keep_timer() done
|
osmo_fsm_inst_state_chg(): set T also for zero timeout
Before this patch, if timeout_secs == 0 was passed to
osmo_fsm_inst_state_chg(), the previous T value remained set in the
osmo_fsm_inst->T.
For example:
osmo_fsm_inst_state_chg(fi, ST_X, 23, 42);
// timer == 23 seconds; fi->T == 42
osmo_fsm_inst_state_chg(fi, ST_Y, 0, 0);
// no timer; fi->T == 42!
Instead, always set to the T value passed to osmo_fsm_inst_state_chg().
Adjust osmo_fsm_inst_state_chg() API doc; need to rephrase to accurately
describe the otherwise unchanged behaviour independently from T.
Verify in fsm_test.c.
Rationale: it is confusing to have a T number remaining from some past state,
especially since the user explicitly passed a T number to
osmo_fsm_inst_state_chg(). (Usually we are passing timeout_secs=0, T=0).
I first thought this behavior was introduced with
osmo_fsm_inst_state_chg_keep_timer(), but in fact osmo_fsm_inst_state_chg()
behaved this way from the start.
This shows up in the C test for the upcoming tdef API, where the test result
printout was showing some past T value sticking around after FSM state
transitions. After this patch, there will be no such confusion.
Change-Id: I65c7c262674a1bc5f37faeca6aa0320ab0174f3c
2019-01-28 14:38:09 +00:00
|
|
|
|
|
|
|
--- test_state_chg_T()
|
|
|
|
Test_FSM{NULL}: Allocated
|
2020-07-20 14:46:54 +00:00
|
|
|
Test_FSM{NULL}: State change to ONE (T42, 23s)
|
|
|
|
Test_FSM{ONE}: State change to TWO (no timeout)
|
|
|
|
Test_FSM{TWO}: Terminating (cause = OSMO_FSM_TERM_REQUEST)
|
|
|
|
Test_FSM{TWO}: Freeing instance
|
|
|
|
Test_FSM{TWO}: Deallocated
|
|
|
|
Test_FSM{NULL}: Allocated
|
|
|
|
Test_FSM{NULL}: State change to ONE (T42, 23s)
|
|
|
|
Test_FSM{ONE}: State change to TWO (no timeout)
|
|
|
|
Test_FSM{TWO}: Terminating (cause = OSMO_FSM_TERM_REQUEST)
|
|
|
|
Test_FSM{TWO}: Freeing instance
|
|
|
|
Test_FSM{TWO}: Deallocated
|
|
|
|
--- test_state_chg_T() done
|