From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
To: Lukasz Majewski <lukma@denx.de>
Cc: Joseph Myers <joseph@codesourcery.com>,
Florian Weimer <fweimer@redhat.com>,
GNU C Library <libc-alpha@sourceware.org>,
Carlos O'Donell <carlos@redhat.com>
Subject: Re: [PATCH v4 1/3] tst: Extend cross-test-ssh.sh to specify if target date can be altered
Date: Tue, 2 Mar 2021 10:58:27 -0300 [thread overview]
Message-ID: <c9b93a0f-5a46-ad37-125b-b3837cdc1d90@linaro.org> (raw)
In-Reply-To: <20210301000623.076245ef@jawa>
On 28/02/2021 20:06, Lukasz Majewski wrote:
> Hi Adhemerval,
>
>> On 17/02/2021 19:31, Lukasz Majewski wrote:
>>> This code adds new flag - '--allow-time-setting' to
>>> cross-test-ssh.sh script to indicate if it is allowed to alter the
>>> date on the system on which tests are executed. This change is
>>> supposed to be used with test systems, which use virtual machines
>>> for testing.
>>>
>>> The GLIBC_TEST_ALLOW_TIME_SETTING env variable is exported to the
>>> remote environment on which the eligible test is run and brings no
>>> functional change when it is not.
>>>
>>> Changes for v2:
>>> - Utilize flock to provide serialization of cross-test-ssh.sh script
>>> execution.
>>> - Add entry to manual/install.texi about --allow-time-setting flag
>>> usage.
>>>
>>> Changes for v3:
>>> - The install.texi manual has been augmented to explain two distinct
>>> use cases for setting the time on target system.
>>>
>>> Changes for v4:
>>> - Add -w switch to flock (specify timeout)
>>> - Check return value of flock - exit ssh shell script
>>> - Allow user override of FLOCK_* variables
>>> - Rewrite the script's information/help text
>>> - Rewrite the install.texi manual entry for this
>>> script usage
>>
>> I think this would require a v5: if you decide to use the flock
>> command it should be documented on the manual, otherwise it should be
>> done with the .NOTPARALLEL special rule (as below).
>>
>>> ---
>>> manual/install.texi | 17 +++++++++++++++++
>>> scripts/cross-test-ssh.sh | 26 +++++++++++++++++++++++++-
>>> 2 files changed, 42 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/manual/install.texi b/manual/install.texi
>>> index 419576f49c..5b32401805 100644
>>> --- a/manual/install.texi
>>> +++ b/manual/install.texi
>>> @@ -380,6 +380,23 @@ the newly built binaries of @theglibc{}. The
>>> source and build directories must be visible at the same locations
>>> on both the build system and @var{hostname}.
>>>
>>> +It is also possible to execute tests, which require setting date on
>>> +the target machine. Following use cases are supported:
>>
>> Two space after period. There are other occurrences that need to be
>> fixed on this patch as well.
>>
>>> +@itemize @bullet
>>> +@item
>>> +@code{GLIBC_TEST_ALLOW_TIME_SETTING} is set in the environment in
>>> +which eligible tests are executed and have priviledges to run
>>
>> s/priviledges/privilege
>>
>>> +@code{clock_settime}. In this case nothing prevents those tests
>>> from +running in parallel, so the caller shall assure that those
>>> tests +are serialized or provide a proper wrapper script for it.
>>> +
>>> +@item
>>> +The @code{cross-test-ssh.sh} script is used and one passes the
>>> +@option{--allow-time-setting} flag. In this case both setting
>>> +@code{GLIBC_TEST_ALLOW_TIME_SETTING} and serialization of tests
>>> +execution are assured automatically.
>>> +@end itemize
>>> +
>>> In general, when testing @theglibc{}, @samp{test-wrapper} may be
>>> set to the name and arguments of any program to run newly built
>>> binaries. This program must preserve the arguments to the binary
>>> being run, its diff --git a/scripts/cross-test-ssh.sh
>>> b/scripts/cross-test-ssh.sh index 6d8fbcdfd2..e73802974d 100755
>>> --- a/scripts/cross-test-ssh.sh
>>> +++ b/scripts/cross-test-ssh.sh
>>> @@ -22,7 +22,7 @@
>>>
>>> progname="$(basename $0)"
>>>
>>> -usage="usage: ${progname} [--ssh SSH] HOST COMMAND ..."
>>> +usage="usage: ${progname} [--ssh SSH] [--allow-time-setting] HOST
>>> COMMAND ..." help="Run a glibc test COMMAND on the remote machine
>>> HOST, via ssh, preserving the current working directory, and
>>> respecting quoting.
>>> @@ -32,6 +32,11 @@ instead of ordinary 'ssh'.
>>> If the '--timeoutfactor FACTOR' flag is present, set TIMEOUTFACTOR
>>> on the remote machine to the specified FACTOR.
>>>
>>> +If the '--allow-time-setting' flag is present, set
>>> +GLIBC_TEST_ALLOW_TIME_SETTING on the remote machine to indicate
>>> that +time can be safely adjusted when e.g. tests are run in a
>>> virtual +machine.
>>
>> Maybe:
>>
>> time can be safely adjusted (e.g. on a virtual machine).
>>
>>> +
>>> To use this to run glibc tests, invoke the tests as follows:
>>>
>>> $ make test-wrapper='ABSPATH/cross-test-ssh.sh HOST' tests
>>> @@ -81,6 +86,10 @@ while [ $# -gt 0 ]; do
>>> timeoutfactor="$1"
>>> ;;
>>>
>>> + "--allow-time-setting")
>>> + settimeallowed="1"
>>> + ;;
>>> +
>>> "--help")
>>> echo "$usage"
>>> echo "$help"
>>
>> Ok.
>>
>>> @@ -127,6 +136,21 @@ if [ "$timeoutfactor" ]; then
>>> ${command}"
>>> fi
>>>
>>> +# Add command to set the info that time on target can be adjusted,
>>> +# if required.
>>> +# Serialize execution of this script on target to prevent from
>>> unintended +# change of target time.
>>> +FLOCK_PATH="${FLOCK_PATH:-/var/lock/clock_settime}"
>>> +FLOCK_TIMEOUT="${FLOCK_TIMEOUT:-20}"
>>> +FLOCK_FD="${FLOCK_FD:-99}"
>>> +if [ "$settimeallowed" ]; then
>>> + command="exec ${FLOCK_FD}<>${FLOCK_PATH}
>>> +flock -w ${FLOCK_TIMEOUT} ${FLOCK_FD}
>>> +if [ $? -ne 0 ]; then exit 1; fi
>>> +export GLIBC_TEST_ALLOW_TIME_SETTING=1
>>> +${command}"
>>> +fi
>>> +
>>> # HOST's sshd simply concatenates its arguments with spaces and
>>> # passes them to some shell. We want to force the use of /bin/sh,
>>> # so we need to re-quote the whole command to ensure it appears as
>>>
>>
>> This requires the util-linux to be installed on the system (flock).
>> I think this should ok, but it need a note on the manual specifying
>> that if '--allow-time-setting' is used the 'flock' command should be
>> present on the target system.
>>
>
> The 'flock' solution has on big advantage - it is easy to add to the
> cross-test-ssh.sh script. It just extends this particular wrapper (a
> few lines of code), as it is forbidden (for now) to adjust time on HOST
> (i.e. non VM) system.
>
> It works well for running Y2038 VM tests.
>
>> The usual way to force non-parallel testing (as done for nptl and
>> benchtests) is through the special target .NOTPARALLEL.
>
> The approach with .NOTPARALLEL seems to be more generic, but would
> require some Makefiles (and Rules) modification, which may be time
> consuming.
>
>> Not sure
>> how easy would be to check , but one option would be to check
>> for '--allow-time-setting' on test-wrapper command and add the
>> .NOTPARALLEL rules as done in nptl/Makefile.
>
> I also think that the implementation would require checking arguments
> passed to 'test-wrapper' env variable and define .NOTPARALLEL: target
> for several Makefiles (in ./time , ./misc , ./io , etc.).
>
> I do have a feeling that for our purpose (to add tests) it would be
> easier for maintenance to use 'flock' and then (if required) move to
> .NOTPARALLEL. In the end of the day both approaches do their job, but
> IMHO 'flock' is easier to maintain and implement.
Fair enough, flock seems ok. Please add a note on INSTALL that it requires
flock from util-linux to work with GLIBC_TEST_ALLOW_TIME_SETTING
>
>
> Off topic:
> ----------
> What is the purpose of MAKECMDGOALS variable in nptl/Makefile? It
> is only used in this place.
>
This is set by GNU make itself [1] and my understanding it runs the
nptl tests in non-parallel manner unless you specify the test itself
(make test t=nptl/xxxxx).
[1] https://www.gnu.org/software/make/manual/html_node/Goals.html
>
> 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
>
prev parent reply other threads:[~2021-03-02 13:58 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-17 22:31 Lukasz Majewski
2021-02-17 22:31 ` [PATCH v4 2/3] support: Provide xclock_settime test helper function Lukasz Majewski
2021-02-24 9:23 ` Lukasz Majewski
2021-02-24 12:44 ` Adhemerval Zanella
2021-02-17 22:31 ` [PATCH v4 3/3] tst: Add test for clock_settime Lukasz Majewski
2021-02-24 9:21 ` [PATCH v4 1/3] tst: Extend cross-test-ssh.sh to specify if target date can be altered Lukasz Majewski
2021-02-24 12:42 ` Adhemerval Zanella
2021-02-28 23:06 ` Lukasz Majewski
2021-03-02 13:58 ` Adhemerval Zanella [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c9b93a0f-5a46-ad37-125b-b3837cdc1d90@linaro.org \
--to=adhemerval.zanella@linaro.org \
--cc=carlos@redhat.com \
--cc=fweimer@redhat.com \
--cc=joseph@codesourcery.com \
--cc=libc-alpha@sourceware.org \
--cc=lukma@denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).