diff options
author | Lukasz Majewski <lukma@denx.de> | 2021-01-20 12:10:42 +0100 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2021-02-18 20:42:42 -0300 |
commit | 244bde537235372ae1b16f60d83986f6fb5ae225 (patch) | |
tree | 80924cb76eb76de3dcb8c3fade09721b3beec9eb | |
parent | cf7c9381eec96e238187f4b141d7d7520c8562cb (diff) | |
download | glibc-244bde537235372ae1b16f60d83986f6fb5ae225.tar.gz |
tst: Add test for clock_adjtime
This code brings test to check if time on target machine is properly
adjusted.
The time is altered only when cross-test-ssh.sh is executed with
--allow-time-setting flag
As the delta added to CLOCK_REALTIME is only 1ms the original time is
not restored and further tests are executed with this bias.
-rw-r--r-- | time/Makefile | 3 | ||||
-rw-r--r-- | time/tst-clock_adjtime.c | 61 |
2 files changed, 63 insertions, 1 deletions
diff --git a/time/Makefile b/time/Makefile index b3c5368c3b..0d571fb777 100644 --- a/time/Makefile +++ b/time/Makefile @@ -48,7 +48,8 @@ tests := test_time clocktest tst-posixtz tst-strptime tst_wcsftime \ tst-strptime3 bug-getdate1 tst-strptime-whitespace tst-ftime \ tst-tzname tst-y2039 bug-mktime4 tst-strftime2 tst-strftime3 \ tst-clock tst-clock2 tst-clock_nanosleep tst-cpuclock1 \ - tst-adjtime tst-ctime tst-difftime tst-mktime4 tst-clock_settime + tst-adjtime tst-ctime tst-difftime tst-mktime4 tst-clock_settime \ + tst-clock_adjtime include ../Rules diff --git a/time/tst-clock_adjtime.c b/time/tst-clock_adjtime.c new file mode 100644 index 0000000000..ece68acc5f --- /dev/null +++ b/time/tst-clock_adjtime.c @@ -0,0 +1,61 @@ +/* Test for clock_adjtime + Copyright (C) 2021 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <time.h> +#include <stdlib.h> +#include <sys/time.h> +#include <sys/timex.h> +#include <support/check.h> +#include <support/xtime.h> + +static int +do_test (void) +{ + struct timespec tv_then, tv_now; + struct timex delta; + + /* Check if altering target time is allowed. */ + if (getenv (SETTIME_ENV_NAME) == NULL) + FAIL_UNSUPPORTED ("clock_adjtime is executed only when "\ + SETTIME_ENV_NAME" is set\n"); + + tv_then = xclock_now (CLOCK_REALTIME); + + /* Setup time value to adjust - 1 ms. */ + delta.time.tv_sec = 0; + delta.time.tv_usec = 1000; + delta.modes = ADJ_SETOFFSET; + + int ret = clock_adjtime (CLOCK_REALTIME, &delta); + if (ret == -1) + FAIL_EXIT1 ("*** clock_adjtime failed: %m\n"); + + tv_now = xclock_now (CLOCK_REALTIME); + + /* Check difference between timerfd_gettime calls. */ + long long int diff = tv_now.tv_sec - tv_then.tv_sec; + diff *= 1000000000; + diff += tv_now.tv_nsec - tv_then.tv_nsec; + /* The adjustment cannot be large than 10 ms. */ + if (diff > 10000000) + FAIL_EXIT1 ("clock_adjtime set wrong time!\n"); + + return 0; +} + +#include <support/test-driver.c> |