From c5b48a6f042187fd73a9d068cedbb56a269cc716 Mon Sep 17 00:00:00 2001 From: Jerry Yu Date: Mon, 13 Mar 2023 14:28:06 +0800 Subject: [PATCH] Add time test with delay Signed-off-by: Jerry Yu --- tests/suites/test_suite_platform.data | 6 +++ tests/suites/test_suite_platform.function | 55 +++++++++++++++++++++-- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/tests/suites/test_suite_platform.data b/tests/suites/test_suite_platform.data index 4276b8fb77..e6c90732fd 100644 --- a/tests/suites/test_suite_platform.data +++ b/tests/suites/test_suite_platform.data @@ -4,3 +4,9 @@ time_get_milliseconds: Time: get seconds time_get_seconds: + +Time: delay milliseconds +time_delay_milliseconds:20 + +Time: delay seconds +time_delay_seconds:1 diff --git a/tests/suites/test_suite_platform.function b/tests/suites/test_suite_platform.function index dad464ba2d..478c52da7b 100644 --- a/tests/suites/test_suite_platform.function +++ b/tests/suites/test_suite_platform.function @@ -9,13 +9,36 @@ #if defined(MBEDTLS_HAVE_TIME) #include "mbedtls/platform_time.h" + +#ifdef WIN32 +#include +#elif _POSIX_C_SOURCE >= 199309L +#include +#else +#include +#endif +void sleep_ms(int milliseconds) +{ +#ifdef WIN32 + Sleep(milliseconds); +#elif _POSIX_C_SOURCE >= 199309L + struct timespec ts; + ts.tv_sec = milliseconds / 1000; + ts.tv_nsec = (milliseconds % 1000) * 1000000; + nanosleep(&ts, NULL); +#else + usleep(milliseconds * 1000); +#endif +} #endif /* END_HEADER */ -/* BEGIN_DEPENDENCIES - * END_DEPENDENCIES - */ +/* BEGIN_DEPENDENCIES */ + +/* END_DEPENDENCIES */ + + /* BEGIN_CASE depends_on:MBEDTLS_HAVE_TIME */ void time_get_milliseconds() @@ -36,3 +59,29 @@ void time_get_seconds() goto exit; } /* END_CASE */ + +/* BEGIN_CASE depends_on:MBEDTLS_HAVE_TIME */ +void time_delay_milliseconds(int delay_ms) +{ + mbedtls_ms_time_t current = mbedtls_ms_time(); + + sleep_ms(delay_ms); + + current = mbedtls_ms_time() - current; + TEST_ASSERT(current == delay_ms || current == delay_ms + 1); + /* This goto is added to avoid warnings from the generated code. */ + goto exit; +} +/* END_CASE */ + +/* BEGIN_CASE depends_on:MBEDTLS_HAVE_TIME */ +void time_delay_seconds(int delay) +{ + mbedtls_time_t current = mbedtls_time(NULL); + sleep_ms(delay*1000); + current = mbedtls_time(NULL) - current; + TEST_ASSERT(current == delay); + /* This goto is added to avoid warnings from the generated code. */ + goto exit; +} +/* END_CASE */