diff options
-rw-r--r-- | INSTALL | 15 | ||||
-rw-r--r-- | manual/install.texi | 20 | ||||
-rwxr-xr-x | scripts/cross-test-ssh.sh | 25 |
3 files changed, 59 insertions, 1 deletions
diff --git a/INSTALL b/INSTALL index 9a50e3ee06..065a568585 100644 --- a/INSTALL +++ b/INSTALL @@ -347,6 +347,21 @@ is the absolute directory name for the main source directory and HOSTNAME is the host name of a system that can run the newly built binaries of the GNU C Library. The source and build directories must be visible at the same locations on both the build system and HOSTNAME. +The 'cross-test-ssh.sh' script requires 'flock' from 'util-linux' to +work when GLIBC_TEST_ALLOW_TIME_SETTING environment variable is set. + + It is also possible to execute tests, which require setting the date +on the target machine. Following use cases are supported: + * 'GLIBC_TEST_ALLOW_TIME_SETTING' is set in the environment in which + eligible tests are executed and have the privilege to run + '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 them. + + * The 'cross-test-ssh.sh' script is used and one passes the + '--allow-time-setting' flag. In this case, both sets + 'GLIBC_TEST_ALLOW_TIME_SETTING' and serialization of test execution + are assured automatically. In general, when testing the GNU C Library, 'test-wrapper' may be set to the name and arguments of any program to run newly built binaries. diff --git a/manual/install.texi b/manual/install.texi index 419576f49c..eb41fbd0b5 100644 --- a/manual/install.texi +++ b/manual/install.texi @@ -379,6 +379,26 @@ directory and @var{hostname} is the host name of a system that can run 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}. +The @samp{cross-test-ssh.sh} script requires @samp{flock} from +@samp{util-linux} to work when @var{glibc_test_allow_time_setting} +environment variable is set. + +It is also possible to execute tests, which require setting the date on +the target machine. Following use cases are supported: +@itemize @bullet +@item +@code{GLIBC_TEST_ALLOW_TIME_SETTING} is set in the environment in +which eligible tests are executed and have the privilege to run +@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 them. + +@item +The @code{cross-test-ssh.sh} script is used and one passes the +@option{--allow-time-setting} flag. In this case, both sets +@code{GLIBC_TEST_ALLOW_TIME_SETTING} and serialization of test +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. diff --git a/scripts/cross-test-ssh.sh b/scripts/cross-test-ssh.sh index 6d8fbcdfd2..a839e22dd0 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,10 @@ 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 (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 +85,10 @@ while [ $# -gt 0 ]; do timeoutfactor="$1" ;; + "--allow-time-setting") + settimeallowed="1" + ;; + "--help") echo "$usage" echo "$help" @@ -127,6 +135,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 |