Files
apfstests/tests/generic/402
T
Deepa Dinamani 03d3f75cb4 generic/402: fix for updated behavior of timestamp limits
The mount behavior will not be altered because of the unsupported
timestamps on the filesystems.

Adjust the test accordingly.

You can find the series at
https://git.kernel.org/torvalds/c/cfb82e1df8b7c76991ea12958855897c2fb4debc

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
2019-10-25 07:47:14 +08:00

134 lines
2.7 KiB
Bash
Executable File

#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2016 Deepa Dinamani. All Rights Reserved.
#
# FS QA Test 402
#
# Test to verify filesystem timestamps for supported ranges.
#
# Exit status 1: test failed.
# Exit status 0: test passed.
#
seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"
here=`pwd`
tmp=/tmp/$$
status=1 # failure is the default!
trap "exit \$status" 0 1 2 3 15
# Get standard environment, filters and checks.
. ./common/rc
. ./common/filter
. ./common/attr
# remove previous $seqres.full before test
rm -f $seqres.full
# Prerequisites for the test run.
_supported_fs generic
_supported_os Linux
_require_scratch
_require_xfs_io_command utimes
# Compare file timestamps obtained from stat
# with a given timestamp.
check_stat()
{
file=$1
timestamp=$2
stat_timestamp=`stat -c"%X;%Y" $file`
prev_timestamp="$timestamp;$timestamp"
if [ $prev_timestamp != $stat_timestamp ]; then
echo "$prev_timestamp != $stat_timestamp" | tee -a $seqres.full
fi
}
run_test_individual()
{
file=$1
timestamp=$2
update_time=$3
# check if the time needs update
if [ $update_time -eq 1 ]; then
echo "Updating file: $file to timestamp $timestamp" >> $seqres.full
$XFS_IO_PROG -f -c "utimes $timestamp 0 $timestamp 0" $file
if [ $? -ne 0 ]; then
echo "Failed to update times on $file" | tee -a $seqres.full
fi
fi
tsclamp=$((timestamp<tsmin?tsmin:timestamp>tsmax?tsmax:timestamp))
echo "Checking file: $file Updated timestamp is $tsclamp" >> $seqres.full
check_stat $file $tsclamp
}
run_test()
{
update_time=$1
n=1
for TIME in "${TIMESTAMPS[@]}"; do
run_test_individual ${SCRATCH_MNT}/test_$n $TIME $update_time
((n++))
done
}
_scratch_mkfs &>> $seqres.full 2>&1 || _fail "mkfs failed"
_require_timestamp_range $SCRATCH_DEV
read tsmin tsmax <<<$(_filesystem_timestamp_range $SCRATCH_DEV)
echo min supported timestamp $tsmin >> $seqres.full
echo max supported timestamp $tsmax >> $seqres.full
# Test timestamps array
declare -a TIMESTAMPS=(
$tsmin
0
$tsmax
$((tsmax/2))
$((tsmax+1))
)
_scratch_mount || _fail "scratch mount failed"
status=0
# Begin test case 1
echo "In memory timestamps update test start" >> $seqres.full
# update time on the file
update_time=1
run_test $update_time
echo "In memory timestamps update complete" >> $seqres.full
echo "Unmounting and mounting scratch $SCRATCH_MNT" >> $seqres.full
# unmount and remount $SCRATCH_DEV
_scratch_cycle_mount
# Begin test case 2
n=1
# Do not update time on the file this time, just read from disk
update_time=0
echo "On disk timestamps update test start" >> $seqres.full
# Re-run test
run_test $update_time
echo "On disk timestamps update test complete" >> $seqres.full
echo Silence is golden
exit