From patchwork Wed Feb 10 10:37:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukasz Majewski X-Patchwork-Id: 42006 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3C46A3971437; Wed, 10 Feb 2021 10:37:45 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-out.m-online.net (mail-out.m-online.net [212.18.0.9]) by sourceware.org (Postfix) with ESMTPS id A513A397141D for ; Wed, 10 Feb 2021 10:37:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org A513A397141D Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=denx.de Authentication-Results: sourceware.org; spf=none smtp.mailfrom=lukma@denx.de Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 4DbGRl2CkGz1qtf0; Wed, 10 Feb 2021 11:37:39 +0100 (CET) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 4DbGRl0m6fz1t6pn; Wed, 10 Feb 2021 11:37:39 +0100 (CET) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new, port 10024) with ESMTP id 2lyIWAauXfFC; Wed, 10 Feb 2021 11:37:37 +0100 (CET) X-Auth-Info: HsLOtbW0zPt+gW6PfIQJremMYyo4VmlJDt3qI41swQw= Received: from localhost.localdomain (85-222-111-42.dynamic.chello.pl [85.222.111.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPSA; Wed, 10 Feb 2021 11:37:37 +0100 (CET) From: Lukasz Majewski To: Joseph Myers , Adhemerval Zanella , Florian Weimer Subject: [PATCH v3 1/3] tst: Extend cross-test-ssh.sh to specify if target date can be altered Date: Wed, 10 Feb 2021 11:37:08 +0100 Message-Id: <20210210103710.1325-1-lukma@denx.de> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-Spam-Status: No, score=-15.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, 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: , Cc: GNU C Library , Florian Weimer , Alistair Francis Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" 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. --- manual/install.texi | 17 +++++++++++++++++ scripts/cross-test-ssh.sh | 22 +++++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/manual/install.texi b/manual/install.texi index 419576f49c..13a8058616 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: +@itemize @bullet +@item +The @code{GLIBC_TEST_ALLOW_TIME_SETTING} is set in the environment in +which eligible tests are executed and have priviledges to run +@code{clock_settime}. In this case there is no prevention from running +those tests in parallel, so the caller shall assure that those tests +are serialized or provide proper wrapper script for it. + +@item +The @code{cross-test-ssh.sh} script is used and one passes +@option{--allow-time-setting} flag. In this case both - setting the +@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..c4b112aa1d 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 inform that +time can be safely adjusted when e.g. tests are run in 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" @@ -127,6 +136,17 @@ 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 host to prevent from unintended +# change of target time. +FLOCK_PATH="/var/lock/clock_settime" +if [ "$settimeallowed" ]; then + exec 99<>${FLOCK_PATH} + flock 99 || { echo "Cannot lock ${FLOCK_PATH}"; exit 1; } + command="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