summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2015-11-10 14:05:50 +0000
committerPádraig Brady <P@draigBrady.com>2015-11-10 18:24:18 +0000
commitf720844207e03f64502409f36be0693fee3ae676 (patch)
treee341a20ad4228655a6a9cbd19d2d8fe6d32266a5
parentdcae88c00962729db2978ab41007683394bbbfa9 (diff)
downloadcoreutils-f720844207e03f64502409f36be0693fee3ae676.tar.xz
tests: ensure programs are built before testing
programs may not be built due to missing system dependencies, or any program can be excluded at configure time with --enable-no-install-program. So ensure we're not testing the system versions in these cases. * init.cfg (print_ver_): Call require_built_ first. * tests/misc/tty-eof.pl: Skip programs not built. * tests/Coreutils.pm (run_tests): Likewise. * tests/misc/ls-misc.pl: Use 'env test' rather than abs path. * tests/misc/test-diag.pl: Likewise. * tests/local.mk: Adjust include order for dependencies. * tests/misc/arch.sh: Remove redundant calls to require_built_. * tests/misc/chroot-fail.sh: Likewise. * tests/misc/groups-dash.sh: Likewise. * tests/misc/groups-version.sh: Likewise. * tests/misc/stdbuf.sh: Likewise. * tests/cp/acl.sh: Remove problematic call to print_ver_ [gs]etfacl. * tests/mv/acl.sh: Likewise. * cfg.mk (sc_env_test_dependencies): A new syntax check to enforce specifying dependencies with print_ver_ for programs specified through the env command. * du/bigtime.sh: Add new print_ver_ dependencies. * du/max-depth.sh: Likewise. * dd/ascii.sh: Likewise. * tests/ls/capability.sh: Likewise. * tests/ls/root-rel-symlink-color.sh: Likewise. * tests/misc/chroot-fail.sh: Likewise. * tests/misc/readlink-fp-loop.sh: Likewise. * tests/misc/sort-debug-keys.sh: Likewise. * tests/readlink/can-e.sh: Likewise. * tests/readlink/can-f.sh: Likewise. * tests/readlink/can-m.sh: Likewise. * tests/tail-2/inotify-race.sh: Likewise. * tests/tail-2/inotify-race2.sh: Likewise. * tests/touch/no-create-missing.sh: Likewise. * tests/touch/no-dereference.sh: Likewise. * tests/misc/printenv.sh: Tweak to avoid syntax check trigger. * tests/misc/help-version.sh: Likewise. * tests/misc/yes.sh: Likewise. * tests/misc/printf-quote.sh: Use previously unused $prog. * configure.ac (EXTRA_MANS): Add $gl_no_install_prog to the list so that check-x-vs-1 syntax check is satisfied.
-rw-r--r--cfg.mk14
-rw-r--r--configure.ac4
-rw-r--r--init.cfg1
-rw-r--r--tests/Coreutils.pm4
-rwxr-xr-xtests/cp/acl.sh2
-rwxr-xr-xtests/dd/ascii.sh2
-rwxr-xr-xtests/du/bigtime.sh1
-rwxr-xr-xtests/du/max-depth.sh1
-rw-r--r--tests/local.mk2
-rwxr-xr-xtests/ls/capability.sh2
-rwxr-xr-xtests/ls/root-rel-symlink-color.sh2
-rwxr-xr-xtests/misc/arch.sh2
-rwxr-xr-xtests/misc/chroot-fail.sh4
-rwxr-xr-xtests/misc/groups-dash.sh1
-rwxr-xr-xtests/misc/groups-version.sh1
-rwxr-xr-xtests/misc/help-version.sh3
-rwxr-xr-xtests/misc/ls-misc.pl2
-rwxr-xr-xtests/misc/printenv.sh2
-rwxr-xr-xtests/misc/printf-quote.sh12
-rwxr-xr-xtests/misc/readlink-fp-loop.sh2
-rwxr-xr-xtests/misc/sort-debug-keys.sh2
-rwxr-xr-xtests/misc/stdbuf.sh1
-rwxr-xr-xtests/misc/test-diag.pl5
-rwxr-xr-xtests/misc/tty-eof.pl1
-rwxr-xr-xtests/misc/yes.sh3
-rwxr-xr-xtests/mv/acl.sh2
-rwxr-xr-xtests/readlink/can-e.sh2
-rwxr-xr-xtests/readlink/can-f.sh2
-rwxr-xr-xtests/readlink/can-m.sh2
-rwxr-xr-xtests/tail-2/inotify-race.sh2
-rwxr-xr-xtests/tail-2/inotify-race2.sh2
-rwxr-xr-xtests/touch/no-create-missing.sh2
-rwxr-xr-xtests/touch/no-dereference.sh2
33 files changed, 55 insertions, 37 deletions
diff --git a/cfg.mk b/cfg.mk
index d6c4c9f61..a2040348c 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -527,6 +527,20 @@ sc_prohibit_verbose_version:
halt='use the print_ver_ function instead...' \
$(_sc_search_regexp)
+# Enforce print_ver_ tracking of dependencies
+# Each coreutils specific program a test requires
+# should be tagged by calling through env(1).
+sc_env_test_dependencies:
+ @cd $(top_srcdir) && GIT_PAGER= git grep -E \
+ "env ($$(build-aux/gen-lists-of-programs.sh --list-progs | \
+ grep -vF '[' |paste -d'|' -s))" tests | \
+ sed "s/\([^:]\):.*env \([^)' ]*\).*/\1 \2/" | uniq | \
+ while read test prog; do \
+ printf '%s' $$test | grep -q '\.pl$$' && continue; \
+ grep -q "print_ver_.* $$prog" $$test \
+ || echo $$test should call: print_ver_ $$prog; \
+ done | grep . && exit 1 || :
+
# Use framework_failure_, not the old name without the trailing underscore.
sc_prohibit_framework_failure:
@prohibit='\<framework_''failure\>' \
diff --git a/configure.ac b/configure.ac
index fc1a0526b..66c8cbe16 100644
--- a/configure.ac
+++ b/configure.ac
@@ -517,7 +517,9 @@ man1_MANS=`
# Not installed by "make install", but must be built when creating
# a distribution tarball.
-EXTRA_MANS=`for p in $no_install_progs_default; do echo man/$p.1; done`
+EXTRA_MANS=`for p in $no_install_progs_default $gl_no_install_prog; do
+ echo man/$p.1
+ done`
# Replace all the programs by the single binary and symlinks if specified.
single_binary_progs=
diff --git a/init.cfg b/init.cfg
index 6f5f80bf3..e4309ae53 100644
--- a/init.cfg
+++ b/init.cfg
@@ -659,6 +659,7 @@ retry_delay_()
# sourcing init.sh.
print_ver_()
{
+ require_built_ "$@"
if test "$VERBOSE" = yes; then
local i
for i in $*; do
diff --git a/tests/Coreutils.pm b/tests/Coreutils.pm
index bd2088f65..632960ae0 100644
--- a/tests/Coreutils.pm
+++ b/tests/Coreutils.pm
@@ -224,6 +224,7 @@ sub run_tests ($$$$$)
# To indicate that $prog is a shell built-in, you'd make it a string 'ref'.
# E.g., call run_tests ($prog, \$prog, \@Tests, $save_temps, $verbose);
# If it's a ref, invoke it via "env":
+ my $built_prog = ref $prog ? $$prog : $prog;
my @prog = ref $prog ? (qw(env --), $$prog) : $prog;
# Warn about empty t_spec.
@@ -271,6 +272,9 @@ sub run_tests ($$$$$)
}
return 1 if $bad_test_name;
+ $ENV{built_programs} =~ /\b$built_prog\b/ ||
+ CuSkip::skip "required program(s) not built [$built_prog]\n";
+
# FIXME check exit status
system (@prog, '--version') if $verbose;
diff --git a/tests/cp/acl.sh b/tests/cp/acl.sh
index e397ff063..591479c0b 100755
--- a/tests/cp/acl.sh
+++ b/tests/cp/acl.sh
@@ -18,7 +18,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ cp getfacl setfacl
+print_ver_ cp
require_acl_
diff --git a/tests/dd/ascii.sh b/tests/dd/ascii.sh
index be6494a0b..5f96a2d3e 100755
--- a/tests/dd/ascii.sh
+++ b/tests/dd/ascii.sh
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ dd
+print_ver_ dd printf
{
# Two lines, EBCDIC " A A" and " A ", followed by all the bytes in order.
diff --git a/tests/du/bigtime.sh b/tests/du/bigtime.sh
index 95fa1932d..990853ecd 100755
--- a/tests/du/bigtime.sh
+++ b/tests/du/bigtime.sh
@@ -17,6 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
+print_ver_ du
export LC_ALL=C
export TZ=UTC0
diff --git a/tests/du/max-depth.sh b/tests/du/max-depth.sh
index 25ad46896..3c0b0bc00 100755
--- a/tests/du/max-depth.sh
+++ b/tests/du/max-depth.sh
@@ -17,6 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
+print_ver_ du
mkdir -p a/b/c/d/e || framework_failure_
printf 'a/b/c\na/b\na\n' > exp || framework_failure_
diff --git a/tests/local.mk b/tests/local.mk
index f65f7bcc8..675607e7a 100644
--- a/tests/local.mk
+++ b/tests/local.mk
@@ -32,7 +32,7 @@ TESTSUITE_PERL = $(SHELL) $(srcdir)/no-perl
endif
# Options passed to the perl invocations running the perl test scripts.
-TESTSUITE_PERL_OPTIONS = -w -I$(srcdir)/tests -MCoreutils -MCuSkip
+TESTSUITE_PERL_OPTIONS = -w -I$(srcdir)/tests -MCuSkip -MCoreutils
# '$f' is set by the Automake-generated test harness to the path of the
# current test script stripped of VPATH components, and is used by the
# CuTmpdir module to determine the name of the temporary files to be
diff --git a/tests/ls/capability.sh b/tests/ls/capability.sh
index bd32be263..2a85c7c47 100755
--- a/tests/ls/capability.sh
+++ b/tests/ls/capability.sh
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ ls
+print_ver_ ls printf
require_root_
grep '^#define HAVE_CAP 1' $CONFIG_HEADER > /dev/null \
diff --git a/tests/ls/root-rel-symlink-color.sh b/tests/ls/root-rel-symlink-color.sh
index 0b977fcb6..41ad34205 100755
--- a/tests/ls/root-rel-symlink-color.sh
+++ b/tests/ls/root-rel-symlink-color.sh
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ ls
+print_ver_ ls test
symlink_to_rel=
for i in /*; do
diff --git a/tests/misc/arch.sh b/tests/misc/arch.sh
index d5ae58228..1c924a0cf 100755
--- a/tests/misc/arch.sh
+++ b/tests/misc/arch.sh
@@ -19,8 +19,6 @@
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
print_ver_ arch
-require_built_ arch
-
arch > out || fail=1
uname -m > exp || fail=1
diff --git a/tests/misc/chroot-fail.sh b/tests/misc/chroot-fail.sh
index 14499edd7..fe4178b1e 100755
--- a/tests/misc/chroot-fail.sh
+++ b/tests/misc/chroot-fail.sh
@@ -18,9 +18,7 @@
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ chroot
-
-require_built_ chroot
+print_ver_ chroot pwd
# These tests verify exact status of internal failure; since none of
# them actually run a command, we don't need root privileges
diff --git a/tests/misc/groups-dash.sh b/tests/misc/groups-dash.sh
index 8f7ec7590..1d9674324 100755
--- a/tests/misc/groups-dash.sh
+++ b/tests/misc/groups-dash.sh
@@ -18,7 +18,6 @@
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
print_ver_ groups
-require_built_ groups
# Coreutils 6.9 and earlier failed to display information on first argument
# if later argument was --.
diff --git a/tests/misc/groups-version.sh b/tests/misc/groups-version.sh
index 443944352..f6de3f2ef 100755
--- a/tests/misc/groups-version.sh
+++ b/tests/misc/groups-version.sh
@@ -18,7 +18,6 @@
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
print_ver_ groups
-require_built_ groups
groups --version | sed 's/^groups/id/; /^$/q' > out || fail=1
id --version | sed '/^$/q' > exp || fail=1
diff --git a/tests/misc/help-version.sh b/tests/misc/help-version.sh
index 29468edbd..1878ae94d 100755
--- a/tests/misc/help-version.sh
+++ b/tests/misc/help-version.sh
@@ -213,7 +213,8 @@ id_setup () { args=-u; }
# Use env to avoid invoking built-in sleep of Solaris 11's /bin/sh.
kill_setup () {
- env sleep 10m & pid=$!
+ external=env
+ $external sleep 10m & pid=$!
args=$pid
}
diff --git a/tests/misc/ls-misc.pl b/tests/misc/ls-misc.pl
index d3897737e..6932e4d0a 100755
--- a/tests/misc/ls-misc.pl
+++ b/tests/misc/ls-misc.pl
@@ -55,7 +55,7 @@ sub shell_quote($)
# that cannot be done.
sub setuid_setup()
{
- my $test = shell_quote "$ENV{abs_top_builddir}/src/test";
+ my $test = 'env test';
system (qq(touch setuid && chmod u+s setuid && $test -u setuid &&
touch setgid && chmod g+s setgid && $test -g setgid &&
mkdir sticky && chmod +t sticky && $test -k sticky &&
diff --git a/tests/misc/printenv.sh b/tests/misc/printenv.sh
index 862b48ba8..0be97e880 100755
--- a/tests/misc/printenv.sh
+++ b/tests/misc/printenv.sh
@@ -23,7 +23,7 @@ print_ver_ printenv
# printenv as a builtin, so we must invoke it via "env".
# But beware of $_, set by many shells to the last command run.
# Also, filter out LD_PRELOAD, which is set when running under valgrind.
-# Note the apparently redundant "env env": this is to ensure to get
+# Note the apparently redundant "env env": this is to ensure to get
# env's output the same way as that of printenv and works around a bug
# on aarch64 at least where libc's execvp reverses the order of the
# output.
diff --git a/tests/misc/printf-quote.sh b/tests/misc/printf-quote.sh
index 73fc404b8..e6183007b 100755
--- a/tests/misc/printf-quote.sh
+++ b/tests/misc/printf-quote.sh
@@ -16,13 +16,13 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-prog='env printf'
-
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
print_ver_ printf
+prog='env printf'
+
# Equivalent output to ls --quoting=shell-escape
-env printf '%q\n' '' "'" a 'a b' '~a' 'a~' "$(env printf %b 'a\r')" > out
+$prog '%q\n' '' "'" a 'a b' '~a' 'a~' "$($prog %b 'a\r')" > out
cat <<\EOF > exp || framework_failure_
''
''\'''
@@ -40,11 +40,11 @@ f=$LOCALE_FR_UTF8
if test "$LOCALE_FR_UTF8" != "none"; then
(
#printable multi-byte
- LC_ALL=$f env printf '%q\n' 'áḃç' > out
+ LC_ALL=$f $prog '%q\n' 'áḃç' > out
#non-printable multi-byte
- LC_ALL=$f env printf '%q\n' "$(LC_ALL=$f env printf '\u0378')" >> out
+ LC_ALL=$f $prog '%q\n' "$(LC_ALL=$f $prog '\u0378')" >> out
#printable multi-byte in C locale
- LC_ALL=C env printf '%q\n' 'áḃç' >> out
+ LC_ALL=C $prog '%q\n' 'áḃç' >> out
)
cat <<\EOF > exp || framework_failure_
áḃç
diff --git a/tests/misc/readlink-fp-loop.sh b/tests/misc/readlink-fp-loop.sh
index 50ada55e8..0e18fe72b 100755
--- a/tests/misc/readlink-fp-loop.sh
+++ b/tests/misc/readlink-fp-loop.sh
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ readlink
+print_ver_ readlink pwd
cwd=$(env pwd -P)
# To trigger this bug, we have to construct a name/situation during
diff --git a/tests/misc/sort-debug-keys.sh b/tests/misc/sort-debug-keys.sh
index 776fb67cf..a0a287401 100755
--- a/tests/misc/sort-debug-keys.sh
+++ b/tests/misc/sort-debug-keys.sh
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ sort
+print_ver_ sort printf
number() { cat -n | sed 's/^ *//'; }
diff --git a/tests/misc/stdbuf.sh b/tests/misc/stdbuf.sh
index 428d4a2f1..66b644bdd 100755
--- a/tests/misc/stdbuf.sh
+++ b/tests/misc/stdbuf.sh
@@ -20,7 +20,6 @@
print_ver_ stdbuf
getlimits_
-require_built_ stdbuf
# stdbuf fails when the absolute top build dir name contains e.g.,
# space, TAB, NL
diff --git a/tests/misc/test-diag.pl b/tests/misc/test-diag.pl
index f498d1a80..c120509c7 100755
--- a/tests/misc/test-diag.pl
+++ b/tests/misc/test-diag.pl
@@ -23,7 +23,6 @@ use strict;
# Turn off localization of executable's output.
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
-my $prog = "$ENV{abs_top_builddir}/src/test";
my @Tests =
(
# In coreutils-5.93, this diagnostic lacked the newline.
@@ -34,6 +33,6 @@ my @Tests =
my $save_temps = $ENV{DEBUG};
my $verbose = $ENV{VERBOSE};
-
-my $fail = run_tests ($program_name, $prog, \@Tests, $save_temps, $verbose);
+my $prog = 'test';
+my $fail = run_tests ($program_name, \$prog, \@Tests, $save_temps, $verbose);
exit $fail;
diff --git a/tests/misc/tty-eof.pl b/tests/misc/tty-eof.pl
index c1b4b785f..f7f549207 100755
--- a/tests/misc/tty-eof.pl
+++ b/tests/misc/tty-eof.pl
@@ -68,6 +68,7 @@ $@
{
my $exp = new Expect;
$exp->log_user(0);
+ $ENV{built_programs} =~ /\b$cmd\b/ || next;
$exp->spawn("$cmd 2> $stderr")
or (warn "$ME: cannot run '$cmd': $!\n"), $fail=1, next;
# No input for cut -f2.
diff --git a/tests/misc/yes.sh b/tests/misc/yes.sh
index 79f8b87c0..a5e81776e 100755
--- a/tests/misc/yes.sh
+++ b/tests/misc/yes.sh
@@ -31,7 +31,8 @@ done
# Check the many small items case,
# both fitting and overflowing the internal buffer
-if env true $(seq 4000); then
+external=env
+if external true $(seq 4000); then
for i in 100 4000; do
seq $i | paste -s -d ' ' | sed p > out.1
yes $(seq $i) | head -n2 > out.2
diff --git a/tests/mv/acl.sh b/tests/mv/acl.sh
index b09125c5a..d1471dc22 100755
--- a/tests/mv/acl.sh
+++ b/tests/mv/acl.sh
@@ -18,7 +18,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ mv getfacl setfacl
+print_ver_ mv
require_acl_
diff --git a/tests/readlink/can-e.sh b/tests/readlink/can-e.sh
index 05f297b7c..eb49bc648 100755
--- a/tests/readlink/can-e.sh
+++ b/tests/readlink/can-e.sh
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ readlink
+print_ver_ readlink pwd
pwd=$(pwd)
my_pwd=$(env pwd -P)
diff --git a/tests/readlink/can-f.sh b/tests/readlink/can-f.sh
index 4b25fc63d..b157bbf6e 100755
--- a/tests/readlink/can-f.sh
+++ b/tests/readlink/can-f.sh
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ readlink
+print_ver_ readlink pwd
pwd=$(pwd)
my_pwd=$(env pwd -P)
diff --git a/tests/readlink/can-m.sh b/tests/readlink/can-m.sh
index 2eb13565a..0bcbd64a7 100755
--- a/tests/readlink/can-m.sh
+++ b/tests/readlink/can-m.sh
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ readlink
+print_ver_ readlink pwd
pwd=$(pwd)
my_pwd=$(env pwd -P)
diff --git a/tests/tail-2/inotify-race.sh b/tests/tail-2/inotify-race.sh
index 4ce05083f..546cb8525 100755
--- a/tests/tail-2/inotify-race.sh
+++ b/tests/tail-2/inotify-race.sh
@@ -21,7 +21,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ tail
+print_ver_ tail sleep
# Terminate any background gdb/tail process
cleanup_() {
diff --git a/tests/tail-2/inotify-race2.sh b/tests/tail-2/inotify-race2.sh
index 1e01d5051..78d8b548a 100755
--- a/tests/tail-2/inotify-race2.sh
+++ b/tests/tail-2/inotify-race2.sh
@@ -20,7 +20,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ tail
+print_ver_ tail sleep
# Terminate any background gdb/tail process
cleanup_() {
diff --git a/tests/touch/no-create-missing.sh b/tests/touch/no-create-missing.sh
index 7ad1a3a9a..90ec6dc69 100755
--- a/tests/touch/no-create-missing.sh
+++ b/tests/touch/no-create-missing.sh
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ touch
+print_ver_ touch test
touch -c no-file > /dev/null 2>&1 || fail=1
diff --git a/tests/touch/no-dereference.sh b/tests/touch/no-dereference.sh
index fc0c72378..cddcbbeaf 100755
--- a/tests/touch/no-dereference.sh
+++ b/tests/touch/no-dereference.sh
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ touch
+print_ver_ touch test
ln -s nowhere dangling || framework_failure_
touch file || framework_failure_