123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- #!/bin/sh
- #
- # Copyright (c) International Business Machines Corp., 2008
- #
- # 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; either version 2 of the License, or
- # (at your option) any later version.
- #
- # This program 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 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 to the Free Software
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- #
- #*******************************************************************************
- # Readme_ROBind has more details on the tests running for ROBIND.
- # TEST:
- # NAME: test_robind.sh
- # FUNCTIONALITY: File system tests for normal mount, bind mount and RO mount
- #
- # DESCRIPTION: Performs filesystems tests for RO mount.
- # For filesystem, like ext2, ext3, reiserfs, jfs & xfs,
- # This test needs a big block device(>=500MB is ok), and you can specify
- # it by -z option when running runltp.
- # a) mounts on dir1,
- # b) mount --bind dir2
- # c) mount -o remount,ro
- # It verifies the tests on a) and b) works correctly.
- # For the c) option it checks that the tests are not able to write
- # into dir.
- #===============================================================================
- #
- # CHANGE HISTORY:
- # DATE AUTHOR REASON
- # 09/06/2008 Veerendra Chandrappa For Container, testing of RO-Bind mount
- # Dave Hansen
- # This script is based on the Dave Hansen script for testing the robind.
- #*******************************************************************************
- export TCID="test_robind"
- export TST_TOTAL=3
- DIRS="dir1 dir2-bound dir3-ro"
- dir1_mount_flag=0
- dir2_bound_mount_flag=0
- dir3_ro_mount_flag=0
- . test.sh
- usage()
- {
- cat << EOF
- usage: $0 -c command [ext3,ext2,jfs,xfs,reiserfs,ramfs]
- This script verifies ReadOnly-filesystem, by mounting block device and
- executing the filesystem tests.
- OPTIONS
- -h display this message and exit
- -c command to be executed
- EOF
- exit 1
- }
- umount_mntpoint()
- {
- if [ $dir3_ro_mount_flag -eq 1 ];then
- umount dir3-ro
- if [ $? -ne 0 ];then
- tst_resm TWARN "umount dir3-ro failed"
- else
- dir3_ro_mount_flag=0
- fi
- fi
- if [ $dir2_bound_mount_flag -eq 1 ];then
- umount dir2-bound
- if [ $? -ne 0 ];then
- tst_resm TWARN "umount dir2-bound failed"
- else
- dir2_bound_mount_flag=0
- fi
- fi
- if [ $dir1_mount_flag -eq 1 ];then
- umount dir1
- if [ $? -ne 0 ];then
- tst_resm TWARN "umount dir1"
- else
- dir1_mount_flag=0
- fi
- fi
- }
- cleanup()
- {
- umount_mntpoint
- tst_rmdir
- }
- # parameters: file_systems (if any )
- setup()
- {
- tst_require_root
- if [ -z "$LTP_BIG_DEV" ];then
- tst_brkm TCONF "tests need a big block device(>=500MB)"
- else
- device=$LTP_BIG_DEV
- fi
- tst_tmpdir
- TST_CLEANUP=cleanup
- for dir in $DIRS
- do
- rm -rf $dir
- mkdir -p $dir
- done
- # populating the default FS as $LTP_BIG_DEV_FS_TYPE
- # (or ext3 if it's not set), if FS is not given
- if [ -z "$*" ]; then
- FSTYPES=${LTP_BIG_DEV_FS_TYPE:-ext3}
- else
- FSTYPES="$*"
- fi
- }
- # the core function where it runs the tests
- # $1 - directory where to run tests
- # $2 - file system type
- # $3 - read-only flag [true|false]
- testdir()
- {
- local dir=$1
- local fs_type=$2
- local RO=$3
- local tst_result=0
- local curdir=$(pwd)
- cd $dir
- tst_resm TINFO "command: $command"
- # we need to export TMPDIR, in case test calls tst_rmdir()
- export TMPDIR=$curdir/$dir
- eval $command > $curdir/test.log 2>&1
- tst_result=$?
- # if tst_result isn't 0 and read-only flag is false, the test failed
- # or if tst_result is 0 and read-only flag is true, the test failed.
- if [ "$RO" = "false" -a $tst_result -ne 0 -o "$RO" = "true" -a \
- $tst_result -eq 0 ];then
- tst_resm TINFO "error info:"
- cat $curdir/test.log
- tst_resm TFAIL "RO-FileSystem Tests FAILED for \
- $dir $fs_type read-only flag: $RO"
- else
- tst_resm TPASS "RO-FileSystem Tests PASSED for \
- $dir $fs_type read-only flag: $RO"
- fi
- # remove all the temp files created.
- cd ..
- rm -f $curdir/test.log
- rm -rf $curdir/$dir/*
- }
- #=============================================================================
- # MAIN
- # See the description, purpose, and design of this test under TEST
- # in this test's prolog.
- #=============================================================================
- while getopts c:h: OPTION; do
- case $OPTION in
- c)
- command=$OPTARG;;
- h)
- usage;;
- ?)
- usage;;
- esac
- done
- shift $((OPTIND-1))
- setup $*
- # Executes the tests for differnt FS's
- for fstype in $FSTYPES; do
- if [ "$fstype" = "reiserfs" ]; then
- opts="-f --journal-size 513 -q"
- elif echo "$fstype" | grep -q "ext"; then
- opts="-F"
- elif [ "$fstype" = "xfs" ]; then
- opts="-f"
- elif [ "$fstype" = "btrfs" ]; then
- opts="-f"
- fi
- if [ "$fstype" != "ramfs" ]; then
- tst_mkfs $fstype $device $opts
- fi
- mount -t $fstype $device dir1
- if [ $? -ne 0 ];then
- tst_brkm TBROK "mount $device to dir1 failed"
- else
- dir1_mount_flag=1
- fi
- mount --bind dir1 dir2-bound
- if [ $? -ne 0 ];then
- tst_brkm TBROK "mount --bind dir1 dir2-bound failed"
- else
- dir2_bound_mount_flag=1
- fi
- mount --bind dir1 dir3-ro
- if [ $? -ne 0 ];then
- tst_brkm TBROK "mount --bind dir1 dir3-ro failed"
- else
- dir3_ro_mount_flag=1
- fi
- mount -o remount,ro,bind dir1 dir3-ro
- if [ $? -ne 0 ];then
- tst_brkm TBROK "mount -o remount,ro,bind dir1 dir3-ro failed"
- fi
- testdir dir1 $fstype false
- testdir dir2-bound $fstype false
- testdir dir3-ro $fstype true
- umount_mntpoint
- done
- tst_exit
|