diff options
Diffstat (limited to 'cts/hook/dut.c')
-rw-r--r-- | cts/hook/dut.c | 128 |
1 files changed, 81 insertions, 47 deletions
diff --git a/cts/hook/dut.c b/cts/hook/dut.c index 36494916b9..8be9121128 100644 --- a/cts/hook/dut.c +++ b/cts/hook/dut.c @@ -7,10 +7,12 @@ #include "common.h" #include "console.h" +#include "cts_common.h" +#include "dut_common.h" #include "hooks.h" -#include "test_util.h" #include "timer.h" #include "util.h" +#include "watchdog.h" static int init_hook_count; static int tick_hook_count; @@ -41,7 +43,7 @@ static void tick2_hook(void) tick_count_seen_by_tick2 = tick_hook_count; } /* tick2_hook() prio means it should be called after tick_hook() */ -DECLARE_HOOK(HOOK_TICK, tick2_hook, HOOK_PRIO_DEFAULT+1); +DECLARE_HOOK(HOOK_TICK, tick2_hook, HOOK_PRIO_DEFAULT + 1); static void second_hook(void) { @@ -57,22 +59,23 @@ static void deferred_func(void) } DECLARE_DEFERRED(deferred_func); -static void non_deferred_func(void) +static void invalid_deferred_func(void) { deferred_call_count++; } -static const struct deferred_data non_deferred_func_data = { - non_deferred_func +static const struct deferred_data invalid_deferred_func_data = { + invalid_deferred_func }; -static int test_init_hook(void) +static enum cts_rc test_init_hook(void) { - TEST_ASSERT(init_hook_count == 1); - return EC_SUCCESS; + if (init_hook_count != 1) + return CTS_RC_FAILURE; + return CTS_RC_SUCCESS; } -static int test_ticks(void) +static enum cts_rc test_ticks(void) { int64_t interval; int error_pct; @@ -82,66 +85,97 @@ static int test_ticks(void) * task starts. We only need to wait for just more than a second * to allow it fires for the second time. */ - usleep(1300 * MSEC); + msleep(1300); interval = tick_time[1].val - tick_time[0].val; error_pct = (interval - HOOK_TICK_INTERVAL) * 100 / HOOK_TICK_INTERVAL; - TEST_ASSERT_ABS_LESS(error_pct, 10); + if (error_pct < -10 || 10 < error_pct) { + CPRINTS("tick error=%d%% interval=%ld", error_pct, interval); + return CTS_RC_FAILURE; + } interval = second_time[1].val - second_time[0].val; error_pct = (interval - SECOND) * 100 / SECOND; - TEST_ASSERT_ABS_LESS(error_pct, 10); + if (error_pct < -10 || 10 < error_pct) { + CPRINTS("second error=%d%% interval=%ld", error_pct, interval); + return CTS_RC_FAILURE; + } - return EC_SUCCESS; + return CTS_RC_SUCCESS; } -static int test_priority(void) +static enum cts_rc test_priority(void) { usleep(HOOK_TICK_INTERVAL); - TEST_ASSERT(tick_hook_count == tick2_hook_count); - TEST_ASSERT(tick_hook_count == tick_count_seen_by_tick2); - - return EC_SUCCESS; + if (tick_hook_count != tick2_hook_count) + return CTS_RC_FAILURE; + if (tick_hook_count != tick_count_seen_by_tick2) + return CTS_RC_FAILURE; + return CTS_RC_SUCCESS; } -static int test_deferred(void) +static enum cts_rc test_deferred(void) { deferred_call_count = 0; hook_call_deferred(&deferred_func_data, 50 * MSEC); - usleep(100 * MSEC); - TEST_ASSERT(deferred_call_count == 1); - - hook_call_deferred(&deferred_func_data, 50 * MSEC); - usleep(25 * MSEC); - hook_call_deferred(&deferred_func_data, -1); - usleep(75 * MSEC); - TEST_ASSERT(deferred_call_count == 1); - + if (deferred_call_count != 0) { + CPRINTL("deferred_call_count=%d", deferred_call_count); + return CTS_RC_FAILURE; + } + msleep(100); + if (deferred_call_count != 1) { + CPRINTL("deferred_call_count=%d", deferred_call_count); + return CTS_RC_FAILURE; + } + + /* Test cancellation */ + deferred_call_count = 0; hook_call_deferred(&deferred_func_data, 50 * MSEC); - usleep(25 * MSEC); + msleep(25); hook_call_deferred(&deferred_func_data, -1); - usleep(15 * MSEC); - hook_call_deferred(&deferred_func_data, 25 * MSEC); - usleep(50 * MSEC); - TEST_ASSERT(deferred_call_count == 2); + msleep(75); + if (deferred_call_count != 0) { + CPRINTL("deferred_call_count=%d", deferred_call_count); + return CTS_RC_FAILURE; + } - TEST_ASSERT(hook_call_deferred(&non_deferred_func_data, 50 * MSEC) != - EC_SUCCESS); - usleep(100 * MSEC); - TEST_ASSERT(deferred_call_count == 2); - - return EC_SUCCESS; + /* Invalid deferred function */ + deferred_call_count = 0; + if (hook_call_deferred(&invalid_deferred_func_data, 50 * MSEC) + == EC_SUCCESS) { + CPRINTL("non_deferred_func_data"); + return CTS_RC_FAILURE; + } + msleep(100); + if (deferred_call_count != 0) { + CPRINTL("deferred_call_count=%d", deferred_call_count); + return CTS_RC_FAILURE; + } + + return CTS_RC_SUCCESS; } +#include "cts_testlist.h" + void cts_task(void) { - test_reset(); - - RUN_TEST(test_init_hook); - RUN_TEST(test_ticks); - RUN_TEST(test_priority); - RUN_TEST(test_deferred); - - test_print_result(); + enum cts_rc result; + int i; + + cflush(); + for (i = 0; i < CTS_TEST_ID_COUNT; i++) { + sync(); + CPRINTF("\n%s start\n", tests[i].name); + result = tests[i].run(); + CPRINTF("\n%s end %d\n", tests[i].name, result); + cflush(); + } + + CPRINTS("Hook test finished"); + cflush(); + while (1) { + watchdog_reload(); + sleep(1); + } } |