blob: d5d4cdf728420044c73af37373c91f0941624487 [file] [log] [blame]
Jerry Yu9a12df02023-03-03 12:55:16 +08001/* BEGIN_HEADER */
2
3/* This test module exercises the platform_* module. Since, depending on the
4 * underlying operating system, the time routines are not always reliable,
5 * this suite only performs very basic sanity checks of the timing API.
6 */
7
8#include <limits.h>
9
10#if defined(MBEDTLS_HAVE_TIME)
11#include "mbedtls/platform_time.h"
Jerry Yuc5b48a62023-03-13 14:28:06 +080012
13#ifdef WIN32
14#include <windows.h>
15#elif _POSIX_C_SOURCE >= 199309L
16#include <time.h>
17#else
18#include <unistd.h>
19#endif
20void sleep_ms(int milliseconds)
21{
22#ifdef WIN32
23 Sleep(milliseconds);
24#elif _POSIX_C_SOURCE >= 199309L
25 struct timespec ts;
26 ts.tv_sec = milliseconds / 1000;
27 ts.tv_nsec = (milliseconds % 1000) * 1000000;
28 nanosleep(&ts, NULL);
29#else
30 usleep(milliseconds * 1000);
31#endif
32}
Jerry Yu9a12df02023-03-03 12:55:16 +080033#endif
34
35/* END_HEADER */
36
Jerry Yuc5b48a62023-03-13 14:28:06 +080037/* BEGIN_DEPENDENCIES */
38
39/* END_DEPENDENCIES */
40
41
Jerry Yu9a12df02023-03-03 12:55:16 +080042
43/* BEGIN_CASE depends_on:MBEDTLS_HAVE_TIME */
44void time_get_milliseconds()
45{
46 mbedtls_ms_time_t current = mbedtls_ms_time();
47 (void) current;
48 /* This goto is added to avoid warnings from the generated code. */
49 goto exit;
50}
51/* END_CASE */
52
53/* BEGIN_CASE depends_on:MBEDTLS_HAVE_TIME */
54void time_get_seconds()
55{
56 mbedtls_time_t current = mbedtls_time(NULL);
57 (void) current;
58 /* This goto is added to avoid warnings from the generated code. */
59 goto exit;
60}
61/* END_CASE */
Jerry Yuc5b48a62023-03-13 14:28:06 +080062
63/* BEGIN_CASE depends_on:MBEDTLS_HAVE_TIME */
64void time_delay_milliseconds(int delay_ms)
65{
66 mbedtls_ms_time_t current = mbedtls_ms_time();
Jerry Yu1f7dd8d2023-03-13 18:29:43 +080067 mbedtls_ms_time_t elapsed_ms;
Jerry Yuc5b48a62023-03-13 14:28:06 +080068
69 sleep_ms(delay_ms);
70
Jerry Yu1f7dd8d2023-03-13 18:29:43 +080071 elapsed_ms = mbedtls_ms_time() - current;
72 TEST_ASSERT(elapsed_ms >= delay_ms && elapsed_ms < 500 + delay_ms);
Jerry Yuc5b48a62023-03-13 14:28:06 +080073 /* This goto is added to avoid warnings from the generated code. */
74 goto exit;
75}
76/* END_CASE */
77
78/* BEGIN_CASE depends_on:MBEDTLS_HAVE_TIME */
Jerry Yu1f7dd8d2023-03-13 18:29:43 +080079void time_delay_seconds(int delay_secs)
Jerry Yuc5b48a62023-03-13 14:28:06 +080080{
81 mbedtls_time_t current = mbedtls_time(NULL);
Jerry Yu1f7dd8d2023-03-13 18:29:43 +080082 mbedtls_time_t elapsed_secs;
83
84 sleep_ms(delay_secs * 1000);
85
86 elapsed_secs = mbedtls_time(NULL) - current;
87 TEST_ASSERT(elapsed_secs >= delay_secs && elapsed_secs < 4 + delay_secs);
Jerry Yuc5b48a62023-03-13 14:28:06 +080088 /* This goto is added to avoid warnings from the generated code. */
89 goto exit;
90}
91/* END_CASE */