Files
apfstests/tests/overlay/013
T
Miklos Szeredi 792514c384 overlay/013: do not expect failure
Current test expects test_lower to fail with:

  truncate(test_lower) should have failed

While it is sort of okay to fail like that (the above expectation
basically acknowledges this weirdness in the overlayfs
implementation), it is by no means the only correct behavior: it is
also correct for the test to succeed (i.e. truncation fails with
ETXTBSY).

So add an option to t_truncate_self.c that allows both success and
failure, but obviously not SIGSEGV, which is what a we'd get in a
real failure mode.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
2018-04-22 18:44:16 +08:00

75 lines
2.0 KiB
Bash
Executable File

#! /bin/bash
# FS QA Test 013
#
# Test truncate running executable binaries from lower and upper dirs.
# truncate(2) should return ETXTBSY, not other errno nor segfault
#
# Commit 03bea6040932 ("ovl: get_write_access() in truncate") fixed this issue.
#-----------------------------------------------------------------------
# Copyright (c) 2016 Red Hat Inc. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#-----------------------------------------------------------------------
#
seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"
here=`pwd`
tmp=/tmp/$$
status=1 # failure is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15
_cleanup()
{
cd /
rm -f $tmp.*
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
rm -f $seqres.full
# real QA test starts here
_supported_fs overlay
_supported_os Linux
_require_scratch
_require_test_program "t_truncate_self"
# remove all files from previous runs
_scratch_mkfs
# copy test program to lower and upper dir
lowerdir=$OVL_BASE_SCRATCH_MNT/$OVL_LOWER
upperdir=$OVL_BASE_SCRATCH_MNT/$OVL_UPPER
mkdir -p $lowerdir
mkdir -p $upperdir
cp $here/src/t_truncate_self $lowerdir/test_lower
cp $here/src/t_truncate_self $upperdir/test_upper
_scratch_mount
# run test program from lower and upper dir
# test programs truncate themselfs, all should fail with ETXTBSY
$SCRATCH_MNT/test_lower --may-succeed
$SCRATCH_MNT/test_upper
# success, all done
echo "Silence is golden"
status=0
exit