@@ -347,6 +347,8 @@ 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 requres 'flock' from 'util-linux' to
+work when 'GLIBC_TEST_ALLOW_TIME_SETTING' environment variable is set.
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.
@@ -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:
+@itemize @bullet
+@item
+@code{GLIBC_TEST_ALLOW_TIME_SETTING} is set in the environment in
+which eligible tests are executed and have 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 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
@@ -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