diff options
author | Vic Yang <victoryang@chromium.org> | 2013-05-11 23:30:01 +0800 |
---|---|---|
committer | ChromeBot <chrome-bot@google.com> | 2013-05-14 09:25:03 -0700 |
commit | fa9c222a7936a74a405cc254e1bdc7baa9cd65b2 (patch) | |
tree | 035cd67081778127ab3fe0631a794d12bbd8c733 /test/hooks.c | |
parent | e1c0b58c9638798fd51577b137d714038be5c1b7 (diff) | |
download | chrome-ec-fa9c222a7936a74a405cc254e1bdc7baa9cd65b2.tar.gz |
Add hook test
Test of hook functionality.
BUG=chrome-os-partner:19236
TEST=Pass the test
BRANCH=None
Change-Id: I4700f3061edd0707932e935a719fc73c3976892e
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/50957
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Diffstat (limited to 'test/hooks.c')
-rw-r--r-- | test/hooks.c | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/test/hooks.c b/test/hooks.c new file mode 100644 index 0000000000..1ece19e9cf --- /dev/null +++ b/test/hooks.c @@ -0,0 +1,127 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Test hooks. + */ + +#include "common.h" +#include "console.h" +#include "hooks.h" +#include "test_util.h" +#include "timer.h" +#include "util.h" + +static int init_hook_count; +static int tick_hook_count; +static int tick2_hook_count; +static int tick_count_seen_by_tick2; +static timestamp_t tick_time[2]; +static int second_hook_count; +static timestamp_t second_time[2]; +static int deferred_call_count; + +static void init_hook(void) +{ + init_hook_count++; +} +DECLARE_HOOK(HOOK_INIT, init_hook, HOOK_PRIO_DEFAULT); + +static void tick_hook(void) +{ + tick_hook_count++; + tick_time[0] = tick_time[1]; + tick_time[1] = get_time(); +} +DECLARE_HOOK(HOOK_TICK, tick_hook, HOOK_PRIO_DEFAULT); + +static void tick2_hook(void) +{ + tick2_hook_count++; + tick_count_seen_by_tick2 = tick_hook_count; +} +DECLARE_HOOK(HOOK_TICK, tick2_hook, HOOK_PRIO_DEFAULT+1); + +static void second_hook(void) +{ + second_hook_count++; + second_time[0] = second_time[1]; + second_time[1] = get_time(); +} +DECLARE_HOOK(HOOK_SECOND, second_hook, HOOK_PRIO_DEFAULT); + +static void deferred_func(void) +{ + deferred_call_count++; +} +DECLARE_DEFERRED(deferred_func); + +static int test_init(void) +{ + TEST_ASSERT(init_hook_count == 1); + return EC_SUCCESS; +} + +static int test_ticks(void) +{ + uint64_t interval; + int error_pct; + + usleep(1500 * MSEC); + + 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, 3); + + interval = second_time[1].val - second_time[0].val; + error_pct = (interval - 1000 * MSEC) * 100 / (1000 * MSEC); + TEST_ASSERT_ABS_LESS(error_pct, 3); + + return EC_SUCCESS; +} + +static int 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; +} + +static int test_deferred(void) +{ + deferred_call_count = 0; + hook_call_deferred(deferred_func, 10 * MSEC); + usleep(11 * MSEC); + TEST_ASSERT(deferred_call_count == 1); + + hook_call_deferred(deferred_func, 10 * MSEC); + usleep(5 * MSEC); + hook_call_deferred(deferred_func, -1); + usleep(10 * MSEC); + TEST_ASSERT(deferred_call_count == 1); + + hook_call_deferred(deferred_func, 10 * MSEC); + usleep(5 * MSEC); + hook_call_deferred(deferred_func, -1); + usleep(3 * MSEC); + hook_call_deferred(deferred_func, 5 * MSEC); + usleep(10 * MSEC); + TEST_ASSERT(deferred_call_count == 2); + + return EC_SUCCESS; +} + +void run_test(void) +{ + test_reset(); + + RUN_TEST(test_init); + RUN_TEST(test_ticks); + RUN_TEST(test_priority); + RUN_TEST(test_deferred); + + test_print_result(); +} |