aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--INSTALL15
-rw-r--r--manual/install.texi20
-rwxr-xr-xscripts/cross-test-ssh.sh25
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