From 990c25d4f328d49fa8c68412b458e94a2de4aaf4 Mon Sep 17 00:00:00 2001 From: Dirk Ziegelmeier Date: Fri, 12 Jan 2018 12:37:16 +0100 Subject: [PATCH] Add unit test for a long running timer --- src/include/lwip/arch.h | 3 +++ test/unit/core/test_timers.c | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/include/lwip/arch.h b/src/include/lwip/arch.h index 707c7918..069060ff 100644 --- a/src/include/lwip/arch.h +++ b/src/include/lwip/arch.h @@ -203,6 +203,9 @@ typedef int ssize_t; #define SSIZE_MAX INT_MAX #endif /* SSIZE_MAX */ +/* some maximum values needed in lwip code */ +#define LWIP_UINT32_MAX 0xffffffff + /** Define this to 1 in arch/cc.h of your port if your compiler does not provide * the ctype.h header. If ctype.h is available, a few character functions * are mapped to the appropriate functions (lwip_islower, lwip_isdigit...), if diff --git a/test/unit/core/test_timers.c b/test/unit/core/test_timers.c index 39804230..820b7189 100644 --- a/test/unit/core/test_timers.c +++ b/test/unit/core/test_timers.c @@ -187,6 +187,38 @@ START_TEST(test_timers) } END_TEST +START_TEST(test_long_timer) +{ + LWIP_UNUSED_ARG(_i); + + memset(&fired, 0, sizeof(fired)); + lwip_sys_now = 0; + + sys_timeout(LWIP_UINT32_MAX / 4, dummy_handler, LWIP_PTR_NUMERIC_CAST(void*, 0)); + fail_unless(sys_timeouts_sleeptime() == LWIP_UINT32_MAX / 4); + + sys_check_timeouts(); + fail_unless(fired[0] == 0); + + lwip_sys_now += LWIP_UINT32_MAX / 8; + + sys_check_timeouts(); + fail_unless(fired[0] == 0); + + lwip_sys_now += LWIP_UINT32_MAX / 8; + + sys_check_timeouts(); + fail_unless(fired[0] == 0); + + lwip_sys_now += 1; + + sys_check_timeouts(); + fail_unless(fired[0] == 1); + + sys_untimeout(dummy_handler, LWIP_PTR_NUMERIC_CAST(void*, 0)); +} +END_TEST + /** Create the suite including all tests for this module */ Suite * timers_suite(void) @@ -194,7 +226,8 @@ timers_suite(void) testfunc tests[] = { TESTFUNC(test_bug52748), TESTFUNC(test_cyclic_timers), - TESTFUNC(test_timers) + TESTFUNC(test_timers), + TESTFUNC(test_long_timer), }; return create_suite("TIMERS", tests, LWIP_ARRAYSIZE(tests), timers_setup, timers_teardown); }