diff options
Diffstat (limited to 'tests/suites/test_suite_timing.function')
| -rw-r--r-- | tests/suites/test_suite_timing.function | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/suites/test_suite_timing.function b/tests/suites/test_suite_timing.function new file mode 100644 index 00000000000..4143a1c5112 --- /dev/null +++ b/tests/suites/test_suite_timing.function @@ -0,0 +1,57 @@ +/* BEGIN_HEADER */ + +/* This test module exercises the timing module. Since, depending on the + * underlying operating system, the timing routines are not always reliable, + * this suite only performs very basic sanity checks of the timing API. + */ + +#include <limits.h> + +#include "mbedtls/timing.h" + +/* END_HEADER */ + +/* BEGIN_DEPENDENCIES + * depends_on:MBEDTLS_TIMING_C + * END_DEPENDENCIES + */ + +/* BEGIN_CASE */ +void timing_get_timer() +{ + struct mbedtls_timing_hr_time time; + + memset(&time, 0, sizeof(time)); + + (void) mbedtls_timing_get_timer(&time, 1); + + /* Check that a non-zero time was written back */ + int all_zero = 1; + for (size_t i = 0; i < sizeof(time); i++) { + all_zero &= ((unsigned char *) &time)[i] == 0; + } + TEST_ASSERT(!all_zero); + + (void) mbedtls_timing_get_timer(&time, 0); + + /* This goto is added to avoid warnings from the generated code. */ + goto exit; +} +/* END_CASE */ + +/* BEGIN_CASE */ +void timing_delay(int fin_ms) +{ + mbedtls_timing_delay_context ctx; + int result; + if (fin_ms == 0) { + mbedtls_timing_set_delay(&ctx, 0, 0); + result = mbedtls_timing_get_delay(&ctx); + TEST_ASSERT(result == -1); + } else { + mbedtls_timing_set_delay(&ctx, fin_ms / 2, fin_ms); + result = mbedtls_timing_get_delay(&ctx); + TEST_ASSERT(result >= 0 && result <= 2); + } +} +/* END_CASE */ |
