| /* BEGIN_HEADER */ |
| |
| /* This test module exercises the platform_* module. Since, depending on the |
| * underlying operating system, the time routines are not always reliable, |
| * this suite only performs very basic sanity checks of the timing API. |
| */ |
| |
| #include <limits.h> |
| |
| #if defined(MBEDTLS_HAVE_TIME) |
| #include "mbedtls/platform_time.h" |
| |
| #ifdef WIN32 |
| #include <windows.h> |
| #elif _POSIX_C_SOURCE >= 199309L |
| #include <time.h> |
| #else |
| #include <unistd.h> |
| #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_CASE depends_on:MBEDTLS_HAVE_TIME */ |
| void time_get_milliseconds() |
| { |
| mbedtls_ms_time_t current = mbedtls_ms_time(); |
| (void) current; |
| /* This goto is added to avoid warnings from the generated code. */ |
| goto exit; |
| } |
| /* END_CASE */ |
| |
| /* BEGIN_CASE depends_on:MBEDTLS_HAVE_TIME */ |
| void time_get_seconds() |
| { |
| mbedtls_time_t current = mbedtls_time(NULL); |
| (void) current; |
| /* 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_milliseconds(int delay_ms) |
| { |
| mbedtls_ms_time_t current = mbedtls_ms_time(); |
| mbedtls_ms_time_t elapsed_ms; |
| |
| sleep_ms(delay_ms); |
| |
| elapsed_ms = mbedtls_ms_time() - current; |
| TEST_ASSERT(elapsed_ms >= delay_ms && elapsed_ms < 500 + delay_ms); |
| /* 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_secs) |
| { |
| mbedtls_time_t current = mbedtls_time(NULL); |
| mbedtls_time_t elapsed_secs; |
| |
| sleep_ms(delay_secs * 1000); |
| |
| elapsed_secs = mbedtls_time(NULL) - current; |
| TEST_ASSERT(elapsed_secs >= delay_secs && elapsed_secs < 4 + delay_secs); |
| /* This goto is added to avoid warnings from the generated code. */ |
| goto exit; |
| } |
| /* END_CASE */ |