Message ID | 20210217232435.24045-1-lukma@denx.de |
---|---|
State | Superseded |
Headers |
Return-Path: <libc-alpha-bounces@sourceware.org> X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7D839398C008; Wed, 17 Feb 2021 23:24:59 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-out.m-online.net (mail-out.m-online.net [212.18.0.9]) by sourceware.org (Postfix) with ESMTPS id 6D347384B0C0 for <libc-alpha@sourceware.org>; Wed, 17 Feb 2021 23:24:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 6D347384B0C0 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=denx.de Authentication-Results: sourceware.org; spf=none smtp.mailfrom=lukma@denx.de Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 4Dgv7n6MzGz1qsjw; Thu, 18 Feb 2021 00:24:53 +0100 (CET) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 4Dgv7n5Bmdz1sP6v; Thu, 18 Feb 2021 00:24:53 +0100 (CET) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new, port 10024) with ESMTP id opsuUVZExU9A; Thu, 18 Feb 2021 00:24:51 +0100 (CET) X-Auth-Info: 5QXTP9DtUVW9H+zJ8Z6FO8sN3XUnj38gJjKgWY5e87s= Received: from localhost.localdomain (85-222-111-42.dynamic.chello.pl [85.222.111.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPSA; Thu, 18 Feb 2021 00:24:51 +0100 (CET) From: Lukasz Majewski <lukma@denx.de> To: Joseph Myers <joseph@codesourcery.com>, Adhemerval Zanella <adhemerval.zanella@linaro.org>, Florian Weimer <fweimer@redhat.com>, DJ Delorie <dj@redhat.com> Subject: [PATCH v2] tst: Add test for clock_adjtime Date: Thu, 18 Feb 2021 00:24:35 +0100 Message-Id: <20210217232435.24045-1-lukma@denx.de> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-15.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list <libc-alpha.sourceware.org> List-Unsubscribe: <https://sourceware.org/mailman/options/libc-alpha>, <mailto:libc-alpha-request@sourceware.org?subject=unsubscribe> List-Archive: <https://sourceware.org/pipermail/libc-alpha/> List-Post: <mailto:libc-alpha@sourceware.org> List-Help: <mailto:libc-alpha-request@sourceware.org?subject=help> List-Subscribe: <https://sourceware.org/mailman/listinfo/libc-alpha>, <mailto:libc-alpha-request@sourceware.org?subject=subscribe> Cc: GNU C Library <libc-alpha@sourceware.org>, Florian Weimer <fw@deneb.enyo.de>, Alistair Francis <alistair.francis@wdc.com> Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" <libc-alpha-bounces@sourceware.org> |
Series |
[v2] tst: Add test for clock_adjtime
|
|
Commit Message
Lukasz Majewski
Feb. 17, 2021, 11:24 p.m. UTC
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. --- Changes for v2: - Use timespec_sub and support_timespec_check_in_range to check if time has been adjusted properly --- time/Makefile | 2 +- time/tst-clock_adjtime.c | 59 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 time/tst-clock_adjtime.c
Comments
Dear Community, > 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. > Gentle ping on this patchset. > --- > Changes for v2: > - Use timespec_sub and support_timespec_check_in_range to check if > time has been adjusted properly > --- > time/Makefile | 2 +- > time/tst-clock_adjtime.c | 59 > ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 > insertions(+), 1 deletion(-) create mode 100644 > time/tst-clock_adjtime.c > > diff --git a/time/Makefile b/time/Makefile > index b6f0969f3d..fc6415bf8a 100644 > --- a/time/Makefile > +++ b/time/Makefile > @@ -51,7 +51,7 @@ tests := test_time clocktest tst-posixtz > tst-strptime tst_wcsftime \ tst-clock tst-clock2 tst-clock_nanosleep > tst-cpuclock1 \ tst-adjtime tst-ctime tst-difftime tst-mktime4 > tst-clock-y2038 \ tst-clock2-y2038 tst-cpuclock1-y2038 > tst-clock_nanosleep-y2038 \ > - tst-clock_settime > + 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..f31a4058ec > --- /dev/null > +++ b/time/tst-clock_adjtime.c > @@ -0,0 +1,59 @@ > +/* 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/timespec.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 if clock_adjtime adjusted the system time. */ > + struct timespec r = timespec_sub (tv_now, tv_then); > + TEST_COMPARE (support_timespec_check_in_range > + ((struct timespec) { 0, 1000000 }, r, 0.0009, > 0.0011), 0); + > + > + 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 17/02/2021 20:24, Lukasz Majewski wrote: > 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. > > --- > Changes for v2: > - Use timespec_sub and support_timespec_check_in_range to check if > time has been adjusted properly > --- > time/Makefile | 2 +- > time/tst-clock_adjtime.c | 59 ++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 60 insertions(+), 1 deletion(-) > create mode 100644 time/tst-clock_adjtime.c > > diff --git a/time/Makefile b/time/Makefile > index b6f0969f3d..fc6415bf8a 100644 > --- a/time/Makefile > +++ b/time/Makefile > @@ -51,7 +51,7 @@ tests := test_time clocktest tst-posixtz tst-strptime tst_wcsftime \ > tst-clock tst-clock2 tst-clock_nanosleep tst-cpuclock1 \ > tst-adjtime tst-ctime tst-difftime tst-mktime4 tst-clock-y2038 \ > tst-clock2-y2038 tst-cpuclock1-y2038 tst-clock_nanosleep-y2038 \ > - tst-clock_settime > + tst-clock_settime tst-clock_adjtime > > include ../Rules > Ok. > diff --git a/time/tst-clock_adjtime.c b/time/tst-clock_adjtime.c > new file mode 100644 > index 0000000000..f31a4058ec > --- /dev/null > +++ b/time/tst-clock_adjtime.c > @@ -0,0 +1,59 @@ > +/* 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/timespec.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"); Ok. > + > + 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; Maybe 1 ms is too low? I take that usually the system load on the testing scenario would be low, that's why you haven't see a potential issue. > + > + int ret = clock_adjtime (CLOCK_REALTIME, &delta); > + if (ret == -1) > + FAIL_EXIT1 ("clock_adjtime failed: %m\n"); > + > + tv_now = xclock_now (CLOCK_REALTIME); > + > + /* Check if clock_adjtime adjusted the system time. */ > + struct timespec r = timespec_sub (tv_now, tv_then); > + TEST_COMPARE (support_timespec_check_in_range > + ((struct timespec) { 0, 1000000 }, r, 0.0009, 0.0011), 0); > + > + > + return 0; > +} > + > +#include <support/test-driver.c> >
Hi Adhemerval, > On 17/02/2021 20:24, Lukasz Majewski wrote: > > 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. > > > > --- > > Changes for v2: > > - Use timespec_sub and support_timespec_check_in_range to check if > > time has been adjusted properly > > --- > > time/Makefile | 2 +- > > time/tst-clock_adjtime.c | 59 > > ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 > > insertions(+), 1 deletion(-) create mode 100644 > > time/tst-clock_adjtime.c > > > > diff --git a/time/Makefile b/time/Makefile > > index b6f0969f3d..fc6415bf8a 100644 > > --- a/time/Makefile > > +++ b/time/Makefile > > @@ -51,7 +51,7 @@ tests := test_time clocktest tst-posixtz > > tst-strptime tst_wcsftime \ tst-clock tst-clock2 > > tst-clock_nanosleep tst-cpuclock1 \ tst-adjtime tst-ctime > > tst-difftime tst-mktime4 tst-clock-y2038 \ tst-clock2-y2038 > > tst-cpuclock1-y2038 tst-clock_nanosleep-y2038 \ > > - tst-clock_settime > > + tst-clock_settime tst-clock_adjtime > > > > include ../Rules > > > > Ok. > > > diff --git a/time/tst-clock_adjtime.c b/time/tst-clock_adjtime.c > > new file mode 100644 > > index 0000000000..f31a4058ec > > --- /dev/null > > +++ b/time/tst-clock_adjtime.c > > @@ -0,0 +1,59 @@ > > +/* 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/timespec.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"); > > Ok. > > > + > > + 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; > > Maybe 1 ms is too low? I take that usually the system load on the > testing scenario would be low, that's why you haven't see a potential > issue. What time value would be more appropriate? 1second? > > > + > > + int ret = clock_adjtime (CLOCK_REALTIME, &delta); > > + if (ret == -1) > > + FAIL_EXIT1 ("clock_adjtime failed: %m\n"); > > + > > + tv_now = xclock_now (CLOCK_REALTIME); > > + > > + /* Check if clock_adjtime adjusted the system time. */ > > + struct timespec r = timespec_sub (tv_now, tv_then); > > + TEST_COMPARE (support_timespec_check_in_range > > + ((struct timespec) { 0, 1000000 }, r, 0.0009, > > 0.0011), 0); + > > + > > + 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 24/02/2021 10:18, Lukasz Majewski wrote: > Hi Adhemerval, > >> On 17/02/2021 20:24, Lukasz Majewski wrote: >>> 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. >>> >>> --- >>> Changes for v2: >>> - Use timespec_sub and support_timespec_check_in_range to check if >>> time has been adjusted properly >>> --- >>> time/Makefile | 2 +- >>> time/tst-clock_adjtime.c | 59 >>> ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 >>> insertions(+), 1 deletion(-) create mode 100644 >>> time/tst-clock_adjtime.c >>> >>> diff --git a/time/Makefile b/time/Makefile >>> index b6f0969f3d..fc6415bf8a 100644 >>> --- a/time/Makefile >>> +++ b/time/Makefile >>> @@ -51,7 +51,7 @@ tests := test_time clocktest tst-posixtz >>> tst-strptime tst_wcsftime \ tst-clock tst-clock2 >>> tst-clock_nanosleep tst-cpuclock1 \ tst-adjtime tst-ctime >>> tst-difftime tst-mktime4 tst-clock-y2038 \ tst-clock2-y2038 >>> tst-cpuclock1-y2038 tst-clock_nanosleep-y2038 \ >>> - tst-clock_settime >>> + tst-clock_settime tst-clock_adjtime >>> >>> include ../Rules >>> >> >> Ok. >> >>> diff --git a/time/tst-clock_adjtime.c b/time/tst-clock_adjtime.c >>> new file mode 100644 >>> index 0000000000..f31a4058ec >>> --- /dev/null >>> +++ b/time/tst-clock_adjtime.c >>> @@ -0,0 +1,59 @@ >>> +/* 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/timespec.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"); >> >> Ok. >> >>> + >>> + 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; >> >> Maybe 1 ms is too low? I take that usually the system load on the >> testing scenario would be low, that's why you haven't see a potential >> issue. > > What time value would be more appropriate? 1second? I would go with 1s and check with a range between 10%. It should give some slack if the system time triggers some background daemons, but at same time is large enough that the check would trigger if the time is not changed.
Hi Adhemerval > On 24/02/2021 10:18, Lukasz Majewski wrote: > > Hi Adhemerval, > > > >> On 17/02/2021 20:24, Lukasz Majewski wrote: > >>> 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. > >>> > >>> --- > >>> Changes for v2: > >>> - Use timespec_sub and support_timespec_check_in_range to check if > >>> time has been adjusted properly > >>> --- > >>> time/Makefile | 2 +- > >>> time/tst-clock_adjtime.c | 59 > >>> ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 > >>> insertions(+), 1 deletion(-) create mode 100644 > >>> time/tst-clock_adjtime.c > >>> > >>> diff --git a/time/Makefile b/time/Makefile > >>> index b6f0969f3d..fc6415bf8a 100644 > >>> --- a/time/Makefile > >>> +++ b/time/Makefile > >>> @@ -51,7 +51,7 @@ tests := test_time clocktest tst-posixtz > >>> tst-strptime tst_wcsftime \ tst-clock tst-clock2 > >>> tst-clock_nanosleep tst-cpuclock1 \ tst-adjtime tst-ctime > >>> tst-difftime tst-mktime4 tst-clock-y2038 \ tst-clock2-y2038 > >>> tst-cpuclock1-y2038 tst-clock_nanosleep-y2038 \ > >>> - tst-clock_settime > >>> + tst-clock_settime tst-clock_adjtime > >>> > >>> include ../Rules > >>> > >> > >> Ok. > >> > >>> diff --git a/time/tst-clock_adjtime.c b/time/tst-clock_adjtime.c > >>> new file mode 100644 > >>> index 0000000000..f31a4058ec > >>> --- /dev/null > >>> +++ b/time/tst-clock_adjtime.c > >>> @@ -0,0 +1,59 @@ > >>> +/* 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/timespec.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"); > >> > >> Ok. > >> > >>> + > >>> + 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; > >> > >> Maybe 1 ms is too low? I take that usually the system load on the > >> testing scenario would be low, that's why you haven't see a > >> potential issue. > > > > What time value would be more appropriate? 1second? > > I would go with 1s and check with a range between 10%. It should give > some slack if the system time triggers some background daemons, but > at same time is large enough that the check would trigger if the > time is not changed. Ok, I will set it as 1sec. 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
diff --git a/time/Makefile b/time/Makefile index b6f0969f3d..fc6415bf8a 100644 --- a/time/Makefile +++ b/time/Makefile @@ -51,7 +51,7 @@ tests := test_time clocktest tst-posixtz tst-strptime tst_wcsftime \ tst-clock tst-clock2 tst-clock_nanosleep tst-cpuclock1 \ tst-adjtime tst-ctime tst-difftime tst-mktime4 tst-clock-y2038 \ tst-clock2-y2038 tst-cpuclock1-y2038 tst-clock_nanosleep-y2038 \ - tst-clock_settime + 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..f31a4058ec --- /dev/null +++ b/time/tst-clock_adjtime.c @@ -0,0 +1,59 @@ +/* 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/timespec.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 if clock_adjtime adjusted the system time. */ + struct timespec r = timespec_sub (tv_now, tv_then); + TEST_COMPARE (support_timespec_check_in_range + ((struct timespec) { 0, 1000000 }, r, 0.0009, 0.0011), 0); + + + return 0; +} + +#include <support/test-driver.c>