From patchwork Wed Feb 17 22:31:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukasz Majewski X-Patchwork-Id: 1441418 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=libc-alpha-bounces@sourceware.org; receiver=) Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DgszF3tNkz9sVJ for ; Thu, 18 Feb 2021 09:32:25 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 93D16398B8BA; Wed, 17 Feb 2021 22:32:23 +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.10]) by sourceware.org (Postfix) with ESMTPS id 08076398B8B3 for ; Wed, 17 Feb 2021 22:32:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 08076398B8B3 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 4Dgsz61rGBz1rtyj; Wed, 17 Feb 2021 23:32:18 +0100 (CET) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 4Dgsz60Xxvz1sP6v; Wed, 17 Feb 2021 23:32:18 +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 zE94Jy-zw91x; Wed, 17 Feb 2021 23:32:16 +0100 (CET) X-Auth-Info: ifHA9JZAM6kfzUefM76rz/uTiaQzSpQsNUEmHY7Znm0= 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, 17 Feb 2021 23:32:16 +0100 (CET) From: Lukasz Majewski To: Joseph Myers , Adhemerval Zanella , Florian Weimer , DJ Delorie Subject: [PATCH v4 1/3] tst: Extend cross-test-ssh.sh to specify if target date can be altered Date: Wed, 17 Feb 2021 23:31:56 +0100 Message-Id: <20210217223158.16441-1-lukma@denx.de> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-Spam-Status: No, score=-15.3 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. 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 --- 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: +@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 +@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. + 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,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 From patchwork Wed Feb 17 22:31:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukasz Majewski X-Patchwork-Id: 1441419 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=libc-alpha-bounces@sourceware.org; receiver=) Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DgszK5lr7z9sVJ for ; Thu, 18 Feb 2021 09:32:29 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id EDAA4398B8BF; Wed, 17 Feb 2021 22:32:23 +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.10]) by sourceware.org (Postfix) with ESMTPS id 72100398B8B8 for ; Wed, 17 Feb 2021 22:32:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 72100398B8B8 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 4Dgsz83S4Qz1rv05; Wed, 17 Feb 2021 23:32:20 +0100 (CET) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 4Dgsz81xVSz1sP6v; Wed, 17 Feb 2021 23:32:20 +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 mHWxQMw3Ovec; Wed, 17 Feb 2021 23:32:18 +0100 (CET) X-Auth-Info: OH0/LcNSrx31NZ/nz9jcKhjev9In3m9fJIrcIDHa1Oo= 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, 17 Feb 2021 23:32:18 +0100 (CET) From: Lukasz Majewski To: Joseph Myers , Adhemerval Zanella , Florian Weimer , DJ Delorie Subject: [PATCH v4 2/3] support: Provide xclock_settime test helper function Date: Wed, 17 Feb 2021 23:31:57 +0100 Message-Id: <20210217223158.16441-2-lukma@denx.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210217223158.16441-1-lukma@denx.de> References: <20210217223158.16441-1-lukma@denx.de> MIME-Version: 1.0 X-Spam-Status: No, score=-15.3 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, KAM_SHORT, 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" The xclock_settime is a wrapper function on the clock_settime syscall to be used in the test code. It checks if the GLIBC_TEST_ALLOW_TIME_SETTING env variable is defined in the environment in which test is executed. If it is not - the test ends as unsupported. Otherwise, the clock-settime is executed and return value is assessed. Reviewed-by: Adhemerval Zanella --- Changes for v4: - Remove not needed #include --- support/Makefile | 1 + support/xclock_settime.c | 34 ++++++++++++++++++++++++++++++++++ support/xtime.h | 5 +++++ 3 files changed, 40 insertions(+) create mode 100644 support/xclock_settime.c diff --git a/support/Makefile b/support/Makefile index bb9889efb4..8d63fbd5da 100644 --- a/support/Makefile +++ b/support/Makefile @@ -90,6 +90,7 @@ libsupport-routines = \ xchdir \ xchroot \ xclock_gettime \ + xclock_settime \ xclose \ xchmod \ xconnect \ diff --git a/support/xclock_settime.c b/support/xclock_settime.c new file mode 100644 index 0000000000..183aba4876 --- /dev/null +++ b/support/xclock_settime.c @@ -0,0 +1,34 @@ +/* clock_settime with error checking. + Copyright (C) 2021 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include + +void +xclock_settime (clockid_t clockid, + const struct timespec *ts) +{ + if (getenv (SETTIME_ENV_NAME) == NULL) + FAIL_UNSUPPORTED ("clock_settime is executed only when "\ + SETTIME_ENV_NAME" is set\n"); + + const int ret = clock_settime (clockid, ts); + if (ret < 0) + FAIL_EXIT1 ("clock_settime (%d): %m", clockid); +} diff --git a/support/xtime.h b/support/xtime.h index 2482837dee..b4ac3b59e2 100644 --- a/support/xtime.h +++ b/support/xtime.h @@ -23,10 +23,15 @@ __BEGIN_DECLS +/* Name of the env variable, which indicates if it is possible to + adjust time on target machine. */ +#define SETTIME_ENV_NAME "GLIBC_TEST_ALLOW_TIME_SETTING" + /* The following functions call the corresponding libc functions and terminate the process on error. */ void xclock_gettime (clockid_t clock, struct timespec *ts); +void xclock_settime (clockid_t clock, const struct timespec *ts); /* This helper can often simplify tests by avoiding an explicit variable declaration or allowing that declaration to be const. */ From patchwork Wed Feb 17 22:31:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukasz Majewski X-Patchwork-Id: 1441420 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=libc-alpha-bounces@sourceware.org; receiver=) Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DgszQ39LTz9sVJ for ; Thu, 18 Feb 2021 09:32:34 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 512FD398B8B8; Wed, 17 Feb 2021 22:32:26 +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.10]) by sourceware.org (Postfix) with ESMTPS id 9D39F398B8BB for ; Wed, 17 Feb 2021 22:32:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 9D39F398B8BB 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 4DgszB41lzz1rvBT; Wed, 17 Feb 2021 23:32:22 +0100 (CET) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 4DgszB3kSyz1sP6v; Wed, 17 Feb 2021 23:32:22 +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 wXSlYXK8NER4; Wed, 17 Feb 2021 23:32:20 +0100 (CET) X-Auth-Info: FqtlXF2D8F0cvvCAizjM9JpkiNqsCSU2JVt9DgQ0Jv8= 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, 17 Feb 2021 23:32:20 +0100 (CET) From: Lukasz Majewski To: Joseph Myers , Adhemerval Zanella , Florian Weimer , DJ Delorie Subject: [PATCH v4 3/3] tst: Add test for clock_settime Date: Wed, 17 Feb 2021 23:31:58 +0100 Message-Id: <20210217223158.16441-3-lukma@denx.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210217223158.16441-1-lukma@denx.de> References: <20210217223158.16441-1-lukma@denx.de> MIME-Version: 1.0 X-Spam-Status: No, score=-15.3 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, KAM_SHORT, 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 brings test to check if time on target machine is properly set. To avoid any issues with altering the time: - The time, which was set before the test was executed is restored. - The time is altered only when cross-test-ssh.sh is executed with --allow-time-setting flag Reviewed-by: DJ Delorie --- Changes for v4: - Remove "(in VM)" from test description --- time/Makefile | 3 ++- time/tst-clock_settime.c | 45 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 time/tst-clock_settime.c diff --git a/time/Makefile b/time/Makefile index a8748480d6..b6f0969f3d 100644 --- a/time/Makefile +++ b/time/Makefile @@ -50,7 +50,8 @@ tests := test_time clocktest tst-posixtz tst-strptime tst_wcsftime \ tst-tzname tst-y2039 bug-mktime4 tst-strftime2 tst-strftime3 \ tst-clock tst-clock2 tst-clock_nanosleep tst-cpuclock1 \ tst-adjtime tst-ctime tst-difftime tst-mktime4 tst-clock-y2038 \ - tst-clock2-y2038 tst-cpuclock1-y2038 tst-clock_nanosleep-y2038 + tst-clock2-y2038 tst-cpuclock1-y2038 tst-clock_nanosleep-y2038 \ + tst-clock_settime include ../Rules diff --git a/time/tst-clock_settime.c b/time/tst-clock_settime.c new file mode 100644 index 0000000000..90a16561ed --- /dev/null +++ b/time/tst-clock_settime.c @@ -0,0 +1,45 @@ +/* Test for clock_settime + Copyright (C) 2021 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include + +#define TIMESPEC_SEC_Y2038_OV 0x7FFFFFFF +#define FUTURE_TIME (TIMESPEC_SEC_Y2038_OV - 10) + +static int +do_test (void) +{ + const struct timespec tv = { FUTURE_TIME, 0}; + struct timespec tv_future, tv_now; + + tv_now = xclock_now(CLOCK_REALTIME); + xclock_settime(CLOCK_REALTIME, &tv); + tv_future = xclock_now(CLOCK_REALTIME); + + /* Restore old time value on target machine. */ + xclock_settime(CLOCK_REALTIME, (const struct timespec*) &tv_now); + + if (tv_future.tv_sec < tv.tv_sec) + FAIL_EXIT1 ("clock_settime set wrong time!\n"); + + return 0; +} + +#include