From: Lukasz Majewski Date: Tue, 9 Mar 2021 10:33:34 +0000 (+0100) Subject: tst: Add test for ntp_gettime X-Git-Tag: glibc-2.34~799 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=c0c926d00dc1664b0231a63eab6a08b8720f9985;p=glibc.git tst: Add test for ntp_gettime This code provides test to check if time on target machine is properly read via ntp_gettime syscall. Reviewed-by: Adhemerval Zanella --- diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index e42bc7f13b..a6c087b5ea 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -108,7 +108,7 @@ tests += tst-clone tst-clone2 tst-clone3 tst-fanotify tst-personality \ tst-rlimit-infinity tst-ofdlocks tst-gettid tst-gettid-kill \ tst-tgkill tst-sysvsem-linux tst-sysvmsg-linux tst-sysvshm-linux \ tst-timerfd tst-ppoll tst-futimens tst-utime tst-utimes \ - tst-clock_adjtime tst-adjtimex tst-ntp_adjtime + tst-clock_adjtime tst-adjtimex tst-ntp_adjtime tst-ntp_gettime # Test for the symbol version of fcntl that was replaced in glibc 2.28. ifeq ($(have-GLIBC_2.27)$(build-shared),yesyes) diff --git a/sysdeps/unix/sysv/linux/tst-ntp_gettime.c b/sysdeps/unix/sysv/linux/tst-ntp_gettime.c new file mode 100644 index 0000000000..90cff8aea1 --- /dev/null +++ b/sysdeps/unix/sysv/linux/tst-ntp_gettime.c @@ -0,0 +1,56 @@ +/* Test for ntp_gettime. + 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 + . */ + +#include +#include +#include +#include +#include + +#ifndef NTP_GETTIME_SYSCALL +# define NTP_GETTIME_SYSCALL ntp_gettime +#endif + +#define STR(__s) #__s + +static int +do_test (void) +{ + struct timespec tv_before_ntp, tv_after_ntp; + struct ntptimeval ntv; + + /* To prevent seconds rollover (which is very unlikely though), + loop until we do match seconds values before and after + call to ntp_gettime. */ + do + { + tv_before_ntp = xclock_now (CLOCK_REALTIME); + + int ret = NTP_GETTIME_SYSCALL (&ntv); + if (ret == -1) + FAIL_EXIT1 (STR(NTP_GETTIME_SYSCALL)" failed: %m\n"); + + tv_after_ntp = xclock_now (CLOCK_REALTIME); + } + while (tv_after_ntp.tv_sec != tv_before_ntp.tv_sec); + + TEST_COMPARE (tv_after_ntp.tv_sec, ntv.time.tv_sec); + return 0; +} + +#include