xref: /freebsd/crypto/openssl/test/time_test.c (revision e7be843b4a162e68651d3911f0357ed464915629)
1*e7be843bSPierre Pronchery /*
2*e7be843bSPierre Pronchery  * Copyright 2023 The OpenSSL Project Authors. All Rights Reserved.
3*e7be843bSPierre Pronchery  *
4*e7be843bSPierre Pronchery  * Licensed under the Apache License 2.0 (the "License").  You may not use
5*e7be843bSPierre Pronchery  * this file except in compliance with the License.  You can obtain a copy
6*e7be843bSPierre Pronchery  * in the file LICENSE in the source distribution or at
7*e7be843bSPierre Pronchery  * https://www.openssl.org/source/license.html
8*e7be843bSPierre Pronchery  */
9*e7be843bSPierre Pronchery 
10*e7be843bSPierre Pronchery #include "testutil.h"
11*e7be843bSPierre Pronchery #include "internal/time.h"
12*e7be843bSPierre Pronchery 
test_time_to_timeval(void)13*e7be843bSPierre Pronchery static int test_time_to_timeval(void)
14*e7be843bSPierre Pronchery {
15*e7be843bSPierre Pronchery     OSSL_TIME a;
16*e7be843bSPierre Pronchery     struct timeval tv;
17*e7be843bSPierre Pronchery 
18*e7be843bSPierre Pronchery     a = ossl_time_zero();
19*e7be843bSPierre Pronchery 
20*e7be843bSPierre Pronchery     tv = ossl_time_to_timeval(a);
21*e7be843bSPierre Pronchery     if (!TEST_long_eq(tv.tv_sec, 0) || !TEST_long_eq(tv.tv_usec, 0))
22*e7be843bSPierre Pronchery         return 0;
23*e7be843bSPierre Pronchery 
24*e7be843bSPierre Pronchery     /* Test that zero round trips */
25*e7be843bSPierre Pronchery     if (!TEST_true(ossl_time_is_zero(ossl_time_from_timeval(tv))))
26*e7be843bSPierre Pronchery         return 0;
27*e7be843bSPierre Pronchery 
28*e7be843bSPierre Pronchery     /* We should round up nano secs to the next usec */
29*e7be843bSPierre Pronchery     a = ossl_ticks2time(1);
30*e7be843bSPierre Pronchery     tv = ossl_time_to_timeval(a);
31*e7be843bSPierre Pronchery     if (!TEST_long_eq(tv.tv_sec, 0) || !TEST_long_eq(tv.tv_usec, 1))
32*e7be843bSPierre Pronchery         return 0;
33*e7be843bSPierre Pronchery     a = ossl_ticks2time(999);
34*e7be843bSPierre Pronchery     tv = ossl_time_to_timeval(a);
35*e7be843bSPierre Pronchery     if (!TEST_long_eq(tv.tv_sec, 0) || !TEST_long_eq(tv.tv_usec, 1))
36*e7be843bSPierre Pronchery         return 0;
37*e7be843bSPierre Pronchery     a = ossl_ticks2time(1000);
38*e7be843bSPierre Pronchery     tv = ossl_time_to_timeval(a);
39*e7be843bSPierre Pronchery     if (!TEST_long_eq(tv.tv_sec, 0) || !TEST_long_eq(tv.tv_usec, 1))
40*e7be843bSPierre Pronchery         return 0;
41*e7be843bSPierre Pronchery     a = ossl_ticks2time(1001);
42*e7be843bSPierre Pronchery     tv = ossl_time_to_timeval(a);
43*e7be843bSPierre Pronchery     if (!TEST_long_eq(tv.tv_sec, 0) || !TEST_long_eq(tv.tv_usec, 2))
44*e7be843bSPierre Pronchery         return 0;
45*e7be843bSPierre Pronchery     a = ossl_ticks2time(999000);
46*e7be843bSPierre Pronchery     tv = ossl_time_to_timeval(a);
47*e7be843bSPierre Pronchery     if (!TEST_long_eq(tv.tv_sec, 0) || !TEST_long_eq(tv.tv_usec, 999))
48*e7be843bSPierre Pronchery         return 0;
49*e7be843bSPierre Pronchery     a = ossl_ticks2time(999999001);
50*e7be843bSPierre Pronchery     tv = ossl_time_to_timeval(a);
51*e7be843bSPierre Pronchery     if (!TEST_long_eq(tv.tv_sec, 1) || !TEST_long_eq(tv.tv_usec, 0))
52*e7be843bSPierre Pronchery         return 0;
53*e7be843bSPierre Pronchery     a = ossl_ticks2time(999999999);
54*e7be843bSPierre Pronchery     tv = ossl_time_to_timeval(a);
55*e7be843bSPierre Pronchery     if (!TEST_long_eq(tv.tv_sec, 1) || !TEST_long_eq(tv.tv_usec, 0))
56*e7be843bSPierre Pronchery         return 0;
57*e7be843bSPierre Pronchery     a = ossl_ticks2time(1000000000);
58*e7be843bSPierre Pronchery     tv = ossl_time_to_timeval(a);
59*e7be843bSPierre Pronchery     if (!TEST_long_eq(tv.tv_sec, 1) || !TEST_long_eq(tv.tv_usec, 0))
60*e7be843bSPierre Pronchery         return 0;
61*e7be843bSPierre Pronchery     a = ossl_ticks2time(1000000001);
62*e7be843bSPierre Pronchery     tv = ossl_time_to_timeval(a);
63*e7be843bSPierre Pronchery     if (!TEST_long_eq(tv.tv_sec, 1) || !TEST_long_eq(tv.tv_usec, 1))
64*e7be843bSPierre Pronchery         return 0;
65*e7be843bSPierre Pronchery 
66*e7be843bSPierre Pronchery     /*
67*e7be843bSPierre Pronchery      * Note that we don't currently support infinity round tripping. Instead
68*e7be843bSPierre Pronchery      * callers need to explicitly test for infinity.
69*e7be843bSPierre Pronchery      */
70*e7be843bSPierre Pronchery 
71*e7be843bSPierre Pronchery     return 1;
72*e7be843bSPierre Pronchery }
73*e7be843bSPierre Pronchery 
setup_tests(void)74*e7be843bSPierre Pronchery int setup_tests(void)
75*e7be843bSPierre Pronchery {
76*e7be843bSPierre Pronchery     ADD_TEST(test_time_to_timeval);
77*e7be843bSPierre Pronchery 
78*e7be843bSPierre Pronchery     return 1;
79*e7be843bSPierre Pronchery }
80