summaryrefslogtreecommitdiff
path: root/cesar/cp2/fsm
diff options
context:
space:
mode:
authorschodet2008-06-12 13:14:30 +0000
committerschodet2008-06-12 13:14:30 +0000
commit2caee570ab95e8d29c39c21932f4d6854730a34b (patch)
tree992a5ee9773c98f468e77745f3ae8ec89a001eee /cesar/cp2/fsm
parentc64b4a7787e816252ef88312815ecf4899eb06f2 (diff)
* cp2/fsm/test/utest:
- added more tests for error cases. git-svn-id: svn+ssh://pessac/svn/cesar/trunk@2300 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'cesar/cp2/fsm')
-rw-r--r--cesar/cp2/fsm/test/utest/Config1
-rw-r--r--cesar/cp2/fsm/test/utest/override/cp2/fsm/src/fsm/cp.fsm12
-rw-r--r--cesar/cp2/fsm/test/utest/src/fsm_stub.c66
-rw-r--r--cesar/cp2/fsm/test/utest/src/test_fsm.c84
4 files changed, 144 insertions, 19 deletions
diff --git a/cesar/cp2/fsm/test/utest/Config b/cesar/cp2/fsm/test/utest/Config
new file mode 100644
index 0000000000..1221024089
--- /dev/null
+++ b/cesar/cp2/fsm/test/utest/Config
@@ -0,0 +1 @@
+CONFIG_DEBUG_FATAL_CATCH = y
diff --git a/cesar/cp2/fsm/test/utest/override/cp2/fsm/src/fsm/cp.fsm b/cesar/cp2/fsm/test/utest/override/cp2/fsm/src/fsm/cp.fsm
index d6b77202cf..d298d8a3ab 100644
--- a/cesar/cp2/fsm/test/utest/override/cp2/fsm/src/fsm/cp.fsm
+++ b/cesar/cp2/fsm/test/utest/override/cp2/fsm/src/fsm/cp.fsm
@@ -12,10 +12,22 @@ Events:
event2
event3
event4
+ error_event_no_branch
+ test error conditions: no branch selected
+ error_event_bad_branch
+ test error conditions: branch not for this event
+ error_event_dup_branch
+ test error conditions: branch selected two times
STATE1:
event1 -> .
event2 -> STATE2
+ error_event_no_branch: branch1 -> .
+ error_event_no_branch: branch2 -> .
+ error_event_bad_branch: branch1 -> .
+ error_event_bad_branch: branch2 -> .
+ error_event_dup_branch: branch1 -> .
+ error_event_dup_branch: branch2 -> .
STATE2:
event3: branch1 -> STATE3
diff --git a/cesar/cp2/fsm/test/utest/src/fsm_stub.c b/cesar/cp2/fsm/test/utest/src/fsm_stub.c
index 1e1bbba6d9..36615719c2 100644
--- a/cesar/cp2/fsm/test/utest/src/fsm_stub.c
+++ b/cesar/cp2/fsm/test/utest/src/fsm_stub.c
@@ -18,62 +18,92 @@
#include "cp2/fsm/inc/tables.h"
void
-cp_fsm__STATE1__event1 (void);
+cp_fsm__STATE1__event1 (cp_t *ctx);
void
-cp_fsm__STATE1__event2 (void);
+cp_fsm__STATE1__event2 (cp_t *ctx);
void
-cp_fsm__STATE2__event3 (void);
+cp_fsm__STATE1__error_event_no_branch (cp_t *ctx);
void
-cp_fsm__STATE3__event1 (void);
+cp_fsm__STATE1__error_event_bad_branch (cp_t *ctx);
void
-cp_fsm__STATE3__event2 (void);
+cp_fsm__STATE1__error_event_dup_branch (cp_t *ctx);
void
-cp_fsm__STATE4__event1 (void);
+cp_fsm__STATE2__event3 (cp_t *ctx);
+
+void
+cp_fsm__STATE3__event1 (cp_t *ctx);
+
+void
+cp_fsm__STATE3__event2 (cp_t *ctx);
+
+void
+cp_fsm__STATE4__event1 (cp_t *ctx);
/* Include generated tables. */
#include "cp_fsm_tables.h"
void
-cp_fsm__STATE1__event1 (void)
+cp_fsm__STATE1__event1 (cp_t *ctx)
{
scenario_event (cp_fsm__STATE1__event1);
}
void
-cp_fsm__STATE1__event2 (void)
+cp_fsm__STATE1__event2 (cp_t *ctx)
{
scenario_event (cp_fsm__STATE1__event2);
}
void
-cp_fsm__STATE2__event3 (void)
+cp_fsm__STATE1__error_event_no_branch (cp_t *ctx)
+{
+ /* Do not choose branch. */
+}
+
+void
+cp_fsm__STATE1__error_event_bad_branch (cp_t *ctx)
+{
+ cp_fsm_branch (ctx, CP_FSM_BRANCH (STATE2, event3, branch1));
+}
+
+void
+cp_fsm__STATE1__error_event_dup_branch (cp_t *ctx)
+{
+ cp_fsm_branch (ctx, CP_FSM_BRANCH (STATE1, error_event_dup_branch,
+ branch1));
+ cp_fsm_branch (ctx, CP_FSM_BRANCH (STATE1, error_event_dup_branch,
+ branch2));
+}
+
+void
+cp_fsm__STATE2__event3 (cp_t *ctx)
{
- scenario_event (cp_fsm__STATE2__event3, param, globals);
- cp_fsm_branch (globals->cp, param->branch);
+ scenario_event (cp_fsm__STATE2__event3, param);
+ cp_fsm_branch (ctx, param->branch);
}
void
-cp_fsm__STATE3__event1 (void)
+cp_fsm__STATE3__event1 (cp_t *ctx)
{
- scenario_event (cp_fsm__STATE3__event1, param, globals);
- cp_fsm_branch (globals->cp, param->branch);
+ scenario_event (cp_fsm__STATE3__event1, param);
+ cp_fsm_branch (ctx, param->branch);
}
void
-cp_fsm__STATE3__event2 (void)
+cp_fsm__STATE3__event2 (cp_t *ctx)
{
scenario_event (cp_fsm__STATE3__event2);
}
void
-cp_fsm__STATE4__event1 (void)
+cp_fsm__STATE4__event1 (cp_t *ctx)
{
- scenario_event (cp_fsm__STATE4__event1, param, globals);
- cp_fsm_branch (globals->cp, param->branch);
+ scenario_event (cp_fsm__STATE4__event1, param);
+ cp_fsm_branch (ctx, param->branch);
}
diff --git a/cesar/cp2/fsm/test/utest/src/test_fsm.c b/cesar/cp2/fsm/test/utest/src/test_fsm.c
index 15ef64425a..603dde4fcc 100644
--- a/cesar/cp2/fsm/test/utest/src/test_fsm.c
+++ b/cesar/cp2/fsm/test/utest/src/test_fsm.c
@@ -12,6 +12,7 @@
*/
#include "common/std.h"
+#include "lib/blk.h"
#include "lib/test.h"
#include "lib/scenario/scenario.h"
@@ -25,7 +26,7 @@ test_fsm_basic_test_case (test_t t)
test_case_begin (t, "basic");
cp_t cp;
cp_fsm_init (&cp);
- test_begin (t, "fsm")
+ test_begin (t, "bare")
{
scenario_entry_t entries[] = {
/* STATE1 */
@@ -78,10 +79,90 @@ test_fsm_basic_test_case (test_t t)
}
void
+test_fsm_error_test_case (test_t t)
+{
+ test_case_begin (t, "error");
+ cp_t cp;
+ test_begin (t, "no branch")
+ {
+ cp_fsm_init (&cp);
+ cp_fsm_post (&cp, cp_fsm_event_bare_new (
+ &cp, CP_FSM_EVENT_TYPE_error_event_no_branch));
+ const char *asserted = NULL;
+ dbg_fatal_try_begin
+ {
+ cp_fsm_process (&cp);
+ }
+ dbg_fatal_try_catch (const char *msg)
+ {
+ asserted = msg;
+ }
+ dbg_fatal_try_end;
+ test_fail_unless (asserted);
+ } test_end;
+ test_begin (t, "bad branch")
+ {
+ cp_fsm_init (&cp);
+ cp_fsm_post (&cp, cp_fsm_event_bare_new (
+ &cp, CP_FSM_EVENT_TYPE_error_event_bad_branch));
+ const char *asserted = NULL;
+ dbg_fatal_try_begin
+ {
+ cp_fsm_process (&cp);
+ }
+ dbg_fatal_try_catch (const char *msg)
+ {
+ asserted = msg;
+ }
+ dbg_fatal_try_end;
+ test_fail_unless (asserted);
+ } test_end;
+ test_begin (t, "dup branch")
+ {
+ cp_fsm_init (&cp);
+ cp_fsm_post (&cp, cp_fsm_event_bare_new (
+ &cp, CP_FSM_EVENT_TYPE_error_event_dup_branch));
+ const char *asserted = NULL;
+ dbg_fatal_try_begin
+ {
+ cp_fsm_process (&cp);
+ }
+ dbg_fatal_try_catch (const char *msg)
+ {
+ asserted = msg;
+ }
+ dbg_fatal_try_end;
+ test_fail_unless (asserted);
+ } test_end;
+ test_begin (t, "not in transition")
+ {
+ cp_fsm_init (&cp);
+ const char *asserted = NULL;
+ dbg_fatal_try_begin
+ {
+ cp_fsm_branch (&cp, CP_FSM_BRANCH (STATE1, error_event_no_branch,
+ branch1));
+ }
+ dbg_fatal_try_catch (const char *msg)
+ {
+ asserted = msg;
+ }
+ dbg_fatal_try_end;
+ test_fail_unless (asserted);
+ } test_end;
+}
+
+void
test_fsm_test_suite (test_t t)
{
test_suite_begin (t, "fsm");
test_fsm_basic_test_case (t);
+ test_fsm_error_test_case (t);
+ test_case_begin (t, "memory");
+ test_begin (t, "memory")
+ {
+ test_fail_unless (blk_check_memory ());
+ } test_end;
}
int
@@ -89,6 +170,7 @@ main (int argc, char **argv)
{
test_t t;
test_init (t, argc, argv);
+ test_fsm_test_suite (t);
test_result (t);
return test_nb_failed (t) == 0 ? 0 : 1;
}