Message ID | 20210310130056.23926-1-lukma@denx.de |
---|---|
State | New |
Headers | show |
Series | [v2,1/2] tst: Add test for ntp_gettime | expand |
Dear community, > This code provides test to check if time on target machine is properly > read via ntp_gettime syscall. > > --- > Changes for v2: > - Check time before and after calling ntp_gettime{x} to avoid > situation when seconds rollover between call to ntp_gettime and > wrapper providing current time. Are there any more comments regarding v2 of this patch? Is it ready for submission? > --- > sysdeps/unix/sysv/linux/Makefile | 2 +- > sysdeps/unix/sysv/linux/tst-ntp_gettime.c | 56 > +++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 > deletion(-) create mode 100644 > sysdeps/unix/sysv/linux/tst-ntp_gettime.c > > diff --git a/sysdeps/unix/sysv/linux/Makefile > b/sysdeps/unix/sysv/linux/Makefile index b8c1caa505..8a07870cb4 100644 > --- a/sysdeps/unix/sysv/linux/Makefile > +++ b/sysdeps/unix/sysv/linux/Makefile > @@ -113,7 +113,7 @@ tests += tst-clone tst-clone2 tst-clone3 > tst-fanotify tst-personality \ 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-futimes \ > - tst-lutimes > + tst-lutimes tst-ntp_gettime > tests-internal += tst-ofdlocks-compat tst-sigcontext-get_pc > tests-time64 += \ > tst-futimes-time64\ > 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..6cd3a0ec2c > --- /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 > + <https://www.gnu.org/licenses/>. */ > + > +#include <time.h> > +#include <stdlib.h> > +#include <sys/timex.h> > +#include <support/check.h> > +#include <support/xtime.h> > + > +#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); > + > + if (tv_after_ntp.tv_sec != ntv.time.tv_sec) > + FAIL_EXIT1 (STR(NTP_GETTIME_SYSCALL)" provided wrong time!\n"); > + > + return 0; > +} > + > +#include <support/test-driver.c> Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
On 10/03/2021 10:00, Lukasz Majewski wrote: > This code provides test to check if time on target machine is properly > read via ntp_gettime syscall. > > --- > Changes for v2: > - Check time before and after calling ntp_gettime{x} to avoid situation > when seconds rollover between call to ntp_gettime and wrapper providing > current time. LGTM with the format fixes below. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> > --- > sysdeps/unix/sysv/linux/Makefile | 2 +- > sysdeps/unix/sysv/linux/tst-ntp_gettime.c | 56 +++++++++++++++++++++++ > 2 files changed, 57 insertions(+), 1 deletion(-) > create mode 100644 sysdeps/unix/sysv/linux/tst-ntp_gettime.c > > diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile > index b8c1caa505..8a07870cb4 100644 > --- a/sysdeps/unix/sysv/linux/Makefile > +++ b/sysdeps/unix/sysv/linux/Makefile > @@ -113,7 +113,7 @@ tests += tst-clone tst-clone2 tst-clone3 tst-fanotify tst-personality \ > 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-futimes \ > - tst-lutimes > + tst-lutimes tst-ntp_gettime > tests-internal += tst-ofdlocks-compat tst-sigcontext-get_pc > tests-time64 += \ > tst-futimes-time64\ Ok. > 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..6cd3a0ec2c > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/tst-ntp_gettime.c > @@ -0,0 +1,56 @@ > +/* Test for ntp_gettime Missing period. > + 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/timex.h> > +#include <support/check.h> > +#include <support/xtime.h> > + > +#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); The correct indentation is: do { } while (...) The test looks ok. > + > + if (tv_after_ntp.tv_sec != ntv.time.tv_sec) > + FAIL_EXIT1 (STR(NTP_GETTIME_SYSCALL)" provided wrong time!\n"); Use TEST_COMPARE. > + > + return 0; > +} > + > +#include <support/test-driver.c> >
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index b8c1caa505..8a07870cb4 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -113,7 +113,7 @@ tests += tst-clone tst-clone2 tst-clone3 tst-fanotify tst-personality \ 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-futimes \ - tst-lutimes + tst-lutimes tst-ntp_gettime tests-internal += tst-ofdlocks-compat tst-sigcontext-get_pc tests-time64 += \ tst-futimes-time64\ 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..6cd3a0ec2c --- /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 + <https://www.gnu.org/licenses/>. */ + +#include <time.h> +#include <stdlib.h> +#include <sys/timex.h> +#include <support/check.h> +#include <support/xtime.h> + +#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); + + if (tv_after_ntp.tv_sec != ntv.time.tv_sec) + FAIL_EXIT1 (STR(NTP_GETTIME_SYSCALL)" provided wrong time!\n"); + + return 0; +} + +#include <support/test-driver.c>