/* 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 #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_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 < 4000 + 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 */