From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) by sourceware.org (Postfix) with ESMTPS id 041F63846020 for ; Thu, 6 May 2021 09:10:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 041F63846020 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=denx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=lukma@denx.de Received: from jawa (85-222-111-42.dynamic.chello.pl [85.222.111.42]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: lukma@denx.de) by phobos.denx.de (Postfix) with ESMTPSA id 1B76B82A80; Thu, 6 May 2021 11:10:51 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1620292252; bh=7rGnQr67Sp5aYOVXMCSaNpVFTZva0VPTKthZ+g7RS7M=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=x3551z6vUZm4pJspx8NeVcja/R9RVXfDrb9CGBTOUt3BnD917s5mP+6haQ2xze7TR v5zF5pf5CLKmlbyE8+C7NAB5zaWixLtw3gXJx6HmqeYJXQ2MmjHpn1QgQ6uJNk0Qht xEhLw/pEGoLYKe9QQdtmmLdYqAnHVN7SH47MA72SUvmNZhITlaop0Tm0xul+BNg3KI /UIlBgpeyD99C4R6Tqr3KvZ+mhMkZ1FJP5t7Z2iFB1Z8D3aTL3JbatMJA6mWYk4eFa Zp4/vufKIbNVFOVA4EFPIxlBJN1CzCbdHHdaAtCYo55UXIEjoDbogs85DeHg7fZ/Tf mB5l3zVAaYd4w== Date: Thu, 6 May 2021 11:10:50 +0200 From: Lukasz Majewski To: Joseph Myers , Adhemerval Zanella Cc: Florian Weimer , GNU C Library Subject: Re: [PATCH v2] tst: Add test for adjtime Message-ID: <20210506111050.141de364@jawa> In-Reply-To: <20210331144952.45eb7202@jawa> References: <20210324130102.9752-1-lukma@denx.de> <20210331144952.45eb7202@jawa> Organization: denx.de X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; boundary="Sig_/uES2av4i99tqMkWn/mDT4+8"; protocol="application/pgp-signature" X-Virus-Scanned: clamav-milter 0.102.4 at phobos.denx.de X-Virus-Status: Clean X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, SPF_HELO_NONE, SPF_PASS, 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 May 2021 09:10:56 -0000 --Sig_/uES2av4i99tqMkWn/mDT4+8 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable On Wed, 31 Mar 2021 14:49:52 +0200 Lukasz Majewski wrote: > Dear Community, >=20 > > This code provides 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. > >=20 > > As the delta added to clock is only 1 sec the original time is not > > restored and further tests are executed with this bias. > >=20 > > It is important to note that adjtime() adjusts the system time with > > small amounts in each second (it is in fact a wrapper on > > clock_adjtime with modes =3D ADJ_OFFSET_SINGLESHOT). In other words > > some seconds (may be a random value) needs to elapse until the > > required time offset is added to the clock. It may take > > considerable time (in minutes) to adjust clock by e.g. 1 second. > >=20 > > To handle that the struct timeval odelta is passed to adjtime (NULL, > > &odelta) to get information of the still required delta to be added > > to clock. This is done in loop until its members are equal to 0. > >=20 > > As a reference - CLOCK_MONOTONIC is used to check if CLOCK_REALTIME > > has been adjusted. The difference between them is measured. > >=20 > > --- > > Changes for v2: > > - Correct code indentation > > --- =20 >=20 > Gentle ping on this patch. Is this approach acceptable for testing > adjtime?=20 Gentle ping on this test. >=20 > > sysdeps/unix/sysv/linux/Makefile | 3 +- > > sysdeps/unix/sysv/linux/tst-adjtime.c | 83 > > +++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 1 > > deletion(-) create mode 100644 sysdeps/unix/sysv/linux/tst-adjtime.c > >=20 > > diff --git a/sysdeps/unix/sysv/linux/Makefile > > b/sysdeps/unix/sysv/linux/Makefile index ddc1e748e6..30c8629386 > > 100644 --- a/sysdeps/unix/sysv/linux/Makefile > > +++ b/sysdeps/unix/sysv/linux/Makefile > > @@ -113,7 +113,8 @@ tests +=3D 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-ntp_gettime \ > > - tst-ntp_gettimex tst-sigtimedwait tst-futimes tst-lutimes > > + tst-ntp_gettimex tst-sigtimedwait tst-futimes tst-lutimes > > \ > > + tst-adjtime > > =20 > > # 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-adjtime.c > > b/sysdeps/unix/sysv/linux/tst-adjtime.c new file mode 100644 > > index 0000000000..4b24fcb890 > > --- /dev/null > > +++ b/sysdeps/unix/sysv/linux/tst-adjtime.c > > @@ -0,0 +1,83 @@ > > +/* Test for 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 > > + . */ > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +#define TIMEOUT (60*10) > > +#define ADJTIME_LOOP_SLEEP 10000 > > + > > +static int > > +do_test (void) > > +{ > > + struct timespec tv_then, tv_now, tv_then_m, tv_now_m; > > + struct timeval delta, odelta; > > + int ret; > > + > > + /* Check if altering target time is allowed. */ > > + if (getenv (SETTIME_ENV_NAME) =3D=3D NULL) > > + FAIL_UNSUPPORTED ("adjtime is executed only when "\ > > + SETTIME_ENV_NAME" is set\n"); > > + > > + tv_then =3D xclock_now (CLOCK_REALTIME); > > + tv_then_m =3D xclock_now (CLOCK_MONOTONIC); > > + > > + /* Setup time value to adjust - 1 sec. */ > > + delta.tv_sec =3D 1; > > + delta.tv_usec =3D 0; > > + > > + ret =3D adjtime (&delta, NULL); > > + if (ret =3D=3D -1) > > + FAIL_EXIT1 ("adjtime failed: %m\n"); > > + > > + /* As adjtime adjust clock time gradually by some small > > percentage > > + of delta in each second one needs to check if this process has > > + been finished. */ > > + do > > + { > > + ret =3D adjtime (NULL, &odelta); > > + if (ret =3D=3D -1) > > + FAIL_EXIT1 ("adjtime failed: %m\n"); > > + > > + ret =3D usleep (ADJTIME_LOOP_SLEEP); > > + if (ret !=3D 0) > > + FAIL_EXIT1 ("usleep failed: %m\n"); > > + } > > + while ( ! (odelta.tv_sec =3D=3D 0 && odelta.tv_usec =3D=3D 0)); > > + > > + tv_now =3D xclock_now (CLOCK_REALTIME); > > + tv_now_m =3D xclock_now (CLOCK_MONOTONIC); > > + > > + /* Check if adjtime adjusted the system time. */ > > + struct timespec r =3D timespec_sub (tv_now, tv_then); > > + struct timespec r_m =3D timespec_sub (tv_now_m, tv_then_m); > > + > > + struct timespec r_adjtime =3D timespec_sub (r, r_m); > > + > > + TEST_COMPARE (support_timespec_check_in_range > > + ((struct timespec) { 1, 0 }, r_adjtime, 0.9, 1.1), > > 1); + > > + return 0; > > +} > > + > > +#include =20 >=20 >=20 >=20 >=20 > Best regards, >=20 > Lukasz Majewski >=20 > -- >=20 > 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 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 --Sig_/uES2av4i99tqMkWn/mDT4+8 Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQEyBAEBCgAdFiEEgAyFJ+N6uu6+XupJAR8vZIA0zr0FAmCTspoACgkQAR8vZIA0 zr07HQf4+6IepROr6PTX93up4Tk8bsZqrSCWyYqtg5JfkeRz9+oOcRozHJEYWpUk kee0UPl+Cw5hoqHgfHxrDTEW4YKNgtodyEYWpyxNE/M+Vp9h24I653nwopzP7aqH XMJdhn/Dpa7w8xCl0taY6a451RItWmDtfbEtClt8AL4RWVwrO0A0vqlYnaE4fwQE wB4xWfiyWKXQ8vAJkjyOtP/az2egypkN1sikd3L8npNP2RyRt09/y7PQp3TOr5NA S1mOOKs4x8cM0NGjwp4ViO39+TfH5N24M0/Nqt4oLnag+3WRgL4AqOxpfMU4Doyf TYl3j3D8P+d6WtRJB23Qb8RlmxCG =7zG1 -----END PGP SIGNATURE----- --Sig_/uES2av4i99tqMkWn/mDT4+8--